如何允許非超級使用者掛載任何文件系統?
是否可以允許某些特定使用者(例如組的成員)在 Linux 上掛載任何沒有超級使用者權限的文件系統?
另一個問題可能是“使用者可以通過哪些方式通過掛載文件系統來損害系統?”
有幾種方法,其中一些最安全,另一些則根本不安全。
不安全的方式
讓任何使用執行
mount
,例如,通過 sudo。你不妨給他們紮根;這是同一件事。使用者可以掛載一個帶有 suid root 副本的文件系統bash
——running 立即提供 root (可能沒有任何日誌記錄,除了執行的事實之外mount
)。或者,使用者可以將他自己的文件系統安裝在 之上,包含他/她自己的or
/etc
副本,然後使用or獲取 root 。或者可能在這兩個文件之一上綁定安裝()。或將新文件放入./etc/shadow``/etc/sudoers``su``sudo``mount --bind``/etc/sudoers.d
類似的攻擊可能會在
/etc/pam.d
許多其他地方被取消。請記住,文件系統甚至不需要在設備上,
-o loop
將掛載使用者擁有(因此可修改)的文件。最安全的方式:udisks 或類似的
各種桌面環境實際上已經為此建構了解決方案,以允許使用者安裝可移動媒體。它們通過安裝在
/media
only 的子目錄中並通過核心選項關閉 set-user/group-id 支持來工作。這裡的選項包括udisks
,udisks2
,pmount
,usbmount
,如果必須,您可以編寫自己的腳本來執行類似的操作,並通過 sudo 呼叫它——但您必須非常小心地編寫此腳本,以免留下 root 漏洞。如果您不希望您的使用者必須記住 sudo,您可以在腳本中執行以下操作:
#!/bin/bash if [ $UID -ne 0 ]; then # or `id -u` exec sudo -- "$0" "$@" fi # rest of script goes here
有朝一日會變得安全的方式:使用者命名空間
Linux 命名空間是一種非常輕量級的虛擬化形式(容器,更具體而言)。特別是,使用使用者命名空間,系統上的任何使用者都可以創建自己的環境,在其中他們是根使用者。這將允許他們掛載文件系統,除了一些虛擬文件系統已被明確阻止。最終,FUSE 文件系統可能會被允許,但我能找到的最新更新檔不包括塊設備,只包括 sshfs 之類的東西。
此外,許多發行版核心(出於安全原因)預設不允許非特權使用者使用使用者命名空間;例如, Debian有一個
kernel.unprivileged_userns_clone
預設為 0 的值。其他發行版也有類似的設置,但名稱通常略有不同。我所知道的關於使用者命名空間的最佳文件是 LWN 文章*Namespaces in operation, part 5: User namespaces。*
現在,我會選擇 udisks2。