2010-09-08 70 views

回答

10

不,因为您可以通过/proc/$PID/cmdline查看。

我建议不要尝试重塑安全工具。 sudo程序可以缓存您的密码。

+2

当echo命令的/ proc条目存在时,可能会有一个非常短的窗口,但“short”是操作术语,在我看来(以毫秒为单位或更少)。 – 2010-09-08 12:06:14

+1

执行'strace -o bash.strace -f bash -c'echo password | cat''并检查文件'bash.strace'。你会看到'execve(“/ bin/cat”,[“cat”],[/ * 53 vars * /])= 0'这一行,但你不会在那里看到回显(第一行除外)它传递给bash):这是一个bash内建的。所以,在bash中启动脚本就足以保证它的安全。 – ZyX 2010-09-08 21:59:52

+0

@ZyX - 感谢您对风险的解释。我以前不会考虑这种解决方案,但是我的情况迫使我使用它。很高兴它不像我担心的那样不安全。 – MountainX 2013-06-30 02:27:20

4
echo $password | sudo -S apt-get install -y foo bar 

这是有点危险。如果用户已经通过sudo身份验证,sudo不会再次请求密码,它将被转发到apt-get,可能会导致奇怪的结果(例如,如果postinstall脚本提出问题)。我建议使用

sudo -k       # remove previous sudo timestamp 
echo $password | sudo -v -S  # create a new one for 15 minutes 
sudo apt-get ...    # execute the command 

改为。

编辑:德克是正确的密码在很短的时间内可见,而echo执行。请把我的答案看作是一个扩展的评论,而不是回答你的问题。

+0

为什么使用变量 - 为什么不让sudo处理提示?我认为第二行应该成为'sudo -v -S'。保留它的唯一原因是因为'read -s'不会回显密码 - 但是,'sudo'也没有? – 2010-09-08 12:11:08

+0

@Jonathan:的确如此。但是,这些脚本通常用于在多台计算机上执行sudo(请参阅此处的示例:http://www.heinzi.at/projects/upgradebest.sh/)。那么,有意义的是不必多次输入密码。 – Heinzi 2010-09-08 12:19:00

+0

足够公平 - 我忘了解释为了在SO上提出问题而最小化。 – 2010-09-08 12:31:00

11

一个更好的方法是编辑sudoers文件,并添加你的程序不需要密码...

做一个sudo visudo并添加以下,以使你的管理员组运行apt-get W/O密码: %admin ALL = NOPASSWD: /usr/bin/apt-get

查看sudoers手册页获取更多详细信息。

-1

sudoopen source,所以你可以编译自己的版本,它将密码作为命令行参数。

+2

我强烈建议不要使用家庭版本的操作系统的重要组成部分,而不要*非常*充分的理由。 (您必须手动应用并重新编译每个补丁等) – Heinzi 2010-09-08 12:20:50