我正在编写一个init脚本,它应该以不同于root的用户身份执行单个命令。这就是我现在正在做的事情:
sudo -u username command
这通常在Ubuntu / Debian上按预期工作,但在RHEL上,作为command
执行的脚本挂起。
还有另一种方法可以将命令作为另一个用户运行吗?
(请注意,我不能使用lsb init函数,因为它们在RHEL / Centos 5.x上不可用。)
答案 0 :(得分:22)
在RHEL系统上,/etc/rc.d/init.d/functions
脚本旨在提供与您想要的类似的内容。如果您在init脚本的顶部找到它,那么它的所有功能都可用。
为帮助解决此问题而提供的具体功能是daemon
。如果您打算使用它来启动类似守护程序的程序,一个简单的用法是:
daemon --user=username command
如果对于您需要的内容过于严厉,则会runuser
(有关完整信息,请参阅man runuser
;有些版本可能需要-u
才能使用用户名):
/sbin/runuser username -s /bin/bash -c "command(s) to run as user username"
答案 1 :(得分:12)
如果你有start-stop-daemon
start-stop-daemon --start --quiet -u username -g usergroup --exec command ...
答案 2 :(得分:12)
而不是 sudo ,请尝试
su - username command
根据我的经验, sudo 在RHEL系统上并不总是可用,但 su 是,因为 su 是coreutils包的一部分,而 sudo 在sudo包中。
答案 3 :(得分:12)
对于systemd样式的init脚本,它非常简单。您只需在[服务]部分添加用户=。
这是我在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
答案 4 :(得分:2)
我通常按照您的方式进行操作(即sudo -u username命令)。但是,还有'djb'方式来运行具有另一个用户权限的守护进程。请参阅:http://thedjbway.b0llix.net/daemontools/uidgid.html
答案 5 :(得分:0)
添加此答案是因为我必须查找多个位置才能实现用例。 我有一个在启动时运行的脚本。该脚本以特定的(无密码)用户身份运行进程,并在多种linux版本上运行。以下是不同口味的选项: (例如,我以Java为目标进程)
1。 RHEL / CentOS 6:
source /etc/rc.d/init.d/functions
daemon --user=myUser $JAVA_HOME/bin/java
2。使用systemd的RHEL 7 / SUSE12 /其他Linux版本: 在系统单位文件中添加:
User=myUser
3。 Suse 11:
/sbin/startproc -u myUser $JAVA_HOME/bin/java