it-swarm.cn

su options-以其他用户身份运行命令

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

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

su -c command hudson

这是正确的语法吗?

86
garbagecollector

是。这是--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: -
89
Oli

注意:“我已将脚本的所有者设置为root”,它什么都不做;即使您设置了setuid位 仍然不起作用


但是,假设您实际上以root用户身份运行脚本,则可以使用Sudosu主要用于切换用户,而Sudo用于与其他用户一样执行命令。 -u标志可让您指定执行该命令的用户:

Sudo -u hudson command
58
Michael Mrozek