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