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

mad*_*ddy 2 users sudo privileges uid

我想重定向(开关)一个执行对其他用户,而不是root同时使用sudo

示例:sudo startup.sh将执行startup.shas root,但需要将其作为另一个用户执行,例如tomcat

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

我怎样才能做到这一点?

roa*_*ima 5

您不能轻松地按照您的要求执行操作(即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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使脚本执行sudo,并禁止sudo -u root脚本。你需要#1(上面)。确保tomcat此处与tomcatin匹配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...
    
    Run Code Online (Sandbox Code Playgroud)

    这允许人们运行/path/to/startup.sh(甚至只是startup.sh如果它在 中$PATH)而不必担心sudo零件。