Shell脚本密码命令行参数的安全性

Dav*_*rks 6 linux bash command-line password-protection command-line-arguments

如果我使用密码作为命令行参数,则在系统上使用密码ps.

但是,如果我在一个bash shell脚本中,我会做类似的事情:

...
{ somecommand -p mypassword }
...
Run Code Online (Sandbox Code Playgroud)

这仍然会出现在流程列表中吗?或者这样安全吗?

  • 子流程怎么样:(...)?不安全吧?
  • 共处理?

seh*_*ehe 6

命令行将始终可见(如果仅通过/ proc).

所以唯一真正的解决方案是:不要.您可以在stdin或专用的fd上提供它:

./my_secured_process some parameters 3<<< "b@dP2ssword"
Run Code Online (Sandbox Code Playgroud)

像一个脚本(简单第一)

#!/bin/bash
cat 0<&3
Run Code Online (Sandbox Code Playgroud)

(此示例只会将错误密码转储到stdout)

现在您需要关注的是:

  • MITM(屋檐丢弃密码的欺骗脚本,例如通过破坏PATH)
  • bash历史记录在命令行中保留您的密码(例如,查看HISTIGNORE的bash)
  • 包含密码重定向的脚本的安全性
  • 所使用的tty的安全性; 键盘记录器; ......正如你所看到的,我们现在已经陷入了"一般安全原则"

  • [显然](http://unix.stackexchange.com/a/181996),"bash中的here-strings实现为已删除的临时文件".如果这意味着他们可以将其转换为磁盘,那么这是另一个安全考虑因素.可能更好地使用进程替换[如此处](http://stackoverflow.com/a/24455773):`./ my_secured_process一些参数3 <<(printf'%s \n'b @ dP2ssword) (2认同)