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

Sła*_*osz 11 bash sudo

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

echo 'Write sudo password (will not be displayed) and hit enter'
read -s password
Run Code Online (Sandbox Code Playgroud)

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

echo $password | sudo -S apt-get install -y foo bar
Run Code Online (Sandbox Code Playgroud)

Dir*_*tel 12

不,因为你可以看到它/proc/$PID/cmdline.

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

  • 可能有一个非常短的窗口,而echo命令的/ proc条目存在,但"短"是操作术语,在我看来(以毫秒或更短). (2认同)
  • 执行 `strace -o bash.strace -f bash -c 'echo 密码 | cat'` 并检查文件 `bash.strace`。您将看到带有`execve("/bin/cat", ["cat"], [/* 53 vars */]) = 0`的行,但您不会在那里看到回显(除了在第一行中,其中它被传递给 bash):它是 bash 内置函数。因此,在 bash 中启动脚本足以保证其安全。 (2认同)

fse*_*eto 11

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

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

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


Hei*_*nzi 5

echo $password | sudo -S apt-get install -y foo bar 
Run Code Online (Sandbox Code Playgroud)

这有点危险.如果用户已经对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
Run Code Online (Sandbox Code Playgroud)

代替.

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