
sudo -u user1 command ...
如何讓sudo
詢問密碼user1
而不是目前使用者的密碼?
背景:我想在使用者執行的 Git Hook 中使用它git
,例如
echo "PasswordOfWww" | sudo -Su www bash -c "cd site; git pull; ./deploy.sh"
我嘗試過使用su www -c "command ..."
但它告訴我
remote: su: must be run from a terminal
當我推送到存儲庫時。
答案1
如果可以避免的話,您確實不想在檔案系統中儲存任何未加密的使用者密碼。這在一定程度上取決於您對 git 中程式碼的可移植性的依賴程度與對本機檔案系統上可以儲存的內容的依賴程度。我建議將 sudo 與 NOPASSWD 一起使用,並儘可能限制命令。您可以建立一個 /etc/sudoers 條目,如下所示:
git ALL=(www) NOPASSWD: /usr/local/sbin/deploySite
其中deploySite
有各種檢查,以確保用戶進入正確的目錄,並且deploy.sh
腳本中沒有任何粗略的內容。
如果您信任使用者 git 負責任地使用使用者 www 的帳戶,則可以使用 NOPASSWD:ALL。但你基本上允許任何有權上傳到 git 存取權限的人以使用者 www 的身份執行他們想要的任何命令。
但要回答原來的問題
您可以讓 sudo 詢問目標使用者的密碼而不是呼叫使用者的密碼。您可以放置一個 sudoers 條目,例如:
Defaults:git targetpw
那麼使用者 git 在執行時就必須輸入使用者 www 的密碼sudo -u www ...
。