1,服務(wù)器端軟件:安裝nfs-utils和portmap(rpcbind)
nfs-utils: 提供rpc.nfsd 及 rpc.mountd這兩個(gè)NFS DAEMONS的套件
portmap: NFS其實(shí)可以被看作是一個(gè)RPC SERVER PROGRAM,而要啟動(dòng)一個(gè)RPC SERVER PROGRAM,都要做好PORT的對(duì)應(yīng)工作,而且這樣的任務(wù)就是由PORTMAP來(lái)完成的。通俗的說(shuō)PortMap就是用來(lái)做PORT的mapping的。
NFS需要啟動(dòng)的DAEMONS:參考
NFS daemons- pc.nfsd:主要復(fù)雜登陸權(quán)限檢測(cè)等 必須
- portmap:處理RPC程序客戶端和服務(wù)器端的端口對(duì)應(yīng) 必須
- rpc.mountd:負(fù)責(zé)NFS的檔案系統(tǒng),當(dāng)CLIENT端通過(guò)rpc.nfsd登陸SERVER后,對(duì)clinet存取server的文件進(jìn)行一系列的管理 必須
- lockd:處理通過(guò)RPC包的鎖定請(qǐng)求
- statd:為nfs鎖定服務(wù)提供crash恢復(fù)功能
- rquotad:處理當(dāng)用戶通過(guò)nfsmount到遠(yuǎn)程服務(wù)器時(shí)的配額
- 守護(hù)進(jìn)程啟動(dòng)順序:rpc.portmap, rpc.mountd, rpc.nfsd, rpc.statd, rpc.lockd (新版本會(huì)自動(dòng)跟著nfsd啟動(dòng)起來(lái)), rpc.rquotad
NF服務(wù)器端命令:
- yum install nfs-utils portmap
- chkconfig rpcbind on #chkconfig:更新和查詢各運(yùn)行級(jí)別的系統(tǒng)服務(wù)
- chkconfig nfs on
- service rpcbind start
- service nfs start
2,服務(wù)器端配置文件/etc/exports:指定要共享的目錄及權(quán)限
man exports- #:允許ip地址范圍在192.168.0.*的計(jì)算機(jī)以讀寫的權(quán)限來(lái)訪問(wèn)/home/work 目錄。
- /home/work 192.168.0.*(rw,sync,root_squash)
- /home 192.168.1.105 (rw,sync)
- /public * (rw,sync)
-
- 配置文件每行分為兩段:第一段為共享的目錄,使用絕對(duì)路徑,第二段為客戶端地址及權(quán)限。
- 地址可以使用完整IP或網(wǎng)段,例如10.0.0.8或10.0.0.0/24,10.0.0.0/255.255.255.0當(dāng)然也可以地址可以使用主機(jī)名,DNS解析的和本地/etc/hosts解析的都行,支持通配符,例如:*.chengyongxu.com
-
- 權(quán)限有:
- rw:read-write,可讀寫; 注意,僅僅這里設(shè)置成讀寫客戶端還是不能正常寫入,還要正確地設(shè)置共享目錄的權(quán)限,參考問(wèn)題7
- ro:read-only,只讀;
- sync:文件同時(shí)寫入硬盤和內(nèi)存;
- async:文件暫存于內(nèi)存,而不是直接寫入內(nèi)存;
- no_root_squash:NFS客戶端連接服務(wù)端時(shí)如果使用的是root的話,那么對(duì)服務(wù)端分享的目錄來(lái)說(shuō),也擁有root權(quán)限。顯然開啟這項(xiàng)是不安全的。
- root_squash:NFS客戶端連接服務(wù)端時(shí)如果使用的是root的話,那么對(duì)服務(wù)端分享的目錄來(lái)說(shuō),擁有匿名用戶權(quán)限,通常他將使用nobody或nfsnobody身份;
- all_squash:不論NFS客戶端連接服務(wù)端時(shí)使用什么用戶,對(duì)服務(wù)端分享的目錄來(lái)說(shuō)都是擁有匿名用戶權(quán)限;
- anonuid:匿名用戶的UID值,通常是nobody或nfsnobody,可以在此處自行設(shè)定;
- anongid:匿名用戶的GID值。
NFS客戶端用戶映射:客戶端登陸用戶為root或者其他用戶,然后根據(jù)服務(wù)器端nfs server配置,相應(yīng)客戶端連接映射到nfs服務(wù)器端的用戶為root或者指定用戶(通過(guò)anonuid或者anongid來(lái)設(shè)定)、nfsnobody等。最后這個(gè)
映射用戶和共享目錄的權(quán)限共同影響該客戶端連接是否有讀寫權(quán)限。
手動(dòng)設(shè)定客戶端、服務(wù)器端用戶映射,參數(shù):map_static=/etc/nfs.map
/etc/nfs.map文件映射內(nèi)容如下:
# remote local
gid 500 1000
uid 500 2003
參考:
NFS 學(xué)習(xí)筆記中關(guān)于nfs客戶連接用戶身份的描述,沒(méi)有驗(yàn)證過(guò)下述的描述:
- 客戶端連接時(shí)候,對(duì)普通用戶的檢查,NO.1如果明確設(shè)定了普通用戶被壓縮的身份,那么此時(shí)客戶端用戶的身份轉(zhuǎn)換為指定用戶,NO.2如果NFS server上面有同名用戶,那么此時(shí)客戶端登錄賬戶的身份轉(zhuǎn)換為NFS server上面的同名用戶,NO.3如果沒(méi)有明確指定,也沒(méi)有同名用戶,那么此時(shí) 用戶身份被壓縮成nfsnobody
- 客戶端連接的時(shí)候,對(duì)root的檢查,NO.1如果設(shè)置no_root_squash,那么此時(shí)root用戶的身份被壓縮為NFS server上面的root,NO.2如果設(shè)置了all_squash、anonuid、anongid,此時(shí)root 身份被壓縮為指定用戶,NO.3如果沒(méi)有明確指定,此時(shí)root用戶被壓縮為nfsnobody,NO.4如果同時(shí)指定no_root_squash與all_squash 用戶將被壓縮為 nfsnobody,如果設(shè)置了anonuid、anongid將被壓縮到所指定的用戶與組
3,防火墻設(shè)置修改默認(rèn)情況下,CentOS6服務(wù)器版安裝完成后,防火墻iptables配置中只放開了22端口。
在
nfs配置文件/etc/sysconfig/nfs中指定nfs服務(wù)相關(guān)端口,并修改防火墻放開相應(yīng)端口
- #Port rpc.mountd should listen on.
- #MOUNTD_PORT=892
-
- #Port rpc.statd should listen on.
- #STATD_PORT=662
-
- #/usr/sbin/rpc.rquotad Port rquotad should listen on.
- #RQUOTAD_PORT=875
-
- #TCP port rpc.lockd should listen on.
- #LOCKD_TCPPORT=32803
-
- #UDP port rpc.lockd should listen on.
- #LOCKD_UDPPORT=32769
修改iptables配置文件/etc/sysconfig/iptables,放開111(portmap服務(wù)端口),2049(nfs服務(wù)端口)
4,/etc/hosts.allow配置修改/etc/hosts.allow,/etc/hosts.deny 描述哪些主機(jī)允許使用本地的INET服務(wù)。
默認(rèn)這里好像可以不需要修改,不過(guò)最好設(shè)置成只允許需要的客戶端機(jī)器連接,然后其他機(jī)器的連接都deny
#服務(wù)進(jìn)程名:主機(jī)列表:當(dāng)規(guī)則匹配時(shí)可選的命令操作
server_name:hosts-list[:command]
在/etc/hosts.allow中添加允許客戶端訪問(wèn)的規(guī)則
ALL:127.0.0.1 #允許本機(jī)訪問(wèn)本機(jī)所有服務(wù)進(jìn)程
ALL:192.168.0.135 #允許192.168.0.135客戶端機(jī)器訪問(wèn)本機(jī)所有服務(wù)進(jìn)程
smbd:192.168.0.0/255.255.255.0 #允許網(wǎng)段的IP訪問(wèn)smbd服務(wù)
sshd:192.168.100.0/255.255.255.0 #允許192.168.100.網(wǎng)段的IP訪問(wèn)服務(wù)器上的sshd進(jìn)程
sshd:60.28.160.244 #允許外網(wǎng)的60.28.160.244訪問(wèn)這個(gè)服務(wù)器上的sshd進(jìn)程
在/etc/hosts.deny中
被禁制登陸的嘗試連接信息也可以設(shè)置成記錄下來(lái)并發(fā)到用戶郵箱sshd:ALL #禁止所有
5,修改共享出去的目錄權(quán)限為760,并修改目錄所有組為nfsnobody參考:?jiǎn)栴}7
6,客戶端掛載:執(zhí)行下面的指令就可以把NFS服務(wù)器(IP地址為192.168.1.45)共享出來(lái)的/home掛裝到本地的/mnt/nfs/home目錄下。
showmount -e nfs-serverip: 查看nfs服務(wù)器共享出來(lái)的資源
mount -t nfs 192.168.1.45:/home /mnt/nfs/home7,NFS性能測(cè)試:- 根據(jù)命令time dd if=/dev/zero of=/mnt/home bs=16k count=16384 來(lái)設(shè)置合理的WSIZE,RSIZE值
- 根據(jù)nfs客戶端數(shù),在/etc/sysconfig/nfs配置文件中設(shè)置合適的nfs服務(wù)器端進(jìn)程數(shù)RPCNFSDCOUNT,默認(rèn)為8
exportfs命令:如果我們?cè)趩?dòng)了NFS之后又修改了/etc/exports,是不是還要重新啟動(dòng)nfs呢?這個(gè)時(shí)候我們就可以用exportfs命令來(lái)使改動(dòng)立刻生效,該命令格式如下:
exportfs [-aruv] -a :全部mount或者unmount /etc/exports中的內(nèi)容 -r :重新mount /etc/exports中分享出來(lái)的目錄 -u :umount 目錄 -v :在 export 的時(shí)候,將詳細(xì)的信息輸出到屏幕上。
showmount命令:顯示NFS服務(wù)器的掛載信息。
showmount -e [nfs-server]:顯示指定的NFS SERVER上export出來(lái)的目錄,不指定后面IP時(shí)查看的是本機(jī)作為NFS Server時(shí),對(duì)外共享的目錄。。
rpcinfo -p命令:顯示RPC信息 -p參數(shù):用rpc協(xié)議來(lái)探測(cè)主機(jī)host上使用的rpcbind,并
顯示所有已注冊(cè)的RPC程序。
nfsstat命令:查看NFS的運(yùn)行狀態(tài),對(duì)于調(diào)整NFS的運(yùn)行有很大幫助
過(guò)程中出現(xiàn)的問(wèn)題解決:1, 通過(guò)yum或者rpm安裝完portmap后,發(fā)現(xiàn)執(zhí)行命令service portmap start時(shí)報(bào)如下
錯(cuò)誤:portmap: unrecognized service。
CentOS6(Linux Kernel 2.6.32)中,
portmap已經(jīng)被rpcbind代替了,仔細(xì)查看安裝信息就會(huì)發(fā)現(xiàn),執(zhí)行命令yum install portmap時(shí)安裝的就是rpcbind。安裝完成后也可以通過(guò)命令:yum whatprovides portmap來(lái)查看詳細(xì)信息。
2, 客戶端掛載時(shí),報(bào)錯(cuò)誤mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive。
- 1,通過(guò)命令rpcinfo -p來(lái)查看portmap服務(wù)時(shí)候正常啟動(dòng)以及相應(yīng)的端口(默認(rèn)111)
- 2,檢查/etc/sysconfig/iptables防火墻設(shè)置,允許tcp,udp的111端口訪問(wèn),然后service iptables restart
- 3,檢查/etc/hosts.deny,/etc/hosts.allow看客戶端連接是否被阻止了
3, 客戶端執(zhí)行命令showmount -e nfs-server時(shí),報(bào)錯(cuò)誤:mount clntudp_create: RPC: Program not registered。
nfs、rpcbind服務(wù)沒(méi)有啟動(dòng),使用chkconfig把nfs、rpcbind加到系統(tǒng)服務(wù)中并用service來(lái)啟動(dòng)
或者在/etc/hosts.allow中添加允許客戶端訪問(wèn)的規(guī)則 ALL:192.168.0.135
4, 客戶端執(zhí)行命令showmount -e nfs-server時(shí),報(bào)錯(cuò)誤:rpc mount export: RPC: Unable to receive; errno = No route to host
配置文件:/etc/sysconfig/nfs找到nfs服務(wù)相關(guān)端口設(shè)置的地方,并移除注釋后,在iptables防火墻設(shè)置中指定允許相應(yīng)端口的Udp,tcp流通過(guò)。
#MOUNTD_PORT=892
#STATD_PORT=662
#LOCKD_TCPPORT=32803
#LOCKD_UDPPORT=32769
iptables -A INPUT -p TCP --dport 662 -m state --state NEW -j ACCEPT
iptables -A INPUT -p UDP --dport 661 -m state --state NEW -j ACCEPT
5, showmount -e nfs-server成功,正式掛載時(shí)報(bào)錯(cuò):mount: mount to NFS server '192.168.1.5' failed: System Error: No route to host.這是由于nfs服務(wù)的默認(rèn)端口2049被防火墻阻塞了,和上面類似修改iptables允許2049端口通過(guò)
6, showmount -e nfs-server成功,正式掛載時(shí)報(bào)錯(cuò):mount: mount to NFS server '192.168.1.5' failed: timed out (retrying).
編輯/etc/sysconfig/iptables時(shí),相關(guān)端口的tcp端口允許通過(guò),而udp不允許。其他可能的原因參考:
mount command fails with NFS server failed error. Disable name lookup requests from NFS server to a DNS server.
or NFS version used by the NFS client is other than version 3.
7,exports配置文件中目錄權(quán)限屬性設(shè)置為rw(默認(rèn)為root_squash),但是在客戶端mount目錄執(zhí)行touch命令時(shí)報(bào)錯(cuò)誤:touch: cannot touch `a': Permission denied。解決:
- 服務(wù)器端共享目錄權(quán)限查看ll -d /home
- 修改服務(wù)器端共享目錄權(quán)限chown 760 /home(文件所有者root有全權(quán)限、文件所有組用戶有讀寫權(quán)限、其他用戶無(wú)權(quán)限,然后把目錄的組設(shè)置為nfsnobody)
- 修改服務(wù)器端共享目錄權(quán)限組擁有者為nfsnobody(cat /etc/passwd | grep nob)
- chgrp nfsnobody /home
- 成功在客戶端創(chuàng)建新的文件!
CentOS NFS配置維基百科 - 網(wǎng)絡(luò)文件系統(tǒng)