使用 sudo 时切换到其他用户而不是 root

使用 sudo 时切换到其他用户而不是 root

我想重定向root在使用时(切换)一个执行到其他用户sudo

示例:sudo startup.sh将执行startup.shas root,但需要的是它以另一个用户的身份执行,例如tomcat

只是对于这个特定的执行,我只希望他们按照他们正在使用的方式执行,即,sudo startup.sh但在后台(在引擎盖下)我希望将其更改为,sudo su - tomcat startup.sh因为我不能告诉用户不要使用sudo -su or sudo -u

我怎样才能实现这个目标?

答案1

您无法轻松地执行您要求的操作(即sudo startup.sh以指定的非 root 用户身份运行)。不过,您可以执行以下一项或两项操作

  1. 告诉用户使用sudo -u tomcat /path/to/startup.sh而不是sudo /path/to/startup.sh,并且无论如何都不允许后者

    将此行添加到您的sudoers(记住visudo)中,这样tomcat这里就是目标用户帐户。ALL如果只允许某些人作为目标用户运行脚本,请将第一个更改为用户列表

     ALL    ALL=(tomcat) /path/to/startup.sh
    
  2. 让脚本执行sudo, 并禁止sudo -u root该脚本。你需要#1(上面)。确保here与intomcat匹配。tomcatsudoers

     #!/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

相关内容