NFS協(xié)議的故障處理和安全分析
在之前的文章中,我們介紹了NFS協(xié)議的有關(guān)內(nèi)容。想必大家對于它的基礎(chǔ)概念,以及配置等有關(guān)內(nèi)容已經(jīng)有了了解了。這里我們主要講解一下有關(guān)于NFS協(xié)議的故障解決以及相關(guān)安全的問題。
NFS協(xié)議故障解決
1、NFSD沒有啟動起來
首先要確認(rèn) NFS 輸出列表存在,否則 nfsd 不會啟動.可用 exportfs 命令來檢查,如果 exportfs 命令沒有結(jié)果返回或返回不正確,則需要檢查 /etc/exports 文件.
2、 mountd 進(jìn)程沒有啟動
mountd 進(jìn)程是一個遠(yuǎn)程過程調(diào)用 (RPC) ,其作用是對客戶端要求安裝(mount)文件系統(tǒng)的申請作出響應(yīng).mountd進(jìn)程通過查找 /etc/xtab文件來獲知哪些文件系統(tǒng)可以被遠(yuǎn)程客戶端使用.另外,通過mountd進(jìn)程,用戶可以知道目前有哪些文件系統(tǒng)已被遠(yuǎn)程文件系統(tǒng)裝配,并得知遠(yuǎn)程客戶端的列表.查看mountd是否正常啟動起來可以使用命令rpcinfo進(jìn)行查看,在正常情況下在輸出的列表中應(yīng)該象這樣的行:
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文件系統(tǒng),重新編譯一下 KERNEL就可以解決.
4、 can't contact portmapper: RPC: Remote system error - Connection refused
出現(xiàn)這個錯誤信息是由于SEVER端的PORTMAP沒有啟動.
5、 mount clntudp_create: RPC: Program not registered
NFS協(xié)議沒有啟動起來,可以用 showmout -e host命令來檢查NFS SERVER是否正常啟動起來.
6、mount: localhost:/home /test failed, reason given by server: Permission denied
這個提示是當(dāng) client要mount nfs server時可能出現(xiàn)的提示,意思是說本機(jī)沒有權(quán)限去mount nfs server上的目錄.解決方法當(dāng)然是去修改NFS SERVER咯.
7、被防火墻阻擋
這個原因很多人都忽視了,在有嚴(yán)格要求的網(wǎng)絡(luò)環(huán)境中,我們一般會關(guān)閉linux上的所有端口,當(dāng)需要使用哪個端口的時候才會去打開.而NFS默認(rèn)是使用111端口,所以我們先要檢測是否打開了這個端口,另外也要檢查 TCP_Wrappers的設(shè)定.
NFS安全
NFS的不安全性主要體現(xiàn)于以下4個方面:
1、新手對NFS的訪問控制機(jī)制難于做到得心應(yīng)手,控制目標(biāo)的精確性難以實(shí)現(xiàn)
2、NFS沒有真正的用戶驗(yàn)證機(jī)制,而只有對RPC/Mount請求的過程驗(yàn)證機(jī)制
3、較早的NFS可以使未授權(quán)用戶獲得有效的文件句柄
4、在RPC遠(yuǎn)程調(diào)用中,一個SUID的程序就具有超級用戶權(quán)限.
加強(qiáng)NFS協(xié)議安全的方法:
1、合理的設(shè)定/etc/exports**享出去的目錄,最好能使用 anonuid,anongid以使MOUNT到NFS SERVER的CLIENT僅僅有最小的權(quán)限,最好不要使用root_squash.
2、使用IPTABLE防火墻限制能夠連接到NFS SERVER的機(jī)器范圍
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攻擊,需要合理設(shè)定NFSD 的COPY數(shù)目.
4、修改/etc/hosts.allow和/etc /hosts.deny達(dá)到限制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、改變默認(rèn)的NFS協(xié)議的端口
NFS默認(rèn)使用的是111端口,但同時你也可以使用port參數(shù)來改變這個端口,這樣就可以在一定程度上增強(qiáng)安全性.
6、使用Kerberos V5作為登陸驗(yàn)證系統(tǒng)
修改/etc/hosts.allow和/etc/hosts.deny達(dá)到限制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主機(jī)的用戶如果是ROOT用戶,他就擁有ROOT的權(quán)限,此參數(shù)很不安全,建議不要使用.
有時需要執(zhí)行umont卸載nfs盤陣時,會遇見device is busy的情況,字面意思理解為設(shè)備忙,有其他進(jìn)程正在使用此設(shè)備.
此時需要用到命令fuser
其格式為: $ fuser -m -v (nfs掛載點(diǎn)) 回車執(zhí)行后得到的結(jié)果依次是:用戶 進(jìn)程號 權(quán)限 命令
此命令可以查看到訪問此設(shè)備的所有進(jìn)程,停止進(jìn)程后umount.
如果添加參數(shù) -k則可以一次性將所有當(dāng)前訪問nfs協(xié)議共享盤陣的進(jìn)程停止 也可以加-i 打開交互顯示,以便用戶確認(rèn)
或者用fuser命令:
#fuser -v -m 掛載點(diǎn)
即可查處 用戶 PID等,KILL掉該進(jìn)程后再umount.
或者
#umount -l 掛載點(diǎn)
選項(xiàng) –l 并不是馬上umount,而是在該目錄空閑后再umount.還可以先用命令 ps aux 來查看占用設(shè)備的程序PID,然后用命令kill來殺死占用設(shè)備的進(jìn)程,這樣就umount的非常放心了.