CentOS7下NFS服務安裝及配置
系統環境:CentOS Linux release 7.4.1708 (Core) 3.10.0-693.el7.x86_64
軟件版本:nfs-utils-1.3.0-0.48.el7_4.x86_64
網絡環境中配置了DNS服務器,NFS服務器對應的域名是nfs.st.local,IP是192.168.1.18。配置過程中全部使用域名。
一、安裝
nfs客戶端和服務端都安裝nfs-utils包,同時自動安裝rpcbind。安裝后會創建nfsnobody用戶和組,uid和gid都是65534。
# yum -y install nfs-utils
二、配置端口
nfs除了主程序端口2049和rpcbind的端口111是固定以外,還會使用一些隨機端口,以下配置將定義這些端口,以便配置防火牆
# vim /etc/sysconfig/nfs #追加端口配置 MOUNTD_PORT=4001 STATD_PORT=4002 LOCKD_TCPPORT=4003 LOCKD_UDPPORT=4003 RQUOTAD_PORT=4004
三、NFS權限說明
1、普通用戶
當設置all_squash時:訪客時一律被映射為匿名用戶(nfsnobody)
當設置no_all_squash時:訪客被映射為服務器上相同uid的用戶,因此在客戶端應建立與服務端uid一致的用戶,否則也映射為nfsnobody。root除外,因為root_suqash為默認選項,除非指定了no_root_squash
2、root用戶
當設置root_squash時:訪客以root用戶訪問NFS服務端時,被映射為nfsnobody用戶
當設置no_root_squash時:訪客以root用戶訪問NFS服務端時,被映射為root用戶。以其他用戶訪問時同樣映射為對應uid的用戶,因為no_all_squash是默認選項
選項說明
ro:共享目錄只讀
rw:共享目錄可讀可寫
all_squash:所有訪問用戶都映射為匿名用戶或用戶組
no_all_squash(默認):訪問用戶先與本機用戶匹配,匹配失敗后再映射為匿名用戶或用戶組
root_squash(默認):將來訪的root用戶映射為匿名用戶或用戶組
no_root_squash:來訪的root用戶保持root帳號權限
anonuid=<UID>:指定匿名訪問用戶的本地用戶UID,默認為nfsnobody(65534)
anongid=<GID>:指定匿名訪問用戶的本地用戶組GID,默認為nfsnobody(65534)
secure(默認):限制客戶端只能從小於1024的tcp/ip端口連接服務器
insecure:允許客戶端從大於1024的tcp/ip端口連接服務器
sync:將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性
async:將數據先保存在內存緩沖區中,必要時才寫入磁盤
wdelay(默認):檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率
no_wdelay:若有寫操作則立即執行,應與sync配合使用
subtree_check(默認) :若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限
no_subtree_check :即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率
以nfsuser(uid=1000)創建共享目錄,參數默認rw
# mkdir /var/nfs
# chown nfsuser. -R /var/nfs # vim /etc/exports /var/nfs 192.168.1.0/24(rw)
# exportfs -r #重載exports配置
# exportfs -v #查看共享參數
/var/nfs 192.168.1.0/24(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
exportfs參數說明
-a 全部掛載或卸載 /etc/exports中的內容
-r 重新讀取/etc/exports 中的信息 ,並同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸載單一目錄(和-a一起使用為卸載所有/etc/exports文件中的目錄)
-v 輸出詳細的共享參數
四、防火牆
# iptables -I INPUT 5 -p tcp -m tcp --dport 111 -j ACCEPT # iptables -I INPUT 5 -p udp -m udp --dport 111 -j ACCEPT # iptables -I INPUT 5 -p tcp -m tcp --dport 2049 -j ACCEPT # iptables -I INPUT 5 -p udp -m udp --dport 2049 -j ACCEPT # iptables -I INPUT 5 -p tcp -m tcp --dport 4001:4004 -j ACCEPT # iptables -I INPUT 5 -p udp -m udp --dport 4001:4004 -j ACCEPT # iptables-save >/etc/sysconfig/iptables
五、啟動服務
# systemctl start rpcbind.service # systemctl enable rpcbind.service # systemctl start nfs.service # systemctl enable nfs.service
啟動順序一定是rpcbind->nfs,否則有可能出現錯誤
六、Linux客戶端掛載
1、直接掛載
# mount -t nfs nfs.st.local:/var/nfs /mnt
也可將掛載配置寫入fstab文件中,與普通磁盤掛載一樣,掛載時同樣可以指定權限,只是類型為nfs。
2、autofs掛載
# yum -y install autofs # vi /etc/auto.master #添加一行 /- /etc/auto.mount # vi /etc/auto.mount #添加一行 /mnt -fstype=nfs,rw nfs.st.local:/var/nfs #啟動服務 # systemctl start autofs # systemctl enable autofs
七、故障解決
1、nfs只能掛載為nobody
同時修改服務端、客戶端/etc/idmapd.conf中的Domain為一樣的值,隨后重啟rpcidmapd服務,或重啟所有服務
2、客戶端無法卸載nfs目錄
umount.nfs4: /var/nfs: device is busy
執行fuser -km /var/nfs/,然后再執行umount
參考
http://www.361way.com/rh254-nfs/4703.html
http://www.361way.com/nfs-mount-nobody/2616.html
https://www.server-world.info/en/note?os=CentOS_7&p=nfs&f=1
http://www.cnblogs.com/lykyl/archive/2013/06/14/3136921.html