我正在使用终端运行 shell 脚本 userA
。在此 shell 脚本的中间,我userB
使用 切换到用户su
,但这要求我输入 的密码,userB
并且我必须通过终端手动输入密码。请问有没有办法可以让我自动输入密码,而不需要我站在机器旁边手动输入密码?由于这个脚本中有一个循环,我不想一直盯着终端输入userB
它要求我输入的密码。或者是否有一种方法可以将密码放入 shell 脚本中,这样终端就不会等待我手动输入密码?有人可以建议如何做到这一点吗?
答案1
sudo
还允许NOPASSWD
/etc/sudoers 配置中的特定条目(如果您可以访问该条目)。喜欢:
userA ALL = (userB) NOPASSWD: ALL
这将使用户 A 无需密码即可完全访问用户 B。可能只有在可以信任 userA 在离开屏幕时锁定屏幕的情况下才应该使用......
或者,您可以授予 userA 仅访问某些脚本的权限。例如:
userA ALL = (userB) NOPASSWD: /home/userB/scripts-for-userA/
这允许用户 A 以用户 B 的身份运行目录 /home/userB/scripts-for-userA/ 中的任何命令。不过,它的安全性仍然取决于这些命令。
答案2
sudo
将要缓存密码。但你需要问问自己这样做是否正确。更改权限是否会更好,以便您和 userB 可以访问相同的文件?
答案3
您可以将应该以 UserB 身份发生的事情移动到对 UserB 来说是 suid 的单独脚本中。如果您不想要该一揽子特权,这将避免需要从用户 A 向用户 B 开放 su 。