2005-03-13
NFS(NETWORK FILE SYSTEM)RPC SERVICE 使LINUX機器能共享資料
后臺進程:
nfsd lockd rpciod rpc.mounted,rpc.rquotad,rpc.stad
腳本:
/etc/init.d/nfs /etc/init.d/nfslock
端口:
111
需要包:
nfs-utils(第一張盤)
portmap (必須)(第一張)
配置文件:
/etc/exports(默認無,需要自己建立)
1。
使用方法:
mount -t nfs IP(域名):/目錄 本地目錄
2。使用注意:
用service nfs start開啟服務
用service portmap start確保服務開啟
校對:
如果您確定 /etc/exports 檔設定無誤,要重新讀取其設定,只需輸入如下命令就可以了:
exportfs -rv
假如有錯誤的話,應該會得到提示的。
為求確定,您最好執行:
showmount -e localhost
范例:
/tmp *(rw,no_root_squash)
/usr/src *.siyongc.domain(ro,insecure) 192.168.100.*(ro,insecure)
/var/ftp/pub/incoming 192.168.100.24(rw,all_squash,anonuid=50,anongid=50)
第一行,我將 /tmp 這個目錄完全分享出去了,不管客戶端來自哪里。在括號里面的‘rw’就是 Read&Write 的意思,而‘no_root_squash’呢,則是允許讓使用者具備 root 的權限,在某些特殊情況下,例如使用 bootp 登錄的無磁碟工作站,是相當好用的。因為預設情況下 NFS 會將 root 的身份 squash 為權限最低的 anonymous (nobody) 身份,而其它身份則以 client 端機器上當時擁有的 User ID 和 Group ID (指號碼的值)來建立檔案。注意哦,在進權限判斷的時候, 不是以 UserName 來作為身份依據哦,UID 和 GID 的號碼最後必須對應到 server 端的 /etc/passwd ,而非 client 那邊的。
第二行,我將 /usr/src 這個目錄分享給以 siyongc.domain 這個 domain 做結尾或是以 192.168.100 開頭的所有機器,而無需使用 secure port (insecure),但只具備唯讀權限(ro)。這里,您要留意 " * " 的使用,在一些舊版本的 NFS 您不能用在 IP 上。不過,我這里的測試卻是可行的。
第三行,我將 /var/ftp/pub/incoming 這個目錄只分享給 192.168.0.22 這臺機器,且具備了讀和寫的權限(rw),但在 server 上寫入的檔案,必須換成 anonymous 身份進行。但是其後的設定又將所有 anonymous 換成設定的 UID 和 GID (這里都是 ftp),這樣的安排是要確定所有存取都按指定身份進行。這個 incoming 目錄預設是不存在的,日後在討論到 FTP 服務設定時候會提到,但您可以自行用 mkdir 建立,而且為 group 和 others 加上 +w 權限以及 sgid 和 sticky bit (3777)。
注意:
1。
mount -t nfs -o bg,soft,intr rh71:/tmp /mnt/nfs
不過,如果沒有那些 -o 參數,然後在卸載之前您將 server 的 nfs 關閉了,或是網路連線出了問題,這時候再進行 umount 的話,很可能將您的機器‘定格’在那里!小心小心~~~ 所以,最好在 mount 的時候加上 soft 參數,并且在關閉 nfs 伺服器端之前,一定要先將所有的 client 所掛載的 mount point 進行 umount 才好進行。
2。
預設情況下 NFS 會將 root 的身份 squash 為權限最低的 anonymous (nobody) 身份,而其它身份則以 client 端機器上當時擁有的 User ID 和 Group ID (指號碼的值)來建立檔案。注意哦,在進權限判斷的時候, 不是以 UserName 來作為身份依據哦,UID 和 GID 的號碼最後必須對應到 server 端的 /etc/passwd ,而非 client 那邊的。
出錯檢查:
mount: xxxxx:/yyyyyyyy, reason given by server: Permission denied
造成這樣的原因多數是 /etc/exports 檔案沒設定好的緣故
mount: RPC: Unable to receive; errno = Connection refused
可能出現的問題很多,首先確定 portmap 服務是否有跑起來,可以用 rpcinfo 來檢查
補充:2005-04-21實驗
參數正常情況下:啟動nfs提示
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
[FAILED]
說明portmap沒有啟動起來
手動啟動 portmap服務
補充2:
2005-04-24實驗
***關于 在NFS下對域名做限制的問題的解釋。
具體配置如下:
IP:192.168.100.103 是DNS服務器 也是NFS服務器
其中exports文件寫法:
/home *.cyy.net(ro,sync,no_root_squash)
用exportfs -rv顯示如下
exporting *.cyy.net:/home
ping abc.cyy.net如下:
ping abc.cyy.net
PING abc.cyy.net (192.168.100.102) 56(84) bytes of data.
64 bytes from 192.168.100.102: icmp_seq=1 ttl=64 time=0.050 ms
IP:192.168.100.102 是客戶機 即abc.cyy.net
做mount -t nfs 192.168.100.103:/home /nfs
報錯: mount -t nfs 192.168.100.103:/home /nfs
mount: 192.168.100.103:/home failed, reason given by server: Permission denied
*******
問題的關鍵 是沒有給abc.cyy.net做反向解析,測試是否做了反向解析用
host 192.168.100.102
問題2,做限制的第二種方法:
直接修改hosts.allow hosts.deny
操作如下:
修改/etc/hosts.allow和/etc/hosts.deny達到限制CLIENT的目的
/etc/hosts.allow
portmap: .cyy.net : allow
/etc/hosts.deny
portmap: ALL : deny
2005-04-23
NFS故障解決
1、NFSD沒有啟動起來
首先要確認 NFS 輸出列表存在,否則 nfsd 不會啟動??捎?exportfs 命令來檢查,如果 exportfs 命令沒有結果返回或返回不正確,則需要檢查 /etc/exports 文件。
2、mountd 進程沒有啟動
mountd 進程是一個遠程過程調用 (RPC) ,其作用是對客戶端要求安裝(mount)文件系統的申請作出響應。mountd進程通過查找 /etc/xtab文件來獲知哪些文件系統可以被遠程客戶端使用。另外,通過mountd進程,用戶可以知道目前有哪些文件系統已被遠程文件系統裝配,并得知遠程客戶端的列表。查看mountd是否正常啟動起來可以使用命令rpcinfo進行查看,在正常情況下在輸出的列表中應該象這樣的行:
100005 1 udp 1039 mountd
100005 1 tcp 1113 mountd
100005 2 udp 1039 mountd
100005 2 tcp 1113 mountd
100005 3 udp 1039 mountd
100005 3 tcp 1113 mountd
如果沒有起來的話可以檢查是否安裝了PORTMAP組件。
rpm -qa|grep portmap
3、fs type nfs no supported by kernel
kernel不支持nfs文件系統,重新編譯一下KERNEL就可以解決。
4、can't contact portmapper: RPC: Remote system error - Connection refused
出現這個錯誤信息是由于SEVER端的PORTMAP沒有啟動。
5、mount clntudp_create: RPC: Program not registered
NFS沒有啟動起來,可以用showmout -e host命令來檢查NFS SERVER是否正常啟動起來。
6、mount: localhost:/home/test failed, reason given by server: Permission denied
這個提示是當client要mount nfs server時可能出現的提示,意思是說本機沒有權限去mount nfs server上的目錄。解決方法當然是去修改NFS SERVER咯。
7、被防火墻阻擋
這個原因很多人都忽視了,在有嚴格要求的網絡環境中,我們一般會關閉linux上的所有端口,當需要使用哪個端口的時候才會去打開。而NFS默認是使用111端口,所以我們先要檢測是否打開了這個端口,另外也要檢查TCP_Wrappers的設定。
六、NFS安全
NFS的不安全性主要體現于以下4個方面:
1、新手對NFS的訪問控制機制難于做到得心應手,控制目標的精確性難以實現
2、NFS沒有真正的用戶驗證機制,而只有對RPC/Mount請求的過程驗證機制
3、較早的NFS可以使未授權用戶獲得有效的文件句柄
4、在RPC遠程調用中,一個SUID的程序就具有超級用戶權限.
加強NFS安全的方法:
1、合理的設定/etc/exports中共享出去的目錄,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT僅僅有最小的權限,最好不要使用root_squash。
2、使用IPTABLE防火墻限制能夠連接到NFS SERVER的機器范圍
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
3、為了防止可能的Dos攻擊,需要合理設定NFSD 的COPY數目。