Permissions

如何防止具有本地 sudo 權限的使用者在 NFS 文件伺服器上擁有 sudo 權限?

  • February 2, 2018

想像一下 LAN 中的這種情況:一個 Linux NFS 文件伺服器 (srv) 和三個 Linux 客戶端(A、B、C)。srv 上的文件/目錄具有 root 所有權,並且沒有授予非 root 使用者訪問權限。這些是這個問題所涉及的文件。我將它們稱為“受根目錄限制的文件”。

A是本地系統管理員。他或她將需要自由訪問 srv 上的受 root 限制的文件。

B是本地開發人員,在他或她的機器上擁有 sudo 權限。但是,B應該能夠讀取或寫入(或遍歷)伺服器上的根受限文件/目錄。事實上,即使 B 擁有 sudo 權限,B 也不應該能夠訪問不屬於 B 組的 srv 上的文件。

C是沒有 sudo 權限的本地使用者。C 應該可以訪問 srv 上的普通文件,但不能訪問本地或伺服器 root 限製文件。

鑑於:

srv 在 192.168.1.1

A 在 192.168.1.2

B 在 192.168.1.3

C 在 192.168.1.4

這 /etc/exports 會實現目標嗎?

/srv/nfs        192.168.1.2(rw,no_root_squash)
/srv/nfs        192.168.1.3(rw,root_squash)
/srv/nfs        192.168.1.4(rw,root_squash)

建議使用哪些其他 NFS 選項?但最重要的是,如果我們假設 IP 地址不能不被欺騙,root_squash 是否能夠實現此解決方案?

接下來,假設在他們的機器上擁有 sudo 權限的開發人員可以欺騙他們的 IP 地址並且看起來像 192.168.1.2,它沒有 no_root_squah,需要什麼解決方案?LDAP + Kerberos?還有什麼?

我們的目標完全可以通過 NFS 實現嗎?像 SSHFS 或 Samba 4 這樣的東西是更好的解決方案嗎?

(如果“root-restricted files”不是最好的術語,歡迎編輯建議。)

NFS 只使用客戶端提供的 UID/GID。使用squash_root選項 inexports共享將 root 使用者映射到匿名使用者 ( nobody/nogroup)。這並不能阻止惡意/受損客戶端提供其他一些 UID/GID,這可能允許訪問其他文件。

如果您想保護您的 NFS 伺服器免受欺騙使用者的侵害,您需要使用 Kerberos 來驗證您的 NFS 使用者。帶有 Kerberos 的 NFS 還提供可選的數據完整性和加密。要快速了解所涉及的內容,請參閱Ubuntu wiki中的快速操作指南。

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