我正在编写一个init脚本,它应该以不同于root的用户身份执行单个命令。 这是我目前的做法:
sudo -u username command
这通常在Ubuntu / Debian上按预期工作,但是在RHEL上,作为command
执行的脚本挂起。
有另一种方式来作为另一个用户运行命令?
(请注意,我不能使用lsb init函数,因为它们在RHEL / Centos 5.x上不可用)
在RHEL系统上,/ /etc/rc.d/init.d/functions
脚本旨在提供类似于所需的内容。 如果您在初始化脚本的顶部输入它,则所有的函数都可用。
提供帮助的特定功能是daemon
。 如果你打算使用它来启动一个守护进程程序,一个简单的用法是:
daemon --user=username command
如果这对于你所需要的来说过于霸道,那么就有runuser
(参见man runuser
的完整信息;有些版本可能需要-u
在用户名之前):
/sbin/runuser username -s /bin/bash -c "command(s) to run as user username"
而不是sudo ,试试
su - username command
根据我的经验, sudo并不总是在RHEL系统上可用,但su是,因为su是coreutils软件包的一部分,而sudo是sudo软件包中的一部分。
如果你有启动 – 停止守护进程
start-stop-daemon --start --quiet -u username -g usergroup --exec command ...
对于系统风格的初始化脚本,这非常简单。 您只需在[服务]部分添加一个用户=。
这里是我在CentOS 7上用于qbittorrent-nox的初始化脚本:
[Unit] Description=qbittorrent torrent server [Service] User=<username> ExecStart=/usr/bin/qbittorrent-nox Restart=on-abort [Install] WantedBy=multi-user.target
我通常是这样做的(即sudo -u用户名命令)。 但是,也有'djb'的方式来运行守护进程与另一个用户的权限。 请参阅: http : //thedjbway.b0llix.net/daemontools/uidgid.html