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