4、我們編譯一下這個NFS的配置文件。
[root@NFS /]# vi /etc/exports
/share 192.168.60.0/24(rw,sync,all_squash,root_squash) ? ?(我們允許這個共享對192.168.60.0/24網段可讀可寫,且將所有訪問者包括root的身份都改為nfsnobody)
[root@NFS /]# /etc/init.d/nfs restart ? ? ? ? ? (重新啟動一下NFS服務)
Shutting down NFS mountd:????????????????????????????????? [? OK? ]
Shutting down NFS daemon:????????????????????????????????? [? OK? ]
Shutting down NFS quotas:????????????????????????????????? [? OK? ]
Shutting down NFS services:??????????????????????????????? [? OK? ]
Starting NFS services:???????????????????????????????????? [? OK? ]
Starting NFS quotas:?????????????????????????????????????? [? OK? ]
Starting NFS daemon:?????????????????????????????????????? [? OK? ]
Starting NFS mountd:?????????????????????????????????????? [? OK? ]
[root@NFS /]#?showmount -e 192.168.60.3 ? ? ? ? (查看一下掛載生效了)
Export list for 192.168.60.3:
/share 192.168.60.0/24
去客戶端操作我們連接NFS共享到客戶端本地。
[root@session ~]#?mkdir /test ? ? ? ? ? ? ? ? ?(新建一個目錄)
[root@session ~]# showmount -e 192.168.60.3 ? ?(查看一下NFS服務器端的共享目錄)
Export list for 192.168.60.3:
/share 192.168.60.0/24
[root@session ~]# mount -t nfs 192.168.60.3:/share /test ? (我們掛載共享到/test)
屏幕卡在這里不動了,檢查發現,因為NFS客戶端沒有啟動portmap服務會造成卡住的現象,我們用下面的方法來解決
[root@session ~]# /etc/init.d/portmap start ? ?(啟動RPC服務)
Starting portmap:??????????????????????????????????????? [? OK? ]
[root@session ~]# mount -t nfs 192.168.60.3:/share /test ? ?(再次掛載就成功了)
[root@session ~]# cd /test ? ? ? ? ? ? ? ? ? ? (進入/test這個NFS目錄)
[root@session test]# touch 1 ? ? ? ? ? ? ? ? ? (我們新建一個文件,發現居然沒有權限)
touch: cannot touch `1': Permission denied
【接下來,我們開始排錯】 我們回到服務器端操作,為了解決權限的問題,我們先放777的權限給NFS目錄測試。
[root@NFS /]# chmod 777 share ? ? ? ? ? ? (修改NFS共享目錄的權限為777)
[root@NFS /]# ll ? ? ? ? ? ? ? ? ? ? ? ? ?(確認修改成功了)
total 166
drwxr-xr-x? 2 root????? root?????? 4096 Mar 23 20:52 bin
drwxr-xr-x? 4 root????? root?????? 1024 Mar 23 18:18 boot
drwxr-xr-x 12 root????? root?????? 4220 May 27 19:42 dev
drwxr-xr-x 84 root????? root?????? 4096 May 27 20:33 etc
drwxr-xr-x? 3 root????? root?????? 4096 Mar 23 22:26 home
drwxr-xr-x 11 root????? root?????? 4096 Mar 23 20:52 lib
drwxr-xr-x? 7 root????? root????? 12288 Mar 23 20:52 lib64
drwx------? 2 root????? root????? 16384 Mar 23 18:14 lost+found
drwxr-xr-x? 2 root????? root?????? 4096 Jan 27? 2010 media
drwxr-xr-x? 2 root????? root?????? 4096 Mar 31? 2010 misc
drwxr-xr-x? 2 root????? root?????? 4096 Jan 27? 2010 mnt
drwxr-xr-x? 2 root????? root?????? 4096 Jan 27? 2010 opt
dr-xr-xr-x 77 root????? root????????? 0 May 27 19:41 proc
drwxr-x---? 2 root????? root?????? 4096 Mar 23 22:24 root
drwxr-xr-x? 2 root????? root????? 12288 Mar 23 20:52 sbin
drwxr-xr-x? 2 root????? root?????? 4096 Mar 23 18:14 selinux
drwxrwxrwx? 2 nfsnobody nfsnobody? 4096 May 27 20:16 share
drwxr-xr-x? 2 root????? root?????? 4096 Jan 27? 2010 srv
drwxr-xr-x 11 root????? root????????? 0 May 27 19:41 sys
drwxrwxrwt? 3 root????? root?????? 4096 May 27 19:42 tmp
drwxr-xr-x 15 root????? root?????? 4096 Mar 23 18:16 usr
drwxr-xr-x 20 root????? root?????? 4096 Mar 23 18:17 var
【接下來我們回到客戶端操作】此時在客戶端,我們發現已經可以正常寫入文件到NFS共享了。
[root@session test]# touch 1 ? ?(新建文件成功)
[root@session test]# ll ? ? ? ? (查看一下,我們發現文件所有者和所屬組均為65534 ?不是我們指定的nfsnobody用戶)
total 0
-rw-r--r-- 1???? 65534???? 65534 0 May 27 20:42 1
由此我們判斷,剛才沒有權限寫入,是因為客戶端不是nfsnobody的身份。由此我們找到了故障點。
【我們回到服務器端排錯,解決問題】
[root@NFS /]# cat /etc/passwd ? ? ? ? (查看一下用戶文件)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:4294967294:4294967294:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
zhangyang:x:500:500::/home/zhangyang:/bin/bash
我們看到nfsnobody的UID和GID是4294967294,并不是65534。我們通過修改NFS配置文件,指定匿名用戶的UID和GID
[root@NFS /]# vi /etc/exports ? ? ?(在配置文件里面增加指定UID和GID的部分)
/share 192.168.60.0/24(rw,sync,all_squash,root_squash,anonuid=4294967294,anongid=4294967294)
[root@NFS /]# /etc/init.d/nfs restart ? ? (重啟啟動一下NFS服務,使配置生效)
Shutting down NFS mountd:????????????????????????????????? [? OK? ]
Shutting down NFS daemon:????????????????????????????????? [? OK? ]
Shutting down NFS quotas:????????????????????????????????? [? OK? ]
Shutting down NFS services:??????????????????????????????? [? OK? ]
Starting NFS services:???????????????????????????????????? [? OK? ]
Starting NFS quotas:?????????????????????????????????????? [? OK? ]
Starting NFS daemon:?????????????????????????????????????? [? OK? ]
Starting NFS mountd:?????????????????????????????????????? [? OK? ]
[root@NFS /]# chmod 755 share ? ? ? ? ? ? (我們將共享文件的權限改回755)
[root@NFS /]# ll ? ? ? ? ? ? ? ? ? ? ? ? ?(確認修改成功)
total 166
drwxr-xr-x? 2 root????? root?????? 4096 Mar 23 20:52 bin
drwxr-xr-x? 4 root????? root?????? 1024 Mar 23 18:18 boot
drwxr-xr-x 12 root????? root?????? 4220 May 27 19:42 dev
drwxr-xr-x 84 root????? root?????? 4096 May 27 20:33 etc
drwxr-xr-x? 3 root????? root?????? 4096 Mar 23 22:26 home
drwxr-xr-x 11 root????? root?????? 4096 Mar 23 20:52 lib
drwxr-xr-x? 7 root????? root????? 12288 Mar 23 20:52 lib64
drwx------? 2 root????? root????? 16384 Mar 23 18:14 lost+found
drwxr-xr-x? 2 root????? root?????? 4096 Jan 27? 2010 media
drwxr-xr-x? 2 root????? root?????? 4096 Mar 31? 2010 misc
drwxr-xr-x? 2 root????? root?????? 4096 Jan 27? 2010 mnt
drwxr-xr-x? 2 root????? root?????? 4096 Jan 27? 2010 opt
dr-xr-xr-x 77 root????? root????????? 0 May 27 19:41 proc
drwxr-x---? 2 root????? root?????? 4096 Mar 23 22:24 root
drwxr-xr-x? 2 root????? root????? 12288 Mar 23 20:52 sbin
drwxr-xr-x? 2 root????? root?????? 4096 Mar 23 18:14 selinux
drwxr-xr-x? 2 nfsnobody nfsnobody? 4096 May 27 20:42 share
drwxr-xr-x? 2 root????? root?????? 4096 Jan 27? 2010 srv
drwxr-xr-x 11 root????? root????????? 0 May 27 19:41 sys
drwxrwxrwt? 3 root????? root?????? 4096 May 27 19:42 tmp
drwxr-xr-x 15 root????? root?????? 4096 Mar 23 18:16 usr
drwxr-xr-x 20 root????? root?????? 4096 Mar 23 18:17 var
【回到客戶端操作】確認配置正確,排錯完成。[root@session test]# touch 2 ? ?(新建一個文件2)
[root@session test]# touch 3?? ?(新建一個文件3)
[root@session test]# ll ? ? ? ? (查看一下。我們發現寫入和用戶都正常了)
total 0
-rw-r--r-- 1???? 65534???? 65534 0 May 27 20:42 1
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 27? 2012 2
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 27? 2012 3
【總結】
我們發現在CentOS 5.5 X64中 cat /etc/passwd之后,nfsnobody用戶的UID和GID均為4294967294。但是NFS服務,默認使用65534作為匿名用戶的UID和GID,由此造成權限問題。該問題在32位centos和最新版的64位Centos中不存在。如果您遇到了和我一樣的問題。可以通過修改配置文件,指定匿名用戶的UID和GID來解決。