Nat*_*man 21 command-line security process
如果我用这样的参数调用命令:
bob@bob-pc:~$ command -arg1 -arg2
Run Code Online (Sandbox Code Playgroud)
...其他用户可以查看传递给命令的参数吗?
Gil*_*il' 15
一般来说,命令行参数对所有人都是可见的。例如,作为 OpenBSD 上的非 root 用户,我可以看到以 root 身份运行的进程的参数:
$ ps -U root -o command= |grep getty |head -n 1
/usr/libexec/getty std.9600 ttyC0
Run Code Online (Sandbox Code Playgroud)
在 Linux 上,您会注意到所有/proc/*/cmdline
文件都是世界可读的。
可能存在高度特定的设置,其中命令行参数保持私有。例如,SELinux 和 Solaris 可以完全隐藏其他用户的进程。但是除非您完全知道自己处于这样的环境中,否则假设命令行参数是公开的。
小智 13
一般来说是的,他们可以看到它。这是来自w
手册页:
为每个用户显示以下条目:登录名、tty 名称、远程主机、登录时间、空闲时间、JCPU、PCPU 和 com? 他们当前进程的 mand 行。
将显示当前正在运行的进程的完整命令行。这就是为什么你不想通过命令行参数提供密码之类的东西。
在标准设置中,参数是可见的。正如已经提到的,过程可以覆盖它们在内存而不是之前其他进程有机会看到它们。
但是,grsecurity 补丁集包含一个可以更改它的补丁,因此只有进程所有者(和 root)才能看到传递给进程的参数。