Security
使用者驗證
假設我編寫了一個 setuid root 執行檔,並且我希望它通過要求使用者提供他/她的密碼來驗證使用者不是腳本(當然,使用者可以保存他們的密碼並在腳本中使用它,但這並沒有不關心我)。
什麼是這樣做的好方法?越便攜越好。
大多數現代 Unix 系統使用PAM來處理身份驗證。該
pam_unix
模組是對/etc/password
和進行密碼驗證的模組/etc/shadow
。但是,您不應該重新發明輪子。詢問使用者密碼並以 root 身份執行是sudo的基本配置,這是提升權限的事實上的標準方法。請注意,正確提升權限很棘手:您是否記得清除所有可能影響您的程序的環境變數?Sudo 煞費苦心地做到這一點。
要允許使用者在輸入密碼後使用她選擇的任何參數以 root
alice
身份執行,請在文件(sudo 配置文件)中使用以下行:/usr/local/bin/myprogram``sudoers
alice ALL = (root) /usr/local/bin/myprogram
要編輯
sudoers
文件,請執行命令visudo
。愛麗絲將不得不跑
sudo myprogram
。如果您希望她能夠只輸入程序名稱,請將其隱藏在包裝腳本中。但請注意,Alice 可能更喜歡執行類似gksudo myprogram
獲得 GUI 提示的東西。許多變化是可能的,包括禁止呼叫者傳遞參數:
alice ALL = (root) /usr/local/bin/myprogram ""
或將條目應用於組:
%mygroup ALL = (root) /usr/local/bin/myprogram
如果您的程序需要知道是誰呼叫了它,sudo 可以在環境變數
SUDO_UID
和SUDO_USER
.