NFS

一、NFS介紹

1、NFS簡介

NFS (Network File System,網絡文件系統),通過網絡讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網絡訪問位於服務器磁盤中的數據,是在類Unix系統間實現磁盤文件共享的一種方法。 NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的文件系統”,它是獨立於操作系統,允許不同硬件及操作系統的系統共同進行文件的分享。

NFS在文件傳送或信息傳送過程中依賴於RPC協議。RPC, (Remote Procedure Call,遠程過程調用)是能使客戶端執行其他系統中程序的一種機制,RPC採用C/S模式。NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因爲NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序;或者說NFS也是一個RPC SERVER,所以只要用到NFS的地方都要啓動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這麼理解RPC和NFS的關係:NFS是一個文件系統,而RPC是負責負責信息的傳輸。

注意:RPC服務啓動之後才能啓動nfs服務,因爲nfs服務要到RPC註冊端口號。

2、NFS工作機理

2017-10-15_112927.jpg

(1)客戶端向NFS服務器發送資源請求時,客戶端RPC服務通過網絡向NFS服務器的RPC(111端口)服務發出資源請求。

(2)NFS服務器的RPC端口獲取到服務器端nfs服務註冊端口,通知客戶端RPC服務器

(3)客戶端收取到正確的端口之後,直接與服務端的nfs服務建立通信。

(4)服務器nfs服務接受到請求資源之後本地響應讀取本地磁盤中的內容,然後返回至客戶端這樣就完成一次存取操作。

3、NFS優勢

(1)節省本地存儲空間

(2)用戶不需要再網絡中的每個機器上都建有home目錄

4、NFS版本對比

NFS v2NFS v3NFS v4
只支持32位文件傳輸,最大文件數爲4G支持64位傳輸CentOS 7 默認使用NFS v4,實現僞根掛載,輔助服務不需要,完全支持kerberos
文件傳輸尺寸限制在8K沒有文件尺寸限制
v3增加和完善了許多錯誤和成功信息的返回,對於服務器的設置和管理能帶來很大好處改進了INTERENT上的存取和執行效能在協議中增強了安全方面的特性
只提供了對UDP協議的支持,在一些高要求的網絡環境中又很大限制增加了對TCP傳輸協議的支持,有更好的I/O性能只支持TCP傳輸,通過一個安全的帶內系統,協商在服務器和客戶端之間使用的安全性類型使用字符串而不是整數倆表示用戶和組標識符

5、NFS服務主要進程

rpm.nfsd 最主要的NFS進程,管理客戶端是否可登陸,登入者ID的判斷。監聽在2049端口

rpc.mount 主要功能管理NFS的文件系統。當客戶端通過rpc.nfsd登入主機後,使用NFS服務器提供的文件之前,還會經過文件使用權限的認證程序。讀取/etc/exports配置文件來對比客戶端的權限;如果權限認證通過,客戶端就可以使用NFS提供的文件了。

rpc.lockd 管理文件鎖,避免同時寫錯

rpc.statd 檢查文件一致性,可修復文件

6、NFS配置文件

軟件包名:nfs-utils

配置文件

/etc/exports.d和/etc/exports

配置NFS使用固定端口

RQUOTAD_PORT 
LOCKD_TCPPORT
LOCKD_UDPPORT
MOUNTD_PORT
STATD_PORT  rpc.statd監聽端口
STATD_OUTGONING_PORT outgoing設置端口

鎖配置文件

/etc/modprobe.d/lockd.conf

nfs服務啓動配置文件

/etc/sysconfig/nfs

命令配置文件

/sbin/mount.nfs
/sbin/mount.nfs4
/sbin/osd_login
/sbin/rpc.statd
/sbin/umount.nfs
/sbin/umount.nfs4

7、/etc/exports配置文件

格式

/DIR(共享的文件或目錄) 主機1(opts) 主機2(opts)

主機格式:

單個主機:IPv4 IPv6 FQDN
IP network:兩種掩碼格式均支持
   0.0.0.0/24
   0.0.0.0/255.0.0.0
wildcards:主機名通配,例如*.localhost.com
netgroups:NIS域主機組,@group_name
anonymous:表示使用*通配所有客戶端

ops:

secure:使用了1024以下的TCP/IP端口實現NFS的連接。
insecure:允許客戶端從大於1024的TCP/IP端口實現NFS連接。
rw:允許NFS客戶機進行讀寫訪問
ro:允許NFS客戶機進行只讀訪問
async:異步,數據變化後不立即寫磁盤,可以改進性能
no_wdelay:關閉寫延時;如果設置了async,NFS會忽略這個選項
nohide:如果將一個目錄掛載到另外一個目錄上,那麼原來的目錄通常就被隱藏起來,這個選項禁用這種行爲。
hide:隱藏原來目錄中的內容
no_stbtree_check:關閉子樹檢查;子樹檢查會執行一些不想忽略的安全性檢查。默認啓用子樹檢查
mp(mountpoint=path):NFS要求掛載所導出的目錄
no_auth_nlm:NFS守護進程不要對加鎖請求進行認證。默認爲auth_nlm或secure_locks
fsid=num|root|uuid:NFS需要識別每個文件系統。
crossmnt:這個選項類似於nohide,使得客戶端能訪問掛載目錄下的文件。例如如果B目錄掛載A目錄上,設置crossmnt在A目錄上不被隱藏。

