-1

我可以访问组机器(linux-boxes)并且我已经在它们上创建了用户。

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

但是其余的命令必须由不能 sudo 的用户运行。

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

更新expect 脚本中的 sudo 问题expect 脚本展示了一个很好的例子。

4

2 回答 2

1

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

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 身份连接,sudo以 root 身份运行一些命令,以其他用户身份运行所有其他命令。

于 2013-06-21T11:16:06.277 回答
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...

无需担心逃离这里。

于 2013-06-21T11:22:01.087 回答