文件共享系統之NFS

文件共享服務之NFS


一、基礎知識

        NFS:Network File System

    是在linux和unix系統上除了ftp外常用的文件共享服務的一種。

    藉助於RPC實現文件傳輸功能。

    經過二三十年的發展,已經非常成熟了,廣泛用於linux、unix,甚至windows和MAC都在極力支持NFS功用

NFS與http和ftp的區別:

①NFS發起的是一個函數的執行調用請求

    ftp和http發出的是一個資源調用請求

② NFS是映射掛載實現功能的

     ftp和http是通過應用程序的客戶端和服務器端交互實現功能的


RPC: Remote Procedure Call protocol包括遠程過程調用、函數調用(遠程主機上的函數)

一部分功能由本地程序完成

另一部分功能由遠程主機上的函數完成

過程與函數的區別:過程沒有返回值,函數有返回值

         wKiom1VRe76RDUsEAAEKBZIk55g632.jpg

重大尷尬:

    在遠程主機上存儲創建的文件屬主和屬組到底是誰?

    如果本地操作用戶有賬號,遠程主機沒有,怎麼算呢?

    root用戶都是0,那對遠程主機的控制權限就無限大了,遠程主機不安全。

    基於這種情況,sun公司就研發了NIS系統。

NIS: Network Information System 網絡信息系統

    作用:身份認證——集中於某服務器完成身份認證

    用戶登錄時,在login界面程序上輸入的帳號通過網絡發送給另外一個主機,由另外這臺用於集中存儲用戶帳號信息的服務器檢查帳號是否存在,如果存在,則通知用戶輸入密碼,密碼也打包發送給遠程主機,覈對密碼也正確後,於是用戶就可以登錄了。

    NIS也是明文的,因此一般只在局域網使用,而且NIS服務器成爲整個系統的單點故障所在。現在NIS已經很少應用了。

    現在用戶集中存儲一般是用ldap,並可以與cobblers結合。cobblers傳輸認證可以不傳輸敏感信息但完成用戶帳號密碼信息認證。這種認證方式是比較安全的


NFS: 僅支持基於IP的認證,而不能基於帳號和密碼的認證

     而且因爲是一個遠程調用服務,不是一個請求響應服務,所以自身沒辦法實現基於帳號的認證,即使是基於ip,也不能實現帳號密碼認證

     因此,遠程主機一般還須啓動一個守護進程moutd,用mountd控制哪些用戶可以憑帳號和密碼訪問。只有經過mountd認證後,纔會被髮給一個令牌通行證,才能憑令牌訪問遠程主機的文件系統。


nfs服務器需要同時啓動三個服務進程:nfsd, mountd, idmapd

nfsd:

管理共享文件系統的進程,監聽在 2049/tcp, 2049/udp。

mountd:

訪問帳號的控制進程,不是總所周知的程序,僅僅是nfs的輔助服務,而且是基於RPC運行的,因此其監聽端口是由本地的公共進程服務RPC代爲監聽的,其監聽端口是由RPC代爲隨機選擇一個未用的,是個半隨機端口模式。mountd的監聽端口號需要先向RPC詢問後得知

idmapd:

將遠程登錄的帳號映射爲本地的nobody,本地的nobody在遠程主機上映射爲響應的屬主和屬組。原理是通過UID號來對應的,與名字無關,即只要UID號是同一個,即將遠程操作用戶映射爲本地這個UID號用戶。

wKiom1VRe_qQodzmAAHUOHWglKw919.jpg

RPC服務:portmapper

rpcinfo: report RPC information

查看命令:# rpcinfo -p [host]

host:可以是本地主機,也可以是遠程某個主機。默認是本地主機

探測某個主機上portmapper服務是否正常工作,監聽在哪個端口上,而且有哪些服務註冊使用RPC服務

[root@aunt-s ~]# rpcinfo -p 172.16.20.150    (遠程主機)

  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  58704  status

   100024    1   tcp  43182  status

[root@aunt-s ~]# 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  59481  status

   100024    1   tcp  40707  status

涉及的程序包:

啓動服務的程序包爲nfs-utils,教室centos6默認是安裝上的,最小化安裝沒有安裝這個程序組;

這一個rpm包提供多種功能程序

服務器端是在內核中的,不需要再安裝,只需啓動模塊就性。

[root@aunt-s ~]# rpm -q nfs-utils

nfs-utils-1.2.3-54.el6.x86_64

[root@aunt-s ~]# rpm -ql nfs-utils

/etc/nfsmount.conf

