以非 root 使用者身份執行 ircd-hybrid 伺服器
我已經在我的新 CentOS 7 機器上安裝了 ircd-hybrid,我可以通過我的普通使用者正常執行它,但我想以減少權限(即,在 /etc/ircd 之外沒有寫訪問權限)作為自己的使用者執行它。經過數小時的反複試驗和Google,我找到了這些方法:
su - <user> -c <command>
這失敗了,因為我想以沒有 shell 或密碼的使用者身份執行,例如“nobody”,這要求輸入密碼(因此總是失敗)。
daemon --user=<user> <command>
這失敗了,因為“守護程序”是 中的一個函式
/etc/init.d/functions
,而不是一個命令,所以在通過 sudo 執行時找不到它(這是執行腳本所必需的)或啟動腳本。runuser -u <user> <command> sudo -u <user> <command>
這些很接近,據我所知,工作方式相同。如果我在沒有選項的情況下執行,它可以工作:
sudo -u nobody '/etc/ircd/ircd'
但是因為它沒有配置文件,所以 ircd 會立即退出,或者至少我認為這就是發生的情況。
ps -aux | grep irc
僅返回 grep 程序,即使以我的普通使用者身份執行也是如此。sudo -u nobody '/etc/ircd/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log'
但是,如果使用 1 個或兩個參數,則返回:
sudo: /etc/ircd/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log: command not found
如果我執行相同的命令減號
sudo -u nobody
,它會完全按預期工作。我錯過了什麼?為什麼在該死的地獄中以另一個使用者身份啟動守護程序如此困難?
更新:感謝 Arthur2e5 的評論,這可以作為直接命令將守護程序啟動為“nobody”(省略引號):
sudo -u nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log
但是,我最初的目標是將其作為啟動腳本執行,而 sudo 不是其中的選項(
Jun 13 07:03:00 coldcandor.com sudo[5335]: sudo: sorry, you must have a tty to run sudo
)。在這種情況下,runuser 似乎是唯一的方法,但如果我以同樣的方式嘗試,我會得到:$ runuser -u nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log runuser: invalid option -- 'o' Usage: runuser [options] -u <USER> COMMAND runuser [options] [-] [USER [arg]...]
嘗試替代語法沒有幫助(當從 root 帳戶執行時,因為 runuser 需要 root 才能執行):
$ runuser - nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log runuser: invalid option -- 'o' $ runuser - nobody '/etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log' This account is currently not available.
最後一點魔法是什麼?
更多地使用替代語法,以及對手冊頁的另一次深入研究,我選擇了 -s 選項。哈利路亞!它作為啟動服務執行!
/sbin/runuser -s /bin/sh - nobody -c '/etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log'
唯一讓我擔心的事情是:如果我現在強迫沒有人使用 shell 執行,它是否會降低安全性?它似乎不會,並且手冊頁中沒有警告。
作為說明,我意識到這不允許寫入日誌文件,所以我創建了一個名為 irc 的新使用者:組,它擁有 /var/log/ircd 目錄,將主目錄設置為 /etc/ircd,並設置了 shell到 /sbin/nologin。