NFS協議的故障處理和安全分析
在之前的文章中,我們介紹了NFS協議的有關內容。想必大家對于它的基礎概念,以及配置等有關內容已經有了了解了。這里我們主要講解一下有關于NFS協議的故障解決以及相關安全的問題。
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數目.
4、修改/etc/hosts.allow和/etc /hosts.deny達到限制CLIENT的目的
/etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 : allow
portmap: 140.116.44.125 : allow
/etc/hosts.deny
portmap: ALL : deny
5、改變默認的NFS協議的端口
NFS默認使用的是111端口,但同時你也可以使用port參數來改變這個端口,這樣就可以在一定程度上增強安全性.
6、使用Kerberos V5作為登陸驗證系統
修改/etc/hosts.allow和/etc/hosts.deny達到限制CLIENT的目的
/etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 : allow
portmap: 140.116.44.125 : allow
這個得多注意!!
/tmp *(rw,no_root_squash)
no_root_squash:登入到NFS主機的用戶如果是ROOT用戶,他就擁有ROOT的權限,此參數很不安全,建議不要使用.
有時需要執行umont卸載nfs盤陣時,會遇見device is busy的情況,字面意思理解為設備忙,有其他進程正在使用此設備.
此時需要用到命令fuser
其格式為: $ fuser -m -v (nfs掛載點) 回車執行后得到的結果依次是:用戶 進程號 權限 命令
此命令可以查看到訪問此設備的所有進程,停止進程后umount.
如果添加參數 -k則可以一次性將所有當前訪問nfs協議共享盤陣的進程停止 也可以加-i 打開交互顯示,以便用戶確認
或者用fuser命令:
#fuser -v -m 掛載點
即可查處 用戶 PID等,KILL掉該進程后再umount.
或者
#umount -l 掛載點
選項 –l 并不是馬上umount,而是在該目錄空閑后再umount.還可以先用命令 ps aux 來查看占用設備的程序PID,然后用命令kill來殺死占用設備的進程,這樣就umount的非常放心了.