其他用户可以查看传递给命令的参数吗?

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 行。

将显示当前正在运行的进程的完整命令行。这就是为什么你不想通过命令行参数提供密码之类的东西。

  • 在 Linux 上,进程可以覆盖传递给它的参数数组。这反映在其他用户可见的进程树中。然而,它们总会有暴露的时候,并且可能容易受到竞争条件和计时攻击的影响。 (13认同)
  • @George 有,因为 rdesktop 以某种方式做到了(密码参数变成了`XXXXXXXX`);我很想知道怎么做。它可能会做一些蹩脚的事情,比如分叉自己并传递一个虚假的参数;我不知道 (3认同)

Mac*_*tka 8

在标准设置中,参数是可见的。正如已经提到的,过程可以覆盖它们在内存而不是之前其他进程有机会看到它们。

但是,grsecurity 补丁集包含一个可以更改它的补丁,因此只有进程所有者(和 root)才能看到传递给进程的参数。