以没有nologin shell的用户身份运行脚本


87

我所需要做的就是以具有nologin/false指示的shell 的特定用户身份运行特定脚本/etc/passwd

我将以root用户身份运行脚本,并且应该以其他用户身份运行。运行:

~# su -c "/bin/touch /tmp/test" testuser

可以,但是我需要测试用户的有效外壳。我知道我可以使用禁用密码passwd -d testuser并保留外壳,/bin/bash这样可以确保一点安全,但是我需要nologin/false外壳。

基本上,我需要的是crontab将作业设置为以特定用户身份运行时的操作,无论该用户是否具有nologin/false外壳。

ps我发现了该线程以nologin用户身份执行命令,但是我不知道concatenate该命令如何执行su -s /bin/sh $user我需要运行的脚本。

Answers:


119

您可以使用-s开关来运行特定的shell

su -s /bin/bash -c '/path/to/your/script' testuser

sudo如果testuser是无密码用户,请使用上述命令。)


su是root:root -rwsr-x---什么?
Patryk 2015年

1
如果用户没有密码怎么办?
CMCDragonkai 2015年

3
@Wesley发现您需要root用户才能为无密码用户运行该命令。
CMCDragonkai 2015年

1
@lain,如果认为用户没有外壳,则与命令相关的进程不应是bash进程的子进程。因此,您还应该使用exec用脚本替换外壳。而且,如果您希望使脚本成为init的子代,则只需使用&作为示例su -s /bin/bash -c 'exec /path/to/your/script &' test
Facundo Victor

1
由于我花了最后20分钟的时间来研究如何使用来达到相同的结果runuser,所以我想指出,该su -s SHELL参数使runuser命令变得毫无用处:)谢谢Jan!
jirka '16

12

sudo -u如果已安装,则可以执行以下操作:

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

如何将参数传递给sudo -u apache whoami
CMCDragonkai 2015年

@CMCDragonkai命令后的任何参数都将被传递。您可以将其视为“ sudo [-u apache] [whoami <param1> <param2>]”。
Handyman5'5

我认为使用sudo -u以nologin用户身份运行命令可能不是一个好主意,因为它公开SUDO_USER了真正由谁来调用命令的环境。也许我只是想得太多。
喵喵

5

通过提供脚本作为要执行到/ bin / sh的参数:

su -s "/bin/sh /your/script/location" username

2

刚刚意识到:

su -s“ / bin / bash” -c“ / bin / touch / tmp / testuser” testuser

也许有更好的方法?


0

实际上,最好的方法是通过runuser

有关详细信息,请参见手册页

正如开发人员在推销中所说的那样,该工具用于处理情况

每当服务以root用户身份运行并且想要使用shell更改UID时,都应使用runuser。

http://danwalsh.livejournal.com/55588.html

我已经在许多宫殿里发布了这个答案,如果您觉得这个烦人,请原谅我


请不要发布仅链接的答案,以防止链接腐烂。而是将链接中最相关的信息添加到您的答案中,或者将链接发布为评论而不是答案。有关更多信息,请参阅此serverfault.com/help/how-to-answer帮助中心文章。
Federico Galli

@FedericoGalli已经添加了最相关的信息,无需复制和粘贴用法,手册页提供了足够的信息
Z-Y00

-1

使用sudo -u指定用户。也可以使用-i标志来设置目标用户的环境变量。

sudo -i -u user command

1
这给This account is currently not available.
knocte

-3

将su命令与shell -s和-c命令一起使用。如下所示

 su  exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash

2
这正是最高评分答案的解决方案。
杰拉尔德·施耐德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.