AIX 上的 NFSv4 權限
我正在嘗試在兩個不共享 UID/GID 的系統上使用 NFSv4 掛載。這是針對舊環境使用任何可用的 UID/GID 的系統遷移,它們現在在新環境上發生衝突。我已經在新環境中為所有使用者提供了新的非衝突 ID。
我的問題是 NFS 掛載。我正在嘗試使用 NFSv4,因為它將 ID 作為字元串而不是數字(這應該有助於映射)傳遞。我可以在舊環境上安裝一個文件系統,當我執行 時
ls -l
,我在兩邊都看到了正確的名稱(因此映射正在工作)。當我嘗試以使用者身份(兩個系統上都存在具有不同 UID 的使用者)觸摸文件時,我的權限被拒絕。使用者是兩個系統上適當組的成員(該組在兩個環境中具有不同的 GID,但使用者是雙方的適當成員)。
還有其他選項可以解決我的問題(使用 NFSv3 和重新映射 UID/GID),但如果可以避免的話,我不想這樣做。
這是我的配置和一些測試,向您展示我所看到的……
伺服器配置:
# chnfsdom Current local domain: red.act.ed # cat /etc/exports /usr/sap/trans -vers=4,sec=sys,rw,root=172.29.4.56:172.29.4.55:172.29.4.65 # ls -ld /usr/sap/trans/data drwxrwxr-x 2 d01adm sapsys 118784 Apr 23 08:25 /usr/sap/trans/data # ls -nld /usr/sap/trans/data drwxrwxr-x 2 300 300 118784 Apr 23 08:25 /usr/sap/trans/data
客戶端配置:
# chnfsdom Current local domain: red.act.ed # mount | grep trans devbox /usr/sap/trans /usr/sap/trans nfs4 Apr 23 09:01 vers=4 qabox:/ # ls -ld /usr/sap/trans/data drwxrwxr-x 2 d01adm sapsys 118784 Apr 23 09:25 /usr/sap/trans/data qabox:/ # ls -nld /usr/sap/trans/data drwxrwxr-x 2 8 14 118784 Apr 23 09:25 /usr/sap/trans/data
根據該資訊,UID/GID 翻譯似乎工作正常。這是摩擦(在客戶端盒子上)……
qabox:q01adm> pwd /usr/sap/trans qabox:q01adm> ls -ld . drwxrwxr-x 14 d01adm sapsys 4096 Apr 23 09:56 . qabox:q01adm> id uid=12(q01adm) gid=14(sapsys) groups=0(system),7(security),4294967294(nobody),15(oper),16(dba) qabox:q01adm> touch file touch: 0652-046 Cannot create file.
這是我可以在同一個客戶端上使用 root 執行的操作:
qabox:/usr/sap/trans # pwd /usr/sap/trans qabox:/usr/sap/trans # id uid=0(root) gid=0(system) groups=2(bin),3(sys),7(security),8(cron),10(audit),11(lp),14(sapsys) qabox:/usr/sap/trans # touch file qabox:/usr/sap/trans # chown q01adm:sapsys file qabox:/usr/sap/trans # ls -l file -rw-r--r-- 1 q01adm sapsys 0 Apr 23 09:59 file qabox:/usr/sap/trans # ls -nl file -rw-r--r-- 1 12 14 0 Apr 23 09:59 file
在伺服器盒子上,我看到了這個:
# ls -l /usr/sap/trans/file -rw-r--r-- 1 q01adm sapsys 0 Apr 23 08:59 /usr/sap/trans/file # ls -nl /usr/sap/trans/file -rw-r--r-- 1 302 300 0 Apr 23 08:59 /usr/sap/trans/file
所以,從我所看到的一切……UID/GID 轉換工作正常,我只是不能在客戶端以非 root 使用者身份寫入文件。
根據我有限的知識,NFSv4 ID 映射僅適用於通過 NFS 本身發送的 stat() 結果和其他資訊——即,由or
chown
返回的文件所有者等。ls``stat
但是,身份驗證由較低級別(SunRPC)處理,它仍然在預設的 AUTH_UNIX 協議中使用您的數字 UID。因此,如果您是本地使用者 #12,那麼伺服器也將收到該使用者。
為避免這種情況,您需要一種支持使用者名的身份驗證機制;Kerberos (AUTH_GSS) 可能是這裡唯一的選擇。