我想重定向root
在使用时(切换)一个执行到其他用户sudo
。
示例:sudo startup.sh
将执行startup.sh
as root
,但需要的是它以另一个用户的身份执行,例如tomcat
。
只是对于这个特定的执行,我只希望他们按照他们正在使用的方式执行,即,sudo startup.sh
但在后台(在引擎盖下)我希望将其更改为,sudo su - tomcat startup.sh
因为我不能告诉用户不要使用sudo -su or sudo -u
。
我怎样才能实现这个目标?
答案1
您无法轻松地执行您要求的操作(即sudo startup.sh
以指定的非 root 用户身份运行)。不过,您可以执行以下一项或两项操作
告诉用户使用
sudo -u tomcat /path/to/startup.sh
而不是sudo /path/to/startup.sh
,并且无论如何都不允许后者将此行添加到您的
sudoers
(记住visudo
)中,这样tomcat
这里就是目标用户帐户。ALL
如果只允许某些人作为目标用户运行脚本,请将第一个更改为用户列表ALL ALL=(tomcat) /path/to/startup.sh
让脚本执行
sudo
, 并禁止sudo -u root
该脚本。你需要#1(上面)。确保here与intomcat
匹配。tomcat
sudoers
#!/bin/bash # targetUser=tomcat if [[ $UID -ne "$(id -u "$targetUser")" ]] then exec sudo -u "$targetUser" "$0" "$@" exit 1 fi # ...script continues but as the $targetUser...
这允许人们运行
/path/to/startup.sh
(或者即使startup.sh
它在 中$PATH
)而不用担心该sudo
部分。
答案2
您可以sudo
与-u
开关一起使用。
例子:
sudo -u tomcat whoami