w 命令对用户安全吗?

pat*_*eza 7 command-line security password

某些应用程序允许将密码作为参数传递。例如:

mysql --user=user_name --password=your_password db_name
Run Code Online (Sandbox Code Playgroud)

安全吗?除了键入的密码会保存在 bash 历史记录中这一事实之外,有人可以w在适当的时候键入命令,并会看到进程的完整命令行(包括密码)。

令我惊讶的是,每个用户都可以看到我当前正在执行的命令。

Cel*_*ada 15

系统中每个进程的命令行参数都被认为是“公共的”。不仅是w命令,而且ps还有top许多其他命令都可以理所当然地访问该信息。实际上,获取该信息不需要特殊权限。在 Linux 上,您可以通过读取/proc/<pid>/cmdline.

这不是wtopps(或cat)的缺陷或不安全行为。相反,责任在于永远不要在多用户系统的命令行上传递敏感信息。

大多数能够在命令行文档中接受密码的实用程序不建议这样做。例如,来自mysql的联机帮助页:

在命令行上指定密码应该被认为是不安全的。请参阅第 5.3.2.2 节,“密码安全的最终用户指南”。您可以使用选项文件来避免在命令行上提供密码。

顺便说一句,在环境变量中传递密码或敏感数据不太明显不安全,但实际上在大多数系统上也是不安全的。

  • `mysql` 实际上覆盖了密码参数(参见 http://unix.stackexchange.com/q/88665/15241),但这并不能真正解决安全问题。 (2认同)

Per*_*ulf 5

不,在命令行上将密码传递给程序是不安全的。最好使用:

mohsen@debian:~$ mysql -uuser -p
Enter password: 
Run Code Online (Sandbox Code Playgroud)