網絡共享(Ftp,NFS,Samba)----NFS

1. NFS的由來: NFS(Network File System)是一種分佈式文件系統,允許網絡中的安裝不同操作系統(LinuxUnix)的計算機間共享文件和外設,所以它的通訊協定設計與主機及操作系統無關. 它是由SUN公司於1984年推出,使得可以本地機一樣的使用另一臺聯網計算機的文件和外設。NFS在文件傳送或信息傳送過程中依賴於RPC協議

功能:當我們的NFS Server設定好共享目錄後,其他的NFS Client端就可以將這個目錄掛載到自己系統上面的某個掛載點(掛載點可以自定義),進入這個掛載點即可查看共享的文件。

缺陷:  a.明文傳輸

         b.只能用於LinuxUnix間操作系統中

           c.新版的NFS服務是置於系統內核中的。

2.RPCRPC, 遠程過程調用 (remote procedure call)是能使客戶端執行其他系統中程序的一種機制。由於使用 RPC 的程序不必瞭解支持通信的網絡協議的情況,因此 RPC 提高了程序的互操作性。常用於分佈式C/S模型,發出請求的程序是客戶程序,而提供服務的程序是服務器。

功能:NFS支持的功能相當的多,而不同的功能都會使用不同的程序來啓動,每啓動一個功能就會啓用一些 端口 來傳輸文件,因此, NFS 的功能所對應的端口不固定,而是採用隨機取用一些未被使用的小於 1024 的端口來使用,但客戶端又不知道服務器端的相關端口,所以需要遠程過程調用(RPC) 的服務,RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,並且返回給客戶端,讓客戶端可以連結到正確的端口上去。當服務器在啓動 NFS 時會隨機取用數個端口,並主動的向 RPC 註冊,因此 RPC 可以知道每個端口對應的 NFS 功能,然後 RPC 又是固定使用 port 111 來監聽客戶端的需求並返回客戶端正確的端口。

可以指定的靜態端口:MOUNT_PORT=”4002”

                    STATD_PORT=”4003”

                    LOCKD_TCPPORT=”4004”

                    LOCKD_UDPPORT=”4004”

                    ROUOTAD_PORT=”4005”

                    STATD_OUTGOING_PORT=”4006”

3.NFSnfs-utils-1.0.6-65.EL4

  腳本nfsnfslock

  端口2049Tcp/Udpnfsd 其他半隨機111Tcp/Udp,及其他的小於1024的隨機端口。

配置文件:/etc/exports, /etc/sysconfig/nfs

進程:rpc.mounted  ß-------mount

       lockdß--------NLM

       rpc.statdß------NLM

NFS 主程序:nfs-utils
RPC
主程序:portmap

