在运行shell脚本时使用sudo在用户之间切换

时间:2013-06-21 10:51:07

标签: linux shell

我可以访问群组机器(linux-boxes),并且我已经创建了用户。

我需要运行一些需要sudo的命令。

但其他命令必须从无法sudo的用户运行。

如何在sudo和不能用户之间来回切换?

更新Problems with sudo inside expect script期望脚本显示了一个很好的例子。

2 个答案:

答案 0 :(得分:1)

如果您是sudo的特权用户(通常是debian系统上的sudo组成员),您可以像使用其他任何用户一样运行命令:

sudo -u nobody ls

来自sudo的联机帮助页:

   -u user     The -u (user) option causes sudo to run the specified command as a user other than root.  To specify a uid instead of a user name, use #uid.
               When running commands as a uid, many shells require that the '#' be escaped with a backslash ('\').  Security policies may restrict uids to
               those listed in the password database.  The sudoers policy allows uids that are not in the password database as long as the targetpw option is
               not set.  Other security policies may not support this.

通常情况下,您可能希望创建一个连接为您喜欢的sudoer的脚本,以root用户身份运行一些sudo命令,并以其他用户身份运行所有其他命令。

答案 1 :(得分:0)

sudo启动另一个进程,shell本身无法设置其UID。所以:

#!/bin/sh

echo Normal user
id
sudo sh -c '
    echo Root user
    id
    echo More commands as root user...
'
echo Back to normal user
id

尽管在内壳中逃逸时要小心。

对于一些命令,您显然可以在每个命令前加sudo

sudo echo Root user
sudo id
sudo echo More commands as root user...

无需担心逃离。