Linux
如何用文件系統功能替換 setuid
受這個問題的啟發,這是後續行動:
你們中的一些人可能知道 setuid-binaries 是危險的,因為一些漏洞利用這些漏洞將其權限提升到 root。
現在似乎出現了一個有趣的想法,用不同的、更安全的方式替換 setuid。
如何?
Linux 中的文件系統功能被添加以允許比單獨的 setuid 允許的更細粒度的控制。使用 setuid 可以將有效權限完全提升到使用者(通常是 root)。能力(7)手冊頁提供以下描述:
為了執行權限檢查,傳統的 Unix 實現區分了兩類程序:特權程序(其有效使用者 ID 為 0,稱為超級使用者或 root)和非特權程序(其有效 UID 為非零)。特權程序繞過所有核心權限檢查,而無特權程序則根據程序的憑據(通常:有效 UID、有效 GID 和補充組列表)接受完整的權限檢查。
從核心 2.2 開始,Linux 將傳統上與超級使用者關聯的權限劃分為不同的單元,稱為功能,可以獨立啟用和禁用。功能是每個執行緒的屬性。
如果應用程序需要呼叫 chroot() 的能力,通常只允許 root 使用,
CAP_SYS_CHROOT
可以在二進製而不是 setuid 上設置。這可以使用 setcap 命令完成:setcap CAP_SYS_CHROOT /bin/mybin
從RPM 版本 4.7.0開始,可以使用
%caps
.Fedora 15 的發布目標是刪除此錯誤報告中跟踪的所有 setuid 二進製文件。根據錯誤報告,這個目標已經實現。
任何有興趣的人都可以閱讀有關基於能力的安全性的維基百科文章。