/etc/rc.d/init.d/nfs

/etc/rc.d/init.d/nfslock

/etc/rc.d/init.d/rpcgssd

/etc/rc.d/init.d/rpcidmapd

/etc/rc.d/init.d/rpcsvcgssd

/etc/request-key.d/id_resolver.conf

/etc/sysconfig/nfs

/sbin/mount.nfs 掛載nfs4以前版本的命令

/sbin/mount.nfs4 掛載nfs4版本的命令

/sbin/nfs_cache_getent

/sbin/rpc.statd

/sbin/umount.nfs  卸載nfs4以前版本的命令

/sbin/umount.nfs4 卸載nfs4版本的命令

/usr/sbin/exportfs

/usr/sbin/mountstats

/usr/sbin/nfsidmap

/usr/sbin/nfsiostat

/usr/sbin/nfsstat

/usr/sbin/rpc.gssd

/usr/sbin/rpc.idmapd  服務器端關鍵的要啓動的三個服務

/usr/sbin/rpc.mountd

/usr/sbin/rpc.nfsd

/usr/sbin/rpc.svcgssd

/usr/sbin/rpcdebug

/usr/sbin/showmount

/usr/sbin/sm-notify

/usr/sbin/start-statd

wKiom1VRfIiB1ZFQAAVn10AS6Vg196.jpg

wKiom1VRfJGDL5pZAAJJKt4nDtQ225.jpg



二、 服務器端需要操作的過程:

1、查看有沒有安裝程序包

[root@kingdom ~]# rpm -q nfs-utils

nfs-utils-1.2.3-54.el6.x86_64

如果是xxx is not installed,則需要安裝一下

2、查看安裝生成的文件

[root@kingdom ~]# rpm -ql nfs-utils

3、配置服務並啓動

[root@kingdom ~]# chkconfig | grep nfs

nfs             0:off 1:off 2:off 3:off 4:off 5:off 6:off

nfslock         0:off 1:off 2:off 3:on 4:on 5:on 6:off

[root@kingdom ~]# chkconfig nfs on

[root@kingdom ~]# chkconfig | grep nfs

nfs             0:off 1:off 2:on 3:on 4:on 5:on 6:off

nfslock         0:off 1:off 2:off 3:on 4:on 5:on 6:off

[root@kingdom ~]# service nfs start

Starting NFS services:           [  OK  ]

Starting NFS quotas:             [  OK  ]  這個是允許客戶端使用磁盤塊大小的控制程序

Starting NFS mountd:             [  OK  ]

Starting NFS daemon:             [  OK  ]

Starting RPC idmapd:             [  OK  ]

4、查看啓用的端口

[root@kingdom ~]# rpcinfo -p

5、查看man手冊熟悉/etc/exports文件的配置使用,並設置好

wKioL1VRflmBwldAAAErYzKwVBI099.jpg

/etc/exports文件基本配置格式:

文件系統 客戶端(選項)<空格>客戶端(選項)

 客戶端:IP、FQDN或DOMAIN、NETWORK

IP:長格式、短格式都可以,如172.16.20.110/16、172.16.20.100/255.255.0.0

可使用通配符:* (任意長度的任意字符)、?(任意單個字符)

        選項:多個選項之間用逗號隔開,常用的有:

    ⑴secure: 

這個選項是缺省選項,它使用了 1024 以下的 TCP/IP 端口實現 NFS 的連接。指定 insecure 可以禁用這個選項。

    ⑵rw: 

這個選項允許 NFS 客戶機進行讀/寫訪問。缺省選項是隻讀的。

    ⑶async: 

這個選項是缺省選項,可以改進性能,但是如果沒有完全關閉 NFS 守護進程就重新啓動了 NFS 服務器,這也可能會造成數據丟失。

    ⑷no_wdelay: 

這個選項關閉寫延時。如果設置了 async,那麼 NFS 就會忽略這個選項。

    ⑸nohide: 

如果將一個目錄掛載到另外一個目錄之上,那麼原來的目錄通常就被隱藏起來或看起來像空的一樣。要禁用這種行爲,需啓用 hide 選項。

    ⑹no_subtree_check: 

這個選項關閉子樹檢查,子樹檢查會執行一些不想忽略的安全性檢查。缺省選項是啓用子樹檢查。

    ⑺no_auth_nlm: 

這個選項也可以作爲 insecure_locks 指定,它告訴 NFS 守護進程不要對加鎖請求進行認證。如果關心安全性問題,就要避免使用這個選項。缺省選項是 auth_nlm 或 secure_locks。

    ⑻mp (mountpoint=path): 

