我将脚本的所有者设置为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)中创建目录而不引用完整的命令:
mkdir
标志的值,并尝试使用-c
作为用户名。如果我们引用它,它就可以工作:# su -c mkdir /home/oli/java oli
No passwd entry for user '/home/oli/java'
评论
使用-c选项,su是否会调用shell并在shell中执行命令?还是执行命令而没有其他shell?
– jinbeom hong
20年6月6日上午10:57
这是一个子外壳。尝试睡眠,看看pstree,group等
–奥利
20年6月6日在17:19
它不会加载用户的环境变量
–caot
20年8月30日在14:27
#2 楼
注意:“我已将脚本的所有者设置为root”,它什么也不做;即使您设置了setuid位,它仍然不起作用假设您实际上以root用户身份运行脚本,但是,可以使用
sudo
。 su
主要用于切换用户,而sudo
用于与其他用户一样执行命令。 -u
标志可让您指定执行以下命令的用户:sudo -u hudson command
评论
我多次(在对sudoers进行了良好管理的系统上)遇到尝试使用sudo的情况,您可以得到以下提示:root不在sudoers文件中。这使su-
–RAM237
18/09/3在12:26
执行非平凡命令时不需要引号。 (例如,sudo -u kilgore mv that that)
–toraritte
19年5月23日在21:10
评论
对于其他Google员工:某些用户可能故意禁用了此功能。您可以运行sudo cat / etc / passwd | grep用户abc。如果您看到类似这样的内容:user-abc:x:994:994 :: / home / user-abc:/ bin / false,那么它将无法正常工作。这是因为最后一部分“ / bin / false”表示该用户没有外壳。