su 选项 - 以另一个用户身份运行命令

su 选项 - 以另一个用户身份运行命令

我想知道如何从脚本中以另一个用户身份运行命令。

我将脚本的所有者设置为 root。我还在脚本中运行以下命令,以 hudson 用户身份运行该命令:

su -c command hudson

这是正确的语法吗?

答案1

是的。这是--help

$ su --help
Usage: su [options] [LOGIN]

Options:
  -c, --command COMMAND         pass COMMAND to the invoked shell
  -h, --help                    display this help message and exit
  -, -l, --login                make the shell a login shell
  -m, -p,
  --preserve-environment        do not reset environment variables, and
                                keep the same shell
  -s, --shell SHELL             use SHELL instead of the default in passwd

和一些测试(我使用了sudo,因为我不知道帐户的密码nobody

$ sudo su -c whoami nobody
[sudo] password for oli: 
nobody

当您的命令接受参数时,您需要引用它。如果不这样做,就会发生奇怪的事情。在这里,我以 root 身份尝试在 /home/oli 中创建一个目录(作为 oli)没有引用完整命令:

# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'

它仅被读取mkdir为标志的值-c,并尝试用/home/oli/java作用户名。如果我们引用它,它就会起作用:

# su -c "mkdir /home/oli/java" oli
# stat /home/oli/java
  File: ‘/home/oli/java’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 811h/2065d  Inode: 5817025     Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/     oli)   Gid: ( 1000/     oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
 Birth: -

答案2

注意:“我将脚本的所有者设置为 root”不会执行任何操作;即使你设置了 setuid 位还是不行


但是,假设您实际上以 root 身份运行脚本,则可以使用sudo.su主要用于切换用户,而sudo用于以其他用户的身份执行命令。该-u标志允许您指定执行命令的用户:

sudo -u hudson command

相关内容