通過顯式地聲明這個選項,NFS 要求掛載所導出的目錄。

    ⑼fsid=num: 

這個選項通常都在 NFS 故障恢復的情況中使用。如果希望實現 NFS 的故障恢復,請參考 NFS 文檔。

    ⑽root_squash: 

這個選項不允許 root 用戶訪問掛載上來的 NFS 卷。

    ⑾no_root_squash: 

這個選項允許 root 用戶訪問掛載上來的 NFS 卷。

    ⑿all_squash: 

這個選項對於公共訪問的 NFS 捲來說非常有用,它會限制所有的 UID 和 GID,只使用匿名用戶。缺省設置是 no_all_squash。

    ⒀anonuid 和 anongid: 

這兩個選項將匿名 UID 和 GID 修改成特定用戶和組帳號。

EXAMPLE

 # sample /etc/exports file

 /               master(rw) trusty(rw,no_root_squash)

 /projects       proj*.local.domain(rw)

 /usr            *.local.domain(ro) @trusted(rw)

 /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)

 /pub            *(ro,insecure,all_squash)

 /srv/www        -sync,rw server @trusted @external(ro)

 /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)

 /build          buildhost[0-9].local.domain(rw)


6、配置好共享的內容,並安全導出

專用工具:# exportfs

export -ar: 重新導出所有的文件系統,已連接的不會被打斷;添加或修改後也用這個選項重新安全導出

export -au: 關閉導出的所有文件系統

export -u FS: 關閉指定的導出的文件系統

7、查看導出成功與否

[root@kingdom nfs]# showmount -e 172.16.20.150

Export list for 172.16.20.150:

/share/nfs 172.16.250.148,172.16.20.110

wKiom1VRfP6jtyj6AAMlyNon_9k071.jpg

三、客戶端使用過程:


1、查看NFS服務器端共享的文件系統:

# showmount -e NFSSERVER_IP

例如: # showmount -e 172.16.20.150

(如果沒有這個程序,需要先安裝showmount)

[root@aunt-s vusers_conf]# showmount -e 172.16.20.150

Export list for 172.16.20.150:

/share/nfs 172.16.250.148,172.16.20.110


2、掛載NFS文件系統:

2.1 先查看本地主機是否啓動兩個守護進程:

rpcbind

rpc.statd

[root@aunt-s mnt]# ss -tnlp | grep rpc

LISTEN     0      128                       *:54418                    *:*      users:(("rpc.statd",1390,9))

LISTEN     0      128                      :::43571                   :::*      users:(("rpc.statd",1390,11))

LISTEN     0      128                      :::111                     :::*      users:(("rpcbind",1339,11))

LISTEN     0      128                       *:111                      *:*      users:(("rpcbind",1339,8))

2.2 掛載

mount -t nfs SERVER:/path/to/sharedfs  /path/to/mount_point

例如: # mount -t nfs 172.16.20.150:/share/nfs   /mnt

將遠程主機172.16.20.150上的/share/nfs掛載到本地的/mnt目錄下使用,然後可以直接查看使用了,就如新加了一個分區一樣。

wKiom1VRfRvDpmqjAAYkHBFSvDc232.jpg

wKiom1VRfWDAfd6rAAErPwuQmKY926.jpg

3、開機自動掛載nfs設置: 

/etc/fstab

SERVER:/PATH/TO/EXPORTED_FS   /mount_point nfs defaults,_netdev 0 0

掛載選項設置:

⑴defaults

⑵_netdev:當遠程共享主機不在線時,允許我們開機時系統等待一個時長後就不再試圖掛載後繼續啓動,如果沒有這個選項,系統將一直等待直到掛載成功。

⑶rsize 的值是從服務器讀取的字節數。

⑷wsize 是寫入到服務器的字節數。默認都是1024, 如果使用比較高的值,如8192,可以提高傳輸速度,但斷電時丟失的數據也可能越大

⑸timeo:超時時長,單位爲十分之一秒,當PRC時間超時時,主機會先等待這個timeo設定的時長,然後再發送重新傳送請求。每重試一次,timeo都加倍,直到達到設置的最大超時時間或者60秒。對於速度慢或者繁忙的nfs主機,增加這個值能改善掛載使用的體驗。

⑹intr:允許在對掛載的遠程nfs文件操作超時時發送打斷信號,如關閉等

wKiom1VRfUDTXsyNAALxaKnKXpc723.jpg

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