【发布时间】:2010-09-08 11:55:59
【问题描述】:
这样存储我的密码安全吗?
echo 'Write sudo password (will not be displayed) and hit enter'
read -s password
我需要它来发出这样的命令:
echo $password | sudo -S apt-get install -y foo bar
【问题讨论】:
这样存储我的密码安全吗?
echo 'Write sudo password (will not be displayed) and hit enter'
read -s password
我需要它来发出这样的命令:
echo $password | sudo -S apt-get install -y foo bar
【问题讨论】:
不,因为你可以通过/proc/$PID/cmdline看到它。
我建议不要尝试重新发明安全工具。 sudo 程序可以缓存您的密码。
【讨论】:
strace -o bash.strace -f bash -c 'echo password | cat' 并检查文件bash.strace。您将看到带有execve("/bin/cat", ["cat"], [/* 53 vars */]) = 0 的行,但在那里看不到echo(除了传递给bash 的第一行):它是内置的bash。因此,在 bash 中启动脚本就足以保证它的安全。
更好的方法是编辑您的 sudoers 文件并添加不需要密码的程序...
执行sudo visudo 并添加以下内容以使您的管理员组能够运行 apt-get w/o 密码:
%admin ALL = NOPASSWD: /usr/bin/apt-get
有关详细信息,请参阅 sudoers 手册页。
【讨论】:
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
改为。
编辑:Dirk 在执行echo 时密码在很短的时间内可见是正确的。请将我的回答视为扩展评论,而不是对您问题的回答。
【讨论】:
sudo -v -S。保留它的唯一原因是'read -s' 不会回显密码 - 但是sudo 也不会,不是吗?
sudo是open source,所以你可以编译你自己的版本,将密码作为命令行参数。
【讨论】: