NFS 卷文件權限
我有一個 Redhat 6.0 系統(啟用 SELinux),NFS 卷安裝在 /myvolume。
該命令
ls -la /myvolume
說它有所有者“nobody”和組“nobody”。在這個系統上,我讓 Apache 作為“apache”使用者和“apache”組執行。
Apache 通過 mod_wsgi 執行 python 腳本。此腳本創建一個臨時目錄(使用 tempfile.mkdtemp),在其中創建一些文件,然後將整個目錄移動到 /myvolume 中。
腳本完成後,它創建的文件擁有所有者“nodody”和組“nobody”,並且所有文件的權限遮罩都是“rwx——”。
我已經驗證我自己的使用者無法訪問這些文件,除非我使用“sudo”,而 apache 使用者可以訪問它們。
為什麼會發生這種情況?是否與 SELinux、Unix 權限、NFS 卷或 nodoby 使用者有關?為什麼試圖“chown”/myvolume 中的任何文件都會出現“invalid argument”錯誤?
它與nfs有關。
http://tldp.org/HOWTO/NFS-HOWTO/server.html聲明如下:
“no_root_squash:預設情況下,客戶端機器上使用者root發出的任何文件請求都被視為伺服器上使用者nobody發出的。(具體請求映射到哪個UID取決於使用者“nobody”的UID伺服器,而不是客戶端。)如果選擇 no_root_squash,則客戶端電腦上的 root 將具有與伺服器上的 root 相同的系統上文件的訪問級別。這可能會產生嚴重的安全隱患,儘管它可能是必要的如果您想在涉及導出目錄的客戶端電腦上執行任何管理工作。您不應在沒有充分理由的情況下指定此選項。
不建議在 nfs 伺服器上啟動 no_root_squash。我僅出於文件目的引用此選項。
一種解決方案是在 nfs 客戶端和 nfs 伺服器上創建具有相同 uid 和 gid 的使用者和組。然後配置 apache 以使用該使用者執行您的腳本。