我们有一个以build
用户身份运行的 CI 服务器应用程序。 CI 服务器运行的任何带有参数的命令都可以通过 看到ps
。尽管非管理员用户无权在 CI 服务器上加载 shell,但他们可以通过任务运行 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
完成后请务必关闭管道。
进一步阅读: