我正在寫一個init腳本,它應該以不同於root的用戶身份執行單個命令。這是我正在做它目前:
sudo -u username command
如何在初始化腳本中以特定用戶身份運行命令?
一般情況下會在Ubuntu/Debian的預期,但在RHEL把作爲command
掛起執行的腳本。
是否有另一種方式作爲另一個用戶運行命令?
(注意,我不能使用lsb初始化函數,因爲它們在RHEL/CentOS 5.x上不可用)
我正在寫一個init腳本,它應該以不同於root的用戶身份執行單個命令。這是我正在做它目前:
sudo -u username command
如何在初始化腳本中以特定用戶身份運行命令?
一般情況下會在Ubuntu/Debian的預期,但在RHEL把作爲command
掛起執行的腳本。
是否有另一種方式作爲另一個用戶運行命令?
(注意,我不能使用lsb初始化函數,因爲它們在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 -u username命令)。但是,也有'djb'方式來運行具有其他用戶特權的守護進程。請參閱:http://thedjbway.b0llix.net/daemontools/uidgid.html
如果你有啓動 - 停止守護
start-stop-daemon --start --quiet -u username -g usergroup --exec command ...
它在RHEL 5中不可用。 – ddario
@ddario'start-stop-守護進程「是一個Debian主義。 –
你可以使用daemon作爲@lagweezle在他/她的[answer](http://stackoverflow.com/a/31616592/120794)中指出的。順便說一下,它應該是被接受的答案。 –
而不是須藤,嘗試
su - username command
以我的經驗,須藤並不總是可用的RHEL系統上,但是su是,因爲su是coreutils包的一部分,而sudo位於sudo包中。
對於systemd樣式的init腳本來說非常簡單。您只需在[服務]部分添加一個用戶=。
下面是一個初始化腳本我用qbittorrent硝在CentOS 7:
[Unit]
Description=qbittorrent torrent server
[Service]
User=<username>
ExecStart=/usr/bin/qbittorrent-nox
Restart=on-abort
[Install]
WantedBy=multi-user.target
注意,這個問題是關於一些由管理員設置了專門(通常,運行一些用戶的安全守護進程)。一個稍微不同的情況是用戶使用他們的用戶crontab設置自己的命令以便在引導時運行。請參閱http://askubuntu.com/questions/260845/run-a-command-as-user-at-boot-time-ubuntu-12-04 –