強制 Linux 權限 Stickybits 或 ACL
我對在 Linux(即 CentOS 6)上強制繼承權限有疑問/困惑
設置:
1 個 CentOS 文件伺服器
2 個 CentOS NFS 客戶端
很多 x Windows Samba 客戶端
文件共享為 /srv/share 與 Samba 和 NFS 共享本地權限如下:h
drwxrwx---. 2 root sharegroup 4.0K Oct 22 14:41 share
所有通過 Active Directory 統一的 UID/GID,所有使用者的主要組是“sharegroup”。
安裝在 fstab 中的 NFS 客戶端為:
tst-lnx03:/srv/share /mnt/share nfs defaults 0 0
通過 UNC 路徑的 Windows 框:
\\tst-lnx03\share
我想要什麼:
在 /srv/share 文件夾中寫入/創建的任何內容,無論它是通過 NFS 還是通過 Samba 來的,例如 770 根共享組。
我試過的:
我嘗試過使用 ACL:
setfacl -m d:u:root:rwx,d:g:"sharegroup":rwx,d:other:--- share
結果:
ls -lah -rwxrwx---+ 1 testuser11 sharegroup 0 Oct 22 14:25 tu12-smb-win -rw-rw----+ 1 testuser2 sharegroup 0 Oct 22 14:23 tu2-local-local -rw-r-----+ 1 testuser4 sharegroup 0 Oct 22 14:24 tu4-NFS-lnx04
我嘗試過使用粘性位:
chmod 2770 share
結果:
ls -lah -rwxr--r-- 1 testuser11 k8 sharegroup 0 Oct 22 14:38 tu12-smb-win -rw-r--r-- 1 testuser2 k8 sharegroup 0 Oct 22 14:38 tu2-local-local -rw-r--r-- 1 testuser4 k8 sharegroup 0 Oct 22 14:38 tu4-NFS-lnx04
困惑
看起來 setfacl 是贏家,但對輸出有點困惑,為什麼粘性位版本會隨機添加其他讀取並剝離註銷組?
我想我可以將 NFS 創建的文件歸因於預設 umask 0022 而不是其他更改。我本來希望創建的視窗和本地創建的文件也匹配權限。
誰能解釋每種情況下發生了什麼?我有點困惑。如果您需要我的更多資訊,請大聲喊叫,我會提出來的。
所以你做了
setfacl -m d:u:root:rwx,d:g:"sharegroup":rwx,d:other:--- share
您所做的任何事情
setfacl d:
(稱為“預設 ACL”)都不會影響所有權,只會影響可訪問性。所以你可以決定“誰可以訪問”,而不是“誰擁有”。您剛剛使測試文件擁有所有者使用者和 root 使用者的 rwx 訪問權限;擁有組和“sharegroup”的 rwx 訪問權限。但是擁有使用者和擁有組的確定方式與沒有 setfacl 的方式完全相同。文件的權限是意外的,因為使用 setfacl’d 文件,umask 不再考慮在內。每個文件都有其“自己的 umask”,簡稱為 mask(請參閱 參考資料
getfacl
)。而你做到了
chmod 2770 share
又錯了。2770不粘,這是setgid位。Sticky 應該是 1770。 setgid 更改了新文件的所屬組,並且根本不影響它們的權限。與往常一樣,權限考慮到 umask(請參閱 參考資料
umask
)和應用程序創建文件建議的模式。我不知道如何使用您擁有的工具正確實現您需要的東西。Linux 中沒有實現“目錄的 setuid”。