build
사용자로 실행되는 CI 서버 애플리케이션이 있습니다 . CI 서버에서 실행되는 매개변수가 포함된 모든 명령은 를 통해 볼 수 있습니다 ps
. 관리자가 아닌 사용자에게는 CI 서버에 셸을 로드할 수 있는 권한이 없지만 작업을 통해 unix 명령을 실행할 수 있습니다.
내가 관심 있는 것은 사용자 A가 간단히 ps
.
CI 서버의 모든 작업은 사용자로 실행됩니다 build
. 사용자는 다른 것으로 전환할 수 없습니다 user
.
ps
사용자가 수행할 수 없는 작업에 있도록 명령을 차단하여 ps
문제를 해결할 수도 있지만 알고 싶습니다.
- 권한 없이 명령줄 인수를 노출하는 다른 명령을 실행할 수 있습니까
root
? - 이 질문의 맥락을 고려할 때 이를 관리하는 더 좋고 안전한 방법이 있습니까?
답변1
hidepid
/proc 설치 옵션 보기
On multi-user systems, it is often useful to secure the process directories stored in /proc/ so that they can be viewed only by the root user. You can restrict the access to these directories with the use of the hidepid option.
To change the file system parameters, you can use the mount command with the -o remount option. As root, type:
mount -o remount,hidepid=value /proc
Here, value passed to hidepid is one of:
0 (default) — every user can read all world-readable files stored in a process directory.
1 — users can access only their own process directories. This protects the sensitive files like cmdline, sched, or status from access by non-root users. This setting does not affect the actual file permissions.
2 — process files are invisible to non-root users. The existence of a process can be learned by other means, but its effective UID and GID is hidden. Hiding these IDs complicates an intruder's task of gathering information about running processes.
더 많은 정보 링크 -
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/ch-proc.html
답변2
모든 명령이 빌드 사용자로 실행되는 것이 유감입니다.
그러면 빌드를 제출하는 사람은 누구나 다른 사용자의 작업을 보고 방해할 수 있습니다. 빌드를 실행하면 임의의 코드가 실행될 수 있습니다. 이를 통해 빌드를 제출하는 사람은 누구나 를 실행할 수 있을 뿐만 ps
아니라 다른 작업에 속하는 파일을 읽고 쓸 수도 있습니다. 빌드를 제출한 사용자를 신뢰할 수 없다면~ 해야 하다별도의 사용자로 빌드를 실행하세요.
해당 CI 서버에 계정이 있지만 빌드 제출이 허용되지 않는 사용자에게만 관심이 있는 경우이것hidepid
옵션이 도움이 될 수 있습니다. 또는 빌드 커미터에게 명령줄 인수 대신 파일이나 환경 변수에 비밀 정보를 전달하도록 교육하세요. 이 ps
명령은 여러분이 처리해야 할 것이 아니라 단지 사용하기 좋은 프린터일 뿐입니다.프로세스 파일 시스템. 프로세스 1234의 명령줄을 인쇄할 수 있습니다 cat /proc/1234/cmdline
.
빌드에 기밀성 문제가 있는 경우 잠재적인 정보 누출을 한 번에 하나씩 연결하는 대신 모든 빌드를 단일 프로세스에서 실행하는 것이 좋습니다.컨테이너또는 가상 머신.
답변3
popen
명령줄에 정보를 전달하는 대신 프로그램을 수정하여 표준 입력에 대한 정보를 읽고 하위 프로세스(파이프)로 시작하여 실행할 수 있습니다. pclose
작업이 끝나면 반드시 파이프를 닫으십시오.
추가 자료: