|NO.Z.00036|——————————|^^ 部署 ^^|——|Linux&NFS服務.V02|------------------------------------------------------|NFS部署|
阿新 • • 發佈:2022-03-25
[LinuxNetworkEnd:Linux&NFS服務.V02] [Applications.LinuxNetworkEnd] [|NFS|普通使用者建立|自動掛載|普通使用者對映|]
一、NFS伺服器部署
二、NFS伺服器的啟動與停止:### --- 安裝nfs-utils服務 ~~~ 注:通常情況下:是作為系統的預設包安裝的 ~~~ CentoOS6.x之前rpcbind叫portmap [root@server21 ~]# yum install -y nfs-utils-* [root@server21 ~]# yum install -y rpcbind-*
### --- 啟動NFS伺服器
~~~ 為了使NFS伺服器能正常工作,需要啟動rpcbind和nfs兩個服務,
~~~ 並且rpcbing一定要先於nfs啟動。
[root@server21 ~]# service rpcbind start
[root@server21 ~]# service nfs start
Starting RPC idmapd: [ OK ] // 最後一步是把nfs向rpc註冊一下
### --- 查詢NFS伺服器狀態 [root@server21 ~]# service rpcbind status [root@server21 ~]# service nfs status
### --- 停止NFS伺服器
~~~ 要停止NFS執行時,需要先停止nfs服務再停止rpcbind服務,
~~~ 對於系統中有其他服務(如NIS)需要使用時,不需要停止rpcbind服務
[root@server21 ~]# service nfs stop
[root@server21 ~]# service rpcbind stop // 可以不需要停止,rpc是預設啟動的。若停止可能影響其他的服務
### --- 設定NFS伺服器的自動啟動狀態 ~~~ 設定rpcbind和nfs服務在系統執行級別2345自動啟動 [root@server21 ~]# chkconfig --list rpcbind rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@server21 ~]# chkconfig --list nfs nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@server21 ~]# chkconfig nfs on
### --- 檢視RPC伺服器開啟了那些埠
[root@server21 ~]# rpcinfo -p localhost
三、實驗相關例項:
### --- 將NFS伺服器的/atyanqi共享給20.20.20.22網段,rw許可權
[root@server21 ~]# mkdir /atyanqi
[root@server21 ~]# chmod o+w /atyanqi/ // 給其他人設定共享寫入的許可權
[root@server21 ~]# ll -ld /atyanqi/
drwxr-xrwx 2 root root 4096 Feb 4 09:47 /atyanqi/
[root@server21 ~]# vim /etc/exports
/atyanqi 20.20.20.22(rw) // /atyanqi:共享那個目錄 20.20.20.22:客戶端地址(rw):給予的許可權
[root@server21 ~]# service nfs reload // 重新把配置檔案載入一下
### --- 重啟rpcbind 和nfs服務
[root@server21 ~]# service rpcbind restart
[root@server21 ~]# service nfs restart
[root@server21 ~]# exportfs // 檢視共享目錄列表
/atyanqi 20.20.20.22
### --- 伺服器端檢視nfs共享狀態
[root@server21 ~]# showmount -e 20.20.20.21 // 本機測試,
Export list for 20.20.20.21:
/atyanqi 20.20.20.22
### --- 檢視自己共享的服務
### --- 客戶端檢視NFS共享狀態
[root@server22 ~]# showmount -e 20.20.20.21 // 客戶度測試,伺服器端IP地址
Export list for 20.20.20.21:
/atyanqi 20.20.20.22
### --- 客戶端掛載NFS伺服器共享目錄
~~~ 命令格式:mount NFS伺服器IP:共享目錄 本地掛載點目錄
[root@server22 ~]# mkdir /atyanqi // 建立本地掛載點
[root@server22 ~]# service rpcbind start
[root@server22 ~]# mount -o vers=3 20.20.20.21:/atyanqi /atyanqi/ // 臨時掛載 #-o vers=3 指定掛載使用nfs V3版本(避免同步延遲)
[root@server22 ~]# df -h
20.20.20.21:/atyanqi 94G 841M 88G 1% /atyanqi
[root@server22 ~]# mount |grep nfs
20.20.20.21:/atyanqi on /atyanqi type nfs (rw,vers=3,addr=20.20.20.21)
~~~ 測試掛載的目錄是否可以正常讀寫
[root@server22 ~]# touch /atyanqi/a.txt
[root@server22 ~]# vim /atyanqi/a.txt
aaaaaaaaaaaaaaaaaaaaaaaaa
~~~ 驗證客戶端和nfs伺服器端檔案是否一致:
[root@server21 ~]# cat /atyanqi/a.txt // 服務端檢視該檔案正常
aaaaaaaaaaaaaaaaaaaaaaaaa
~~~ 修改伺服器端響應許可權,不然客戶端無法正常訪問和使用
### --- nfs共享許可權和訪問控制
### --- 客戶端root使用者
~~~ 使用客戶端和root身份在nfs伺服器上建立檔案,檔案的所有者和所屬組是nfsnobody
~~~ 預設是以nfsnobody身份建立檔案或者目錄
[root@server22 ~]# touch /atyanqi/a.txt // root身份建立檔案
[root@server22 ~]# ll /atyanqi/a.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 /atyanqi/a.txt // 但檔案最終屬於nfsnobody使用者及組;預設採用的是rootsport會對映成nfsnobody
### --- 客戶端普通使用者
~~~ 使用客戶端的普通使用者身份在nfs伺服器上建立檔案,所有者和所屬組是nobody或普通使用者。
~~~ 如果明確設定了普通使用者的對映使用者身份,那麼此時客戶端使用者的身份轉換為指定對映使用者
~~~ 如果NFS server上面有同名使用者,
~~~ 那麼此時客戶端登入賬戶的身份轉換為NFS server上面的同名使用者。
~~~ 以root_squash身份執行
[root@server21 ~]# vim /etc/exports
/atyanqi 20.20.20.22(rw,no_root_squash)
[root@server21 ~]# service nfs reload
[root@server22 ~]# touch /atyanqi/b.txt // 客戶端可能會保留之前的掛載記錄,這樣我們需要把掛載斷開,重新掛載。
[root@server22 ~]# ll /atyanqi/ // 檢視到以root身份建立用目錄,目錄許可權未發生變化。
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 a.txt
-rw-r--r-- 1 root root 0 Feb 4 10:19 b.txt
[root@server21 ~]# ll /atyanqi/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 a.txt
-rw-r--r-- 1 root root 0 Feb 4 10:19 b.txt
### --- 以其它身份執行
[root@server22 ~]# useradd nfstest
[root@server22 ~]# id nfstest
uid=500(nfstest) gid=500(nfstest) groups=500(nfstest)
[root@server21 ~]# vim /etc/exports // 說明在客戶端不管你是用什麼身份建立檔案或者目錄,都會顯示是這個UID及GID是500的使用者身份建立的,也就是nfstest這個使用者建立的。
/atyanqi 20.20.20.22(rw,all_squash,anonuid=500,anongid=500)
[root@server21 ~]# service nfs reload
[root@server22 ~]# touch /atyanqi/c.txt
[root@server22 ~]# ll /atyanqi/ // 在伺服器上檢視都是這個UID及GID。
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 a.txt
-rw-r--r-- 1 root root 0 Feb 4 10:19 b.txt
-rw-r--r-- 1 500 500 0 Feb 4 10:37 c.txt
[root@server21 ~]# ll /atyanqi/ // 在客戶端檢視到的是nfstest的使用者建立的。
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Feb 4 10:10 a.txt
-rw-r--r-- 1 root root 0 Feb 4 10:19 b.txt
-rw-r--r-- 1 nfstest nfstest 0 Feb 4 10:37 c.txt
四、解除安裝和自動掛載
### --- 解除安裝和自動掛載:
### --- 解除安裝:
### --- 解除安裝客戶端的掛載目錄
[root@server22 ~]# umount /atyanqi/
### --- 停止伺服器端的共享
[root@server21 ~]# exportfs -au // 停止掛載
[root@server22 ~]# cd /atyanqi
bash: cd: /atyanqi: Stale file handle // 無效的檔案控制代碼,掛載已經失效了,客戶端時沒有辦法進行寫入的
[root@server22 ~]# ll /atyanqi
ls: cannot access /atyanqi: Stale file handle
[root@server21 ~]# exportfs -ra //重新掛載
[root@server22 ~]# cd /atyanqi/ //可以正常寫入
~~~ 自動掛載:/etc/fstab
~~~ 格式:<server>:<remote/export></local/directory>nfs<options> 0 0
~~~ #192.168.115.10:/home/zhangsan /media/zhangsan nfs defaults 0 0
~~~ mount -a
[root@server22 ~]# vim /etc/fstab
20.20.20.21:/atyanqi /atyanqi nfs defaults,vers=3 0 0 //為避免延遲加,vers=3
[root@server22 ~]# umount /atyanqi/
[root@server22 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 94G 841M 88G 1% /
tmpfs 931M 0 931M 0% /dev/shm
/dev/sda1 976M 35M 891M 4% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt/cdrom
[root@server22 ~]# mount -a // 重新讀取/etc/fstab檔案
[root@server22 ~]# df -h // 掛載成功
20.20.20.21:/atyanqi 94G 841M 88G 1% /atyanqi
### --- 相關命令
~~~ exportfs命令
~~~ 如果我們在啟動了NFS之後又修改了/etc/exports,
~~~ 是不是還要重新啟動nfs呢?這個時候我們就可以用exportfs命令來是改動立刻生效,
~~~ 該命令格式如下:
~~~ 格式:exportfs[-aruv]
~~~ -a:全部掛載或解除安裝/etc/exports中的內容
~~~ -r:重新讀取/etc/exports中的資訊,並同步更新/etc/exports /var/lib/nfs/xtab
~~~ -u:解除安裝單一目錄(和-a一起使用為解除安裝所有/etc/exports檔案中的目錄
~~~ -v:在export的時候,將詳細的資訊輸出到螢幕上。
### --- 具體例子:
~~~ exportfs -au:解除安裝所有共享目錄
~~~ exportfs -ra:重新共享所有目錄並輸出詳細資訊
[root@server22 ~]# exportfs -au // 伺服器端全部解除安裝
[root@server22 ~]# exportfs -ar // 伺服器端全部掛載,重新讀取
[root@server21 ~]# exportfs
/atyanqi 20.20.20.22
[root@server21 ~]# exportfs -v // 將資訊輸出到螢幕上
/atyanqi 20.20.20.22(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=500,anongid=500,sec=sys,rw,root_squash,all_squash)
### --- rpcinfo命令
~~~ 利用rpcinfo -p 可以查看出RPC開啟的埠所可提供的程式有哪些
~~~ 其中NFS開啟的是2049,portmapper(rpcbind)開啟的是111,其餘則是rpc開啟的。
~~~ rpcbind服務最好不要停止,可以reload,因為rpcbind並不只是為nfs提供服務,
~~~ 還需要為其他使用者提供服務。
[root@server21 ~]# rpcinfo -p
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)