作为 root 用户,我可以作为另一个用户在 BASH 中执行命令而不需要密码吗?

As a root user can I execute commands in BASH as another user without requiring a password?

我在 RHeL 服务器上有一个 root 用户帐户。在该服务器上,我有一个名为 user.sh 的简单脚本,它只是 return 当前用户:

#!/bin/bash
echo $USER

当 运行 从我的根帐户输出时

bash user.sh
>>>root

从另一个脚本我希望能够在不输入密码的情况下临时在用户之间切换,storing the password in the script or a file, or modifying /etc/sudoers 并执行 user.sh 然后 return 回到我的初始 root 帐户。这完全可能吗?

这是我到目前为止尝试过的方法:

  1. Using delimeters to execute a block of code

    #!/bin/bash
    
    bash /user.sh
    
    su other_user <<EOF
    echo Current user: $USER
    EOF
    

    输出:

    root
    Current user: root
    
  2. 切换到 bash 中的用户,执行命令然后注销

    #!/bin/bash
    
    bash /user.sh
    
    su other_user
    bash /user.sh
    exit
    

    输出:脚本暂停执行,return将我发送到以 other_user 登录的终端,但我仍将位于包含 user.sh[=33 的根帐户目录中=]

    root
    [other_user@my_server]$
    

    如果我然后键入 exit 我将 return 登录到我的根帐户并且脚本完成执行

  3. using the su - <username> -c /path/to/the/shellscript.sh to execute a script as a different account and then return

    #!/bin/bash
    
    bash /user.sh
    
    su - other_user -c /path/user.sh
    

    输出:

    root
    -bash: /path/user.sh: Permission denied
    
  4. 使用 sudo -i -u other_user 以用户身份登录并执行脚本,该脚本会产生与尝试 #2 相同的问题,但我被重定向到 other_user 的主目录.

可能值得注意的是,如果我使用方法 2,当我以 other_user 身份登录时,我能够 运行 bash user.sh 并产生所需的输出:other_user

在第二个示例中,$USER 变量在执行 su 之前展开。这可以通过引用 EOF 来避免。

su other_user <<'EOF'
echo Current user: $USER
EOF

或者您可以在根 shell 中执行脚本,也可以使用此处的文档:

su other_user <<END
bash user.sh
END

或者您可以使用 -c 选项 su:

su other_user -c 'bash user.sh'