某些应用程序允许将密码作为参数传递。例如:
mysql --user=user_name --password=your_password db_name
安全吗?除了输入的密码将保存在 bash 历史记录中之外,某人还可以w
在适当的时候输入命令,并会看到进程的完整命令行(包括密码)。
让我感到非常惊讶的是,每个用户都可以看到我当前正在执行的命令。
答案1
系统中每个进程的命令行参数都被视为“公共”。当然,不仅是w
命令,而且ps
还有许多其他命令都可以访问该信息。top
事实上,获取该信息不需要任何特殊权限。在 Linux 上,您可以通过读取 来读取另一个进程的命令行,甚至是属于另一个用户的进程/proc/<pid>/cmdline
。
w
这不是或top
或ps
(或)方面的缺陷或不安全行为cat
。相反,责任在于永远不要在多用户系统的命令行上传递敏感信息。
大多数能够在命令行上接受密码的实用程序都表明不建议这样做。例如,来自 的mysql
联机帮助页:
在命令行上指定密码应被视为不安全。请参阅第 5.3.2.2 节“密码安全的最终用户指南”。您可以使用选项文件来避免在命令行上提供密码。
顺便说一句,在环境变量中传递密码或敏感数据并不是那么明显的不安全,但在大多数系统上实际上也是不安全的。
答案2
不,在命令行上向程序传递密码并不安全。最好使用:
mohsen@debian:~$ mysql -uuser -p
Enter password:
答案3
虽然它并不安全,但请记住,Linux 现在才二十岁出头——就像 IT 中的其他事物一样,安全隐患要么当时不那么明确,要么后来才得到解决。
因此,正如其他答案中提到的,不要在命令行上使用密码。
您还可以(并且可能应该)限制任一安装环提供的信息procfs with the
,或使用网络安全硬化内核。请注意,这可能会破坏一些东西(可能是 cgroup 和任何依赖它们的东西 - 例如 systemd),至少在撰写本文时是这样。