如何安全地清理子樹的權限
在我們的伺服器上,允許部署新版本的應用程序的多個(目前是兩個,預計是三個或四個)使用者。此過程包括從受信任的源 git 儲存庫下載一些文件並啟動應用程序(非特權程序)。
這一切都使用一個腳本完成,需要幾秒鐘。除非另一個使用者在那裡留下了具有錯誤權限或組的文件或目錄。
然後部署失敗,我們執行
sudo chgrp -R sudo /our/root/directory sudo chmod -R g=u,o-rwx /our/root/directory &&
我想允許我們在不需要輸入密碼的情況下執行此操作。
我知道這
setuid
不適用於 shell 腳本(有充分的理由)。我想過使用 setuid perl 腳本,但它不再受支持。我可以編寫一個 C 包裝器和一個腳本,但是擁有兩個文件聽起來既不方便也不安全。我可以使用系統呼叫在 C 中編寫全部內容,但這需要我很長時間。所以我問:*實現這一目標的簡單而安全的方法是什麼?*編寫一些簡短的 C 程式碼是可以的。
它是 Ubuntu 16.04,以防萬一。
(*) 我們正在使用組
sudo
和權限rwxrwx---
或rw-rw----
整個樹。
編寫一個 shell 腳本並授予適用的使用者使用 sudo 呼叫它的權限。
NOPASSWD
如果您不希望使用者輸入密碼,請使用該指令(請注意順序很重要,請參閱如何在沒有密碼提示的情況下以 root 身份執行特定程序?)。確保 sudo 設置為從環境中刪除所有變數,除了一些安全變數(例如
LC_*
和LANG
)。Defaults
無論如何,在 Ubuntu 上預設情況下就是這種情況,因此在 Ubuntu 上,除非您更改了env_reset
設置,否則您不需要該行。Defaults!/usr/local/bin/fix-our-permissions env_reset %our-app-maintainers ALL = NOPASSWD: /usr/local/bin/fix-our-permissions
或者,讓人們通過具有固定所有權和權限的文件系統(例如bindfs )訪問部署區域。請參閱寫入文件夾時自動更改文件權限和目錄中創建的所有文件都應歸 bob 所有
但實際上,沒有人應該手動部署。部署應手動觸發,但應由在系統使用者帳戶中執行的自動化服務執行,從 CI 獲取版本,下載並重新啟動守護程序。