用戶映射

通過NFS中的用戶映射,可以將僞或實際用戶和組的表示賦給一個正在對NFS捲進行操作的用戶,這個NFS用戶具有映射所允許的用戶和組的許可權限。對NFS卷使用一個通過的用戶/組可以提供一定的安全性和靈活性。

在使用NFS掛載的文件系統上的文件時,用於的訪問通常都會受到限制,都是以匿名用戶的身份對文件進行訪問的,這些用戶缺省的情況下對這些文件只有只讀權限。NFS允許指定訪問遠程文件用戶通過用戶標識號和組標識號,可以禁用正常的squash行爲

用戶映射選項

root_squash:將root用戶及所屬組映射爲匿名用戶或用戶組,默認選項
no_root_squash:允許root用戶訪問掛載NFS卷
all_squash:對於公共訪問的NFS卷時非常有用的,它會限制所有的UID和GID,只使用匿名用戶(nfsnobody)訪問NFS卷
anonuid:將遠程訪問的所有用戶都映射爲匿名用戶,並制定該用戶爲本地用戶(UID=NUM)
anongid:將遠程用戶的所有用戶組都映射爲匿名用戶組賬戶,並指定該匿名用戶組賬戶爲本地用戶組賬戶(GID=NUM)

客戶端NFS掛載選項

fg:前臺掛載
bg:後臺掛載
hard:持續請求
soft:非持續請求
rsize:從服務器中讀取的字節數
wsize:寫入服務器的字節數,默認爲1024,如果使用比較高的值,可以提高傳輸速度
_netdev:網絡設備掛載,如果檢測到網絡自動掛載

8、管理命令

(1)exportfs 管理當前NFS共享文件系統列表

-a 打開或取消所有目錄共享
-o 指定一列共享選項
-i  忽略`/etc/exports`文件,從而只是用默認的和命令行指定的選項
-r 重新讀共享所有目錄。它是/etc/exportfs和/var/lib/nfs/xtab同步。
-u 取消一個或多個目錄共享
-v 輸出詳細信息

(2)showmount 查詢mountd守護進程,以顯示NFS服務器加載的信息

-d 僅顯示以被NFS客戶端加載的目錄
-e 顯示NFS服務器上的所有共享目錄

(3)rpcinfo 顯示portmap的有關信息

-p 列出所有host用portmap註冊的RPC程序,如果沒有指定host,就查找本機上RPC程序
-u RPC調用host程序program的version版本,並報告是否接受到相應
-t TCP RPC調用host程序program的version版本,並報告是否接收到響應
-n 根據-t或者-u,使用編號爲port的端口,而不是portmap指定的端口
-d 將程序program的version版本從本機的RPC註冊表中刪除。注意只用root權限的用戶纔可以使用此選項。
-s 查看RPC註冊程序

(4)mount.nfs 掛載NFS

-r 只讀掛載
-w 讀寫掛載
-f 假掛載,不實際調用mount
-n 不更新/etc/mtab

三、示例

1、基本掛載並分享

(1)CentOS 7 共享目錄/app/testnfs

[root@localhost/app]#vim /etc/exports

 1 /app/testnfs    192.168.4.132

(2)使用命令exportfs重讀

[root@localhost/app]#exportfs -r

(3)CentOS 6使用showmount命令查看

[root@localhost/app]#showmount -e 192.168.4.60

(4)掛載

[root@localhost ~]# mount -t nfs 192.168.4.60:/app/testnfs /mnt/nfs/

如果不NFS服務器中掛載不添加任何選項,默認爲

ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash

如果客戶對文件有寫權限,但是此目錄NFS設爲只要只讀權限,所以對NFS寫不進去文件或創建目錄等等操作。如果需要這種操作需要確保文件對此目錄是否有寫權限,並且NFS共享時是否設置了讀寫權限;只有兩者同時具備纔可以寫操作。

這時我們開啓NFS共享文件的權限

[root@localhost/app]#chmod 777 /app/testnfs

再次寫去測試即可創建

2、實現NFS僞根

(1)創建一個目錄並在目錄下在創建目錄

[root@localhost/app/testnfs]#mkdir nfs1 [root@localhost/app/testnfs]#mkdir nfs2

(2)配置共享文件

[root@localhost/app/testnfs]#vim /etc/exports

1 /app/testnfs    192.168.4.132(rw,fsid=0,crossmnt)
2 /app/testnfs/nfs1       192.168.4.132(rw,root_squash)
3 /app/testnfs/nfs2       192.168.4.132(ro)

