
我想設計一個 sudo 規則,允許用戶ricardo
使用 sudo 更新系統aptitude
,但阻止他使用 sudo 運行任何其他命令(他是一個有問題的用戶)。我遺漏了這條規則中的任何陷阱嗎?
ricardo ALL=(root) /usr/bin/aptitude
里卡多只使用aptitude
,不使用apt-get
。另外,我目前沒有在任何地方安裝 Ubuntu,所以我知道這/usr/bin/aptitude
可能不是允許的正確檔案。
如果這個規則有缺陷,我該如何改進?
答案1
該命令將限制用戶aptitude
除了更新儲存庫快取和執行系統安全性升級之外進行任何操作。
ricardo ALL=(root) /usr/bin/aptitude update, /usr/bin/aptitude safe-upgrade
類似的命令將允許用戶執行完整升級,但僅此而已:
ricardo ALL=(root) /usr/bin/aptitude update, /usr/bin/aptitude full-upgrade
每aptitude 的文檔 (10.04), safe-upgrade
:
將已安裝的軟體套件升級至最新版本。除非未使用,否則不會刪除已安裝的軟體包
相比之下,full-upgrade
:
將已安裝的軟體包升級到最新版本,根據需要刪除或安裝軟體包。該命令不如 safe-upgrade 保守,因此更有可能執行不必要的操作。但是,它能夠升級安全升級無法升級的軟體包。
請根據您的最佳判斷來判斷應允許使用者運行的內容。如果您不確定,請使用第一條規則,該規則僅允許safe-upgrade
.
請注意,如果您想允許用戶安裝軟體包(這大大降低了對安全性的任何好處,但只是假設),您需要在命令*
後包含一個aptitude
,即
ricardo ALL=(root) /usr/bin/aptitude update, /usr/bin/aptitude safe-upgrade, /usr/bin/aptitude install *
否則,您將收到一條錯誤訊息,指出ricardo
不允許使用者執行該命令/usr/bin/aptitude install <package_name>
。
答案2
您可以使用它sudo -l
來查看允許使用者運行哪些命令。例如,要查看 ricardo 可以運行哪些命令:
sudo -ll -U ricardo
看看他是否可以運行 aptitude,
sudo -ll -U ricardo /usr/bin/aptitude
這將列印由 sudo 擴展的命令名稱,或者如果不允許使用者使用該命令,則以代碼 1 退出。
這應該適用於任何最新的基於 Debian 的系統供您測試;該語法不是 Ubuntu 特定的。
來源:曼須藤
答案3
我其實什麼也看不到錯誤的與 sudoers 行。不幸的是,我並沒有sudo
過多地修改 的配置設置,所以在這種情況下,我的建議可能不可靠。幸運的是,我所能要做的就是給你一條我知道是安全的線:
ricardo ALL=/usr/bin/aptitude
aptitude
只要 ricardo 不是啟用 sudo 的群組(例如sudo
或 )admin
的成員,此行就保證只讓 ricardo 以 root 身分執行。