Security

使用者驗證

  • August 4, 2015

假設我編寫了一個 setuid root 執行檔,並且我希望它通過要求使用者提供他/她的密碼來驗證使用者不是腳本(當然,使用者可以保存他們的密碼並在腳本中使用它,但這並沒有不關心我)。

什麼是這樣做的好方法?越便攜越好。

大多數現代 Unix 系統使用PAM來處理身份驗證。該pam_unix模組是對/etc/password和進行密碼驗證的模組/etc/shadow

但是,您不應該重新發明輪子。詢問使用者密碼並以 root 身份執行是sudo的基本配置,這是提升權限的事實上的標準方法。請注意,正確提升權限很棘手:您是否記得清除所有可能影響您的程序的環境變數?Sudo 煞費苦心地做到這一點。

要允許使用者在輸入密碼後使用她選擇的任何參數以 rootalice身份執行,請在文件(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_UIDSUDO_USER.

引用自:https://unix.stackexchange.com/questions/219898