将sudo密码存储为脚本中的变量 - 是否安全?

时间:2010-09-08 11:55:59

标签: bash sudo

以这种方式存储我的密码安全吗?

echo 'Write sudo password (will not be displayed) and hit enter'
read -s password

我需要它来制作这样的命令:

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

4 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:11)

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

执行sudo visudo并添加以下内容以使您的管理员组能够运行apt-get w / o密码:     %admin ALL = NOPASSWD: /usr/bin/apt-get

有关更多详细信息,请参阅sudoers手册页。

答案 2 :(得分:5)

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

这有点危险。如果用户已经对sudo进行了身份验证,sudo将不会再次请求密码并将其转发到apt-get,这可能会导致奇怪的结果(例如,如果安装后脚本提出问题)。我建议使用

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

代替。

编辑:Dirk在执行echo时很短时间内可以看到密码是正确的。请将我的答案视为延伸评论,而不是您问题的答案。

答案 3 :(得分:-1)

sudoopen source,因此您可以编译自己的版本,该版本将密码作为命令行参数。