環境:
nfsserver:
系統:CentOS Linux release 7.4 (Core)
內核版本:3.10.0-693.11.6.el7.x86_64
IP地址:10.45.10.151
nfsclient:
系統:CentOS Linux release 7.4 (Core)
內核版本:3.10.0-693.11.6.el7.x86_64
IP地址:10.45.29.216
nfs軟件:
nfs-utils: NFS服務的主程序
rpcbind: RPC服務程序 (服務端和客戶端都需要安裝)
操作步驟:
* 安裝部署
一)在nfsserver上操作
1)查看是否安裝rpcbind和nft-utils服務
[root@nfsserver ~]# rpm -qa nfs-utils rpcbind
2)如果沒有安裝,則使用yum來安裝
[root@nfsserver ~]# yum -y install rpcbind nfs-utils
在查看一下
[root@nfsserver ~]# rpm -qa nfs-utils rpcbind
nfs-utils-1.3.0-0.48.el7_4.2.x86_64
rpcbind-0.2.0-42.el7.x86_64
啟動服務
1)啟動rpc服務
[root@nfsserver ~]# systemctl enable rpcbind
[root@nfsserver ~]# systemctl start rpcbind
[root@nfsserver ~]# ps -ef|grep rpc
rpc 11200 1 0 10:52 ? 00:00:00 /sbin/rpcbind -w
root 11202 3049 0 10:53 pts/0 00:00:00 grep --color=auto rpc
[root@nfsserver ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
(RPC服務對外使用111端口)
2)啟動nfs服務
~~~
[root@nfsserver ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@nfsserver ~]# systemctl start nfs
[root@nfsserver ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 57003 status
100024 1 tcp 49338 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 47873 nlockmgr
100021 3 udp 47873 nlockmgr
100021 4 udp 47873 nlockmgr
100021 1 tcp 37146 nlockmgr
100021 3 tcp 37146 nlockmgr
100021 4 tcp 37146 nlockmgr
~~~
二)在nfsclient上操作
1)安裝rpcbind服務
[root@nfsclinet ~]# rpm -qa rpcbind
[root@nfsclinet ~]# yum -y install rpcbind showmount
查看一下
[root@nfsclinet ~]# rpm -qa rpcbind
rpcbind-0.2.0-42.el7.x86_64
啟動服務:
[root@nfsclinet ~]# systemctl enable rpcbind
[root@nfsclinet ~]# systemctl start rpcbind
* 簡單測試
1)在nfsserver上配置
假如我需要把如下目錄共享給nfsclient
[root@nfsserver ~]# ll /data/video/
total 0
編寫nfs配置文件
[root@nfsserver ~]# vim /etc/exports
#shared /data/video for pet project at 20180412
/data/video 10.45.29.216(rw,sync)
~
重新載入nfs服務
[root@nfsserver ~]# systemctl reload nfs
在本地檢查,看看有沒有共享出來
[root@nfsserver ~]# showmount -e localhost
Export list for localhost:
/data/video 10.45.29.216
2)在客戶端檢查(nfsclient)
[root@nfsclinet ~]# showmount -e 10.45.10.151
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
解答:防火墻沒開放
firewall-cmd --add-port=892/udp --permanent
firewall-cmd --add-port=892/tcp --permanent
firewall-cmd --add-port=111/udp --permanent
firewall-cmd --add-port=111/tcp --permanent
firewall-cmd --reload
然后在查看一下
[root@nfsclinet ~]# showmount -e 10.45.10.151
Export list for 10.45.10.151:
/data/video 10.45.29.216
然后執行掛載命令
[root@nfsclinet ~]# mount -t nfs 10.45.10.151:/data/video /upload/video
[root@nfsclinet ~]# cd /upload/video/
問題2:
[root@nfsclinet video]# touch b.txt
touch: cannot touch ‘b.txt’: Permission denied
解決辦法:
[root@nfsserver ~]# useradd -u 2005 -s /sbin/nologin www
[root@nfsclinet ~]# useradd -u 2005 -s /sbin/nologin www
/data/video 10.45.29.216(rw,sync,anonuid=2005,anongid=2005)
(注意:這里的IP可以寫多個,如/data/video 10.45.29.216(rw,sync,anonuid=2005,anongid=2005) 192.168.119.50(ro,sync)
[root@nfsserver ~]# systemctl reload nfs
[root@nfsserver video]# chown -R www.root /data/video/
[root@nfsclinet video]# touch b.txt
[root@nfsclinet video]# ll b.txt
-rw-r--r-- 1 www www 0 Apr 12 13:50 b.txt
(通過以上測試,就發現nfs客戶端是以我們配置好的用戶,寫入文件)
查看nfs服務器端
[root@nfsserver video]# ll
total 8
-rw-r--r-- 1 www root 0 Apr 12 13:40 a.txt
-rw-r--r-- 1 www www 0 Apr 12 13:50 b.txt
最后:由于重啟nfsclient客戶端服務器,掛載的會丟失,我們可以通過如下操作
[root@nfsclinet ~]# echo "mount -t nfs 10.45.10.151:/data/video /upload/video" >> /etc/rc.local
nfs服務器端參數詳解:
rw: 讀寫
ro: 只讀
sync:同步(請求或寫入數據,數據同步寫入到NFSserver)
async:異步
all_squash: 不管訪問nfs server共享目錄的身份是什么,他的權限都被壓縮為匿名用戶,同時uid和gid都變成nfsnobody,或者是你指定的annouid用戶
注意:(確保所有服務器對nfs共享目錄具備相同的權限,第一種方式: all_squash 把所有客戶端都壓縮成匿名用戶,這個匿名用戶通過anonuid來指定,所有客戶端都要有相同的uid和gid的用戶)
anonuid: 指定匿名用戶的uid
anongid: 指定匿名用戶的gid
查看:
[root@nfsserver ~]# cat /var/lib/nfs/etab
/data/video 10.45.29.216(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=2005,anongid=2005,sec=sys,secure,root_squash,all_squash)
nfs客戶端掛載的參數
defaults: 相當于rw,suid,dev,exec,auto,nouser,and async
noatime: 不更新文件系統inode的時間戳
auto: 自動掛載
noexec: 不允許執行程序 (即使設置咯,php程序還可以執行的)
nosuid: 不允許有suid
查看客戶端掛載參數:
[root@nfsclinet video]# cat /proc/mounts
10.45.10.151:/data/video /upload/video nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.45.29.216,local_lock=none,addr=10.45.10.151 0 0