Nfs
NFSv4 使用者映射問題
我想從 NFSv3 切換到 NFSv4 並且遇到 NFSv4 使用者映射問題,因為在某些系統上,眾所周知的 uid 已分配給普通使用者。
有關設置的說明,請參見下文。
問題是如何強制掛載的目錄屬於真實的 uid
33
而不是 uid1000
。貯存
/mnt/web_dir
屬於使用者www-data (uid 33)
。網路伺服器
storage:/mnt/web_dir
安裝到/var/www
- 使用者
www-data
有uid33
管理伺服器
storage:/mnt/web_dir
安裝到/mnt/web_dir
- 使用者
www-data
有uid1000
- 使用者
admin
有uid33
現在的問題是管理伺服器上的 uid 和使用者名被混淆了,而不是顯示真正的 uid。例如,這給 rsync 帶來了問題。
NFS 儲存上的本地目錄
root@stor /mnt/web_dir $ ls -la total 8 drwxr-xr-x 2 root root 4096 Jul 3 14:01 . drwxr-xr-x 4 root root 4096 Jul 3 14:01 .. -rw-r--r-- 1 www-data www-data 0 Jul 3 14:01 index.html root@stor /mnt/web_dir $ id -u www-data 33
管理伺服器上的 NFS 掛載目錄
root@admin /mnt/webdir $ ls -lah insgesamt 8,0K drwxr-xr-x 2 root root 4,0K Jul 3 13:43 . drwxr-xr-x 6 root root 4,0K Jul 3 13:43 .. -rw-r--r-- 1 www-data www-data 0 Jul 3 13:43 testfile root@admin /mnt/web_dir $ id -u www-data 1000 root@admin /mnt/web_dir $ ls -ln insgesamt 0 -rw-r--r-- 1 1000 1000 0 Jul 3 13:43 testfile
配置如下:
root@admin / $ cat /proc/mounts storage:/mnt/web_dir /var/www nfs4 rw,relatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.x.x.x,minorversion=0,local_lock=none,addr=10.x.x.x 0 0
和
root@stor / $ exportfs -v /mnt/web_dir 10.x.x.x(rw,async,wdelay,no_root_squash,no_subtree_check)
和
root@admin /mnt/web_dir $ cat /etc/idmapd.conf [General] Verbosity = 0 Pipefs-Directory = /var/lib/nfs/rpc_pipefs # set your own domain here, if id differs from FQDN minus hostname # Domain = localdomain [Mapping] Nobody-User = nobody Nobody-Group = nogroup
和
root@admin /mnt/web_dir $ dpkg -l | grep nfs ii libnfsidmap2:amd64 0.25-4 amd64 NFS idmapping library ii nfs-common 1:1.2.6-4 amd64 NFS support files common to client and server root@stor / $ dpkg -l | grep nfs ii libnfsidmap2:amd64 0.25-4 amd64 NFS idmapping library ii nfs-common 1:1.2.6-4 amd64 NFS support files common to client and server ii nfs-kernel-server 1:1.2.6-4 amd64 support for NFS kernel server
顯然版本很重要,因為我已經使用 Debian Jessie 測試了設置,並且真正的 uid 正在傳遞給 nfs4 客戶端。但是,有問題的伺服器有 Debian 7 並且是最新的。
我很感激任何幫助。謝謝!
這裡的問題是NFS啟動的最高版本是NFS 4.0
root@stor / $ cat /proc/fs/nfsd/versions +2 +3 +4 -4.1
因此,客戶端連接時 NFS 4.0(或
minorversion=0
)是預設版本。解決方案實際上是使用選項掛載目錄
minorversion=1
root@admin / $ cat /proc/mounts storage:/mnt/web_dir /var/www nfs4 rw,relatime,vers=4,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.x.x.x,minorversion=1,local_lock=none,addr=10.x.x.x 0 0