[root@localhost/app/testnfs]#exportfs -v

/app/testnfs    192.168.4.132(rw,sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,root_squash,no_all_squash)
/app/testnfs/nfs1
       192.168.4.132(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/app/testnfs/nfs2
       192.168.4.132(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)

我們也可以通過 /var/lib/nfs/etab

[root@localhost/app/testnfs]#cat /var/lib/nfs/etab

/app/testnfs/nfs2   192.168.4.132(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,no_all_squash)
/app/testnfs/nfs1   192.168.4.132(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,no_all_squash)
/app/testnfs    192.168.4.132(rw,sync,wdelay,hide,crossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,fsid=0,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,no_all_squash)    

(3)測試

[root@localhost ~]# showmount -e 192.168.4.60

[root@localhost ~]# mount -t nfs 192.168.4.60:/ /mnt/nfs/

[root@localhost nfs1]# touch nfs.txt

[root@localhost nfs1]# ll

-rw-r--r--. 1 nfsnobody nfsnobody 0 Oct 15  2017 nfs.txt

此時我們看創建文件的所有者及所屬組都爲nfsnobody,這裏就驗證了我們剛剛前面提到的root用戶映射爲匿名用戶nfsnobody。

[joah@localhost nfs1]$ ll

-rw-rw-r--. 1 joah      joah      0 Oct 15  2017 nfs2.txt
-rw-r--r--. 1 nfsnobody nfsnobody 0 Oct 15  2017 nfs.txt

通過上述查看非系統賬號創建的文件的所有者及所屬組爲自己本身。

此時我們在NFS服務器上查看文件

[root@localhost/app/testnfs/nfs1]#ll

-rw-rw-r--. 1       500       500 0 Oct 15 23:45 nfs2.txt
-rw-r--r--. 1 nfsnobody nfsnobody 0 Oct 15 23:42 nfs.txt

在客戶端創建的文件在NFS服務器上的所有者和所屬組都爲500。而客戶端joah的所有者和所屬組的id也爲500,這也驗證了上述說明的用戶映射。如果服務器500這個id號被佔用如何處理?

[root@localhost/app/testnfs/nfs1]#ll

-rw-rw-r--. 1 li              500 0 Oct 15 23:45 nfs2.txt

此時所有者不一樣了。這樣有時就會出現問題。

關於權限

(1)客戶端連接時候,對普通用戶檢查

a、如果明確設定了普通用戶被壓榨,那麼此時客戶端用戶的身份轉換爲指定用戶
b、如果沒有明確指定,那麼此時用戶身份被壓榨成nfsnobody

(2)客戶端連接時,對root的檢查

a、如果設置no_root_squash,此時root用戶身份被壓榨成NFS服務器上的root
b、如果設置了all_squash、anonuid、anongid,此時root的身份被壓榨爲指定用戶
c、如果沒有明確指定,root被壓榨爲nfsnobody
d、如果同時指定no_root_squash和all_squash用戶將被壓榨爲nfsnobody;如果設置了anonuid、anongid將被壓榨爲指定用戶與組

四、自動掛載

1、auto簡介

Autofs與Mount/Umount的不同之處在於,它是一種看守程序。如果它檢測到用戶正試圖訪問一個尚未掛接的文件系統,它就會自動檢測該文件系統,如果存在,那麼Autofs會自動將其掛接。另一方面,如果它檢測到某個已掛接的文件系統在一段時間內沒有被使用,那麼Autofs會自動將其卸載。因此一旦運行了Autofs後,用戶就不再需要手動完成文件系統的掛接和卸載。

2、配置文件

主配置文件

/etc/autos.conf

配置掛載文件

/etc/auto.master

3、autofs掛載方式

(1)相對路徑法

/etc/auto.master配置格式

DIRNAME     子配置文件

子配置文件格式

BASENAME    需要掛載的文件等

示例 :

[root@localhost ~]# vim /etc/auto.master

/mnt    /etc/auto.nfs

[root@localhost ~]# vim /etc/auto.nfs

nfs     -fstype=nfs     192.168.4.60:/

重啓服務測試即可

[root@localhost ~]# cd /mnt/nfs/ [root@localhost nfs]# ls

fstab  nfs1  nfs2

(2)絕對路徑法

/etc/auto.master配置格式

/-      子配置文件

子配置文件格式

掛載點路徑   被掛載文件等

示例:

[root@localhost ~]# vim /etc/auto.master

/-    /etc/auto.nfs

[root@localhost ~]# vim /etc/auto.nfs

/mnt/nfs     -fstype=nfs     192.168.4.60:/

重啓服務測試即可

[root@localhost ~]# cd /mnt/nfs/ [root@localhost nfs]# ls

fstab  nfs1  nfs2

注意:如果父目錄不存在時,會自動創建。使用絕對路徑不會隱藏原來目錄下目錄中的內容。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章