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


我需要做的就是以特定用户身份运行特定脚本,该用户确实在/ etc / passwd中指明了nologin / false shell。

我会以root身份运行脚本,这应该以另一个用户身份运行。 运行:

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

会工作,但我需要一个有效的shell用于testuser。 我知道我可以用它来禁用密码 passwd -d testuser 并将shell保留到/ bin / bash这样会保证一点点,但我需要有nologin / false shell。

基本上我需要的是当我们将作业设置为以特定用户身份运行时crontab所做的事情,无论这个有nologin / false shell。

p.s我找到了这个帖子 作为nologin用户执行命令 但我不知道如何“连接”命令 su -s /bin/sh $user 到我需要运行的脚本

谢谢


78
2018-01-18 13:56






答案:


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

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

(前置 sudo 以上如果 testuser 是无密码用户。)


109
2018-01-18 18:49



如果是的话怎么办? root:root -rwsr-x--- ? - Patryk
如果用户没有密码怎么办? - CMCDragonkai
@Wesley发现你需要root才能为无密码用户运行该命令。 - CMCDragonkai
@lain,如果用户不应该有shell,那么与命令相关的进程不应该是bash进程的子进程。因此,您还应该使用exec将脚本替换为shell。如果你想让脚本成为init的子代,你只需使用&,作为一个例子 su -s /bin/bash -c 'exec /path/to/your/script &' test - Facundo Victor
因为我花了最后20分钟研究如何使用相同的结果 runuser,我想指出一点 su -s SHELL 参数渲染runuser命令几乎没用:)谢谢Jan! - jirka


你可以这样做 sudo -u 如果你安装了它:

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

7
2018-01-18 14:03



你如何传递参数 sudo -u apache whoami? - CMCDragonkai
@CMCDragonkai命令之后的任何参数都将被传递。你可以把它想象成“sudo [-u apache] [whoami <param1> <param2>]”。 - Handyman5
我觉得用 sudo -u 作为nologin用户运行命令可能不是一个好主意,因为它暴露了 SUDO_USER 在环境中谁是真正的人调用命令。也许我只是在思考它。 - Meow


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

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

4
2018-01-18 14:01





刚刚意识到:

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

也许有更好的方法?!


2
2018-02-16 07:18





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

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

这个工具用于处理开发人员在他的bolg中所说的情况

每当服务以root身份运行并希望使用shell更改UID时,它应该使用runuser。

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

我在很多宫殿里发布了这个答案,如果你觉得这很烦人,请原谅我


0
2017-12-07 19:19



请不要发布仅限链接的答案以防止链接腐烂。相反,请将链接中最相关的信息添加到您的答案中,或者将链接发布为评论而不是答案。看到这个 serverfault.com/help/how-to-answer 帮助中心文章了解更多信息。 - Federico Galli
@FedericoGalli已经添加了最相关的信息,没有必要复制和粘贴用法,手册页提供了足够的信息 - Z-Y00


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

sudo -i -u user command

-1



这给了 This account is currently not available. - knocte