/var/lib/nfs/*tab
  在NFS服務器的登錄檔都放置到/var/lib/nfs/目錄裏面,在該目錄下有兩個比較重要的登錄檔,一個是etab ,主要記錄了 NFS 所分享出來的目錄的完整權限設定值;另一個xtab則記錄曾經連結到此NFS主機的相關客戶端資料。

 /var/lib/nfs/rmtab
 狀態文件,列出了掛接導出文件的遠程客戶機清單。
  

4.服務器端得應用及其規則

A安裝nfs軟件包yum list all|grep nfs

yum install nfs-utils.i386

B.啓動RPC服務:service portmap startportmap不需要設定,只要直接啓動就行,啓動之後,會出現一個port 111sunrpc的服務

  查看RPC服務的狀態service portmap status

rpcinfo -p localhost(查看當前主機的RPC狀態)

啓動nfs服務service nfs restart(開啓nfs服務)

chkconfig nfs on(將其加入開機自啓行列)

C編輯nfs的配置文件vi /etc/exports(默認爲空)

假設爲下面所示:

/var/guest 192.168.1.0/24(rw,async)

/var/ftp 192.168.0.0/24(rw,no_root_squash,sync)

保存退出!

注意下面是一些NFS共享的常用參數
  
 
ro: read-only
,只讀訪問權限

rw: read-write
,可讀寫的權限

sync:
資料同步寫入到內存與硬盤

async:
資料會先暫存於內存中,而非直接寫入硬盤(異步)

secure: NFS
通過1024以下的安全TCP/IP端口發送

insecure: NFS
通過1024以上的端口發送

wdelay:
如果多個客戶要寫入NFS目錄,則歸組寫入(默認)

no_wdelay:
如果多個客戶要寫入NFS目錄,則立即寫入,當使用async時,無需此設置。

hide:
NFS共享目錄中不共享其子目錄

no_hide:
共享NFS目錄的子目錄

subtree_check:
如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(默認)

no_subtree_check:
和上面相對,不檢查父目錄權限

no_all_squash:
保留共享文件的UIDGID(默認)
   
all_squash
  不論登入 NFS 的使用者身份爲何, 他的UIDGID映射匿名客戶anonymous(通常也就是 nobody(nfsnobody)),適合公用目錄。
      
root_squash 
  在登入NFS主機使用共享之目錄的使用者如果是root時,那麼這個使用者的權限將被映射成爲匿名使用者,通常他的 UID GID 都會變成nobody(nfsnobody) 那個系統帳號的身份的權限;uidgid0變爲65534.
      
no_root_squash         
  登入NFS主機使用共享目錄的使用者,如果是root的話,那麼對於這個共享的目錄來說,他就具有root的權限!這個項目『極不安全』,不建議使用!
      
anonuid=xxx:
指定NFS服務器/etc/passwd文件中匿名客戶的UID
      
anongid=xxx:
指定NFS服務器/etc/passwd文件中匿名客戶的GID

D.此時我們不需重啓服務,可以使用命令將其重新讀取:

exportfs –a 

注意-a :全部掛載(或卸載和-u連用時)/etc/exports文件內的設置
-r
重新掛載/etc/exports裏面的設置,此外,亦同步更新/etc/exports/var/lib/nfs/xtab 的內容!
-u
:卸載某一目錄
-v
:在export的時候,將分享的目錄顯示到屏幕上

exportfs -arv重新掛載一次 /etc/exports的設置

  exportfs –auv全部卸載

E 此時我們可以自己先檢查一下NFS服務器是否可以連接

 showmount –e localhost

  showmount -a localhost

注意: showmount [-ae] [hostname|IP]

-p :顯示出所有的 port porgram 的信息;

參數:
-a
:這個參數是一般在NFS 服務器上使用,是用來顯示已經掛載上本機nfs目錄的客戶機

-d:查看哪個目錄已被掛載到NFS 服務器上。(一般也在NFS 服務器上使用)
-e
:顯示主機的 /etc/exports 所共享的目錄

     

5.客戶端的配置及規則:

A當客戶端訪問服務器時我們需要首先建立掛載點

 Egmkdir  mnt

B.掛載共享目錄

mount -t  nfs 192.168.1.0:/var/ftp mnt/

C.此時我們可以切換到掛載目錄中查看共享目錄

showmount –e IP(服務器的ip地址)

cd mnt

ls

如果是root用戶,即可查看裏面的文件,但是隻讀權限(規定爲可讀可寫,爲何爲只讀呢?

Reason:因爲root_squash參數,沒有規定時,都將root用戶映射爲匿名用戶,將其uidgid0變爲65534,權限縮減。除非聲明聲明no_root_squashroot用戶登錄時纔可以保持共享目錄中規定的權限。修改如下:

/var/guest  192.168.1.0/24(rw, no_root_squashasync)

6.案例:

1.     假如說服務器上有個用戶natasha,並且他是/var/guest目錄的所有者,即將目錄的用戶和組都改爲natasha,假如natashauid2001,在客戶機上有個natashamary兩個用戶,但natashauid2000maryuid2001,此時natasha將無法登錄,而mary卻可以查看(原因很簡單,NFS是靠uidgid來識別用戶的身份的。)

2.     同一目錄針對不同範圍開放不同權限

   # vi /etc/exports
/home/public  192.168.0.0/24(rw)    *(ro)

即將主機與網域分爲兩段(用空格隔開)此時當客戶機處於192.168.0.0/24這個網段中時,針對這個被掛在的目錄就具有可讀可寫的權限;而其他網段的客戶機掛載目錄後就只有可讀權限。

3.     開放匿名登入的情況   

# vi /etc/exports

/home/linux  *.linux.org(rw,all_squash,anonuid=40,anongid=40)
#
如果要開放匿名,那麼重點是all_squash,並且要配合anonuid

 

test.linux.org 登入這部 NFS 主機,並且在 /home/linux 寫入文件時,該文件的所有人與所有羣組,就會變成/etc/passwd 裏面對應的UID40的那個身份的使用者

 

總結/etc/exports client的書寫規則

  (1)單個主機
  可以用短名及完全限定名(QFDN),或者用IP地址,例如student1student1.test.com.cn或者192.168.10.1

 

  (2)Net-Group
  可以列出/etc/netgroup文件中或NFS網組映射中定義的整組主機。網組名以@開頭。

  (3)通配符主機(*,?)
  .discuz.net *.  *.comsenz.com

*匹配零個或多個

:只匹配一個
  (4)掩碼
  192.168.1.0/255.255.255.0

               

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