Linux

如何允許非超級使用者掛載任何文件系統?

  • January 15, 2020

是否可以允許某些特定使用者(例如組的成員)在 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 或類似的

各種桌面環境實際上已經為此建構了解決方案,以允許使用者安裝可移動媒體。它們通過安裝在/mediaonly 的子目錄中並通過核心選項關閉 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。

引用自:https://unix.stackexchange.com/questions/96625