天天看點

NFS

簡單的說是函數調用(遠端主機上的函數) 一部分功能由本地程式完成 另一部分功能由遠端主機上的函數完成。用戶端挂載了nfs伺服器的檔案系統時,進行一些操作,但是這些操作服務端如何知道呢??這可是在核心級别上實作協定。RPC就解決了這個問題,它會将用戶端的操作的函數調用發送到伺服器端,由伺服器端執行這些函數調用。

想想這種情形,nfs用戶端在挂載檔案系統以後,在本地以某使用者的身份建立了一個檔案,在伺服器端這個檔案的屬主和屬組是哪個使用者呢?早期是通過NIS(Network Information Services網絡資訊服務)來解決這個問題的,但是在傳輸賬号和密碼時,使用的是明文傳輸,現在使用LDAP+clbbler來實作的。但是,NFS使用的是idmapd這個服務,有rpc提供,将所有的使用者後映射為nfsnobody,但是在通路的時候,還是以本地UID對應的本地使用者來使用的。

NFS是通過什麼來控制那些用戶端可以通路,那些不可以通路的呢?NFS隻支援通過IP來控制用戶端,而這個功能是由守護程序mounted來實作的,它監聽的端口是半随機的。所謂的半随機指的是,這個随機端口是由rpc服務來決定的,而rpc是通過随機的方式。作用等等同于小區大門保安的作用。

在CentOS6.5中,NFS服務端監聽在tcp和udp的2049端口,服務名是nfs、pc監聽于tcp和udp的111号端口,服務名是portmapper。

請求過程:當用戶端試這去挂載使用nfs共享的檔案系統是,用戶端首先回去與postmapper(tcp/111)端口去注冊使用,此時postmapper會随機配置設定一個端口給mounted,然後mounted這個守護程序會來驗證用戶端的合法性,驗證通過後,會把請求交給nfs服務,用戶端此時可以挂載使用了,使用者在建立檔案時,會使用到idmapd的守護程序來映射屬主。其實idmapd也是有rpc服務提供的,隻不過在這裡,nfs服務使用到使用者映射的功能時,會自動的去調用此守護程序。

========================================================================================================================

3:原理

nfs伺服器主要端口是2049,早期是同時啟動1024以下的端口來響應客戶機。現在端口很大

nfs伺服器啟動随機擷取端口,并向rpc注冊,是以rcp就知道NFS的端口了。

rpc 同時使用固定端口111來監用戶端需求,同時把知道的正确nfs端口發給客戶。

客戶機和nfs 直接聯系了

4:權限

(1)NFS server和 NFS client 剛好用相同的帳号和群組。這時可以直接存取

 (2) NFS server和NFS client  UID 正好相同,使用者名不同, 可以存取,但有危險性

(3)當NFS server 沒有相對應的UID時,NFS client會被壓縮成匿名使用者nfsnobody。也有例外,就是當NFS server 共享目錄為/tmp時,NFS client使用者建立的資料會變成無擁有者

(4) NFS client 為root 用通路時,會壓縮成匿名者

5:NFS伺服器配置權限要點:

  (1)伺服器/etc/exports 裡權限設定用關

  (2)共享的目錄實際權限,也就是目錄本身可寫

  (3)使用者的UID身份

6:配置檔案

# yum install rpcbind nfs-utils

/usr/sbin/rpc.mountd

/usr/sbin/rpc.nfsd

/etc/exports        共享的目錄和權限

/usr/sbin/exportfs  伺服器端維護共享資源的指令

/var/lib/nfs/etab   記錄NFS共享目錄的權限設定值

/var/lib/nfs/xtab   記錄NFS相關的科技機連接配接資料

/usr/sbin/showmount  用戶端檢視共享資源的指令 

# /etc/rc.d/init.d/rpcbind start

# /etc/rc.d/init.d/nfs start

[root@centos ~]# /etc/rc.d/init.d/nfs start

Starting NFS services:                                     [  OK  ]

Starting NFS mountd:                                       [  OK  ]

Starting NFS daemon:                                       [  OK  ]

Starting RPC idmapd:                                       [  OK  ]

7:共享目錄配置檔案:

/etc/exports:

檔案系統  客戶機(權限)  客戶機(權限)  客戶機(權限)          

      注意: 客戶機:可以是IP ,網段,主機名

      權限:rw 讀寫       ro 隻讀  

            sync(同步)  async(異步)

            no_root_squash (不壓縮root) root_squash(壓縮root)

            all_squash (統統壓縮為nfsnobody)

            anonuid (匿名的uid) anongid (匿名的gid)

測試:

NFS 伺服器 : 

# useradd -u 600 test

# mkdir -pv /web/www

# setfacl -m u:test:rwx /web/www/

# vim /etc/exports 

/web/www 192.168.2.20(rw) 192.168.2.0/24(rw)

NFS 用戶端:

# showmount -e 192.168.2.34  

Export list for 192.168.2.34:

/web/www 192.168.2.0/24

# mkdir /mnt/nfs

# mount -t nfs 192.168.2.34:/web/www /mnt/nfs/

匿名使用者登入後 建立檔案uid gid 都為601.并可以讀寫

[root@centos ~]# groupadd -g 601 nfsanon

[root@centos ~]# useradd -u 601 -g nfsanon nfsanon

[root@centos ~]# mkdir /nfs/linux -pv

[root@centos ~]# setfacl -m u:nfsanon:rwx /nfs/linux/

[root@centos ~]# cat /etc/exports 

/nfs/linux 192.168.2.0/24(rw,all_squash,anonuid=601,anongid=601)

[root@centos ~]# exportfs -ar

# exportfs -ar : 重新到出所有的檔案系統

# exportfs -au: 關閉到處的所有檔案系統

# rpcinfo -p   檢視監聽的端口

小知識:開機挂載時/etc/fstab

server:/path/  /mount_point   nfs  defaults,_netdev 0 0  

                                               _netdev 是跳過網絡檢查

showmount是用來檢視nfs服務的情況

用法:showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]

可以使用短選型,也可以使用長選項。

-a :這個參數是一般在NFS SERVER上使用,是用來顯示已經mount上本機nfs目錄的cline機器。   

-e :顯示指定的NFS SERVER上export出來的目錄。 

exportfs:一般用在當NFS服務啟動後,使用此指令來控制共享目錄的導出

用法:exportfs [-aruv] 

-a :全部mount或者unmount /etc/exports中的内容 

-r :重新mount /etc/exports中分享出來的目錄 

-u :umount目錄 

-v :在export的時候,将詳細的資訊輸出到螢幕上。 

具體例子: 

# exportfs -au 解除安裝所有共享目錄 

# exportfs -rv 重新共享所有目錄并輸出詳細資訊

先使用 showmont -e SER_NAME 來發現服務端的共享的目錄

然後使用mount挂載使用,格式:

mount -t nfs SER_NAME:/data /parth/to/someponit [-o 選項]

mount -t nfs 192.168.1.99:/mydat /mnt -o rsize=4096

rsize 的值是從伺服器讀取的位元組數。wsize 是寫入到伺服器的位元組數。預設都是1024, 如果使用比較高的值,如8192,可以提高傳輸速度。

繼續閱讀