我有一个以 身份运行的 bash 脚本user
,该用户帐户没有评估权限。该机器有第二个admin
具有 sudo 权限的帐户。没有设置 root 密码。
该脚本知道 的账户密码admin
。如何将脚本升级到root
?
sudo -S
只处理使用你的升级情况当前的帐户的密码,例如admin
,root
但user
没有特权,因此这不起作用。
su admin
可以工作但是没有提供从 STDIN 获取密码的方法。
换句话说,我如何以编程方式实现以下目标?
$ su admin
Password: ******
$ sudo command
Password: ******
答案1
由于su
只从 TTY 读取,因此您必须为其指定一个。如果 GNU screen 可用,请尝试以下操作:
screen -d -m -S foo su -c 'sudo my_command' admin
screen -S foo -X stuff 'admin_password
'
第 1 行设置一个运行指定su
命令的会话,该命令将提示输入admin
用户的密码。第 2 行和第 3 行将密码(以及尾随的换行符以模拟按 Enter 键,注意引号)“塞入”命名会话中;等待su
将从 pty 接收该密码,并假设该密码正确,则执行指定的命令 ( sudo my_command
)。
(我确信 tmux 可以做类似的事情,但我不使用它,所以只能指向手册页。或者,您可以利用这个机会学习 pty 编程并编写自己的程序来执行密码到 su 的传递:))
答案2
虽然这不是您真正想要的,但一种解决方法是向用户授予有限的 sudo 权限。
添加仅具有以用户身份运行和运行命令的user
权限。例如:/etc/sudoers
sudo
admin
sudo
user ALL = (admin) /bin/sudo
然后,运行类似的命令sudo -u admin sudo commands
。