CentOS 6.4下架設NFS服務器

NFS是NetworkFileSystem的縮寫,它最大的功能是可以通過網絡讓不同的機器、不同的操作系統可以分享個別的文件。這個NFS服務器可以讓那你的PC來將網絡遠程的NFS服務器分享的目錄,掛載到本地端的機器當中,在本地端的機器看起來,那個遠程主機的目錄就好像是自己的一個磁盤分區。

162831845.jpg

基本上NFS這個服務的端口開在2049,但是由於文件系統非常複雜,因此NFS還有其他的程序去啓動額外的端口,預設NFS用來傳輸的端口是隨機選擇小於1024以下的端口來使用的。客戶端要遠程調用(RemoteProcedureCall,RPC)的協議來輔助。

RPC最主要的功能就是在指定每個NFS功能所對應的portnumber,並且回報給客戶端,讓客戶端可以連接到正確的端口上去。服務器在啓動NFS時,會隨機取用數個端口,並主動向RPC註冊,因此RPC可以知道每個端口對應的NFS功能,然後RPC又是固定使用port111來監聽客戶端的需求並回報客戶端正確的端口。

注:要啓動NFS之前,RPC就要先啓動了,否則NFS會無法向RPC註冊。另外,RPC若重新啓動時,原本註冊的數據會不見,因此RPC重新啓動後,它管理的所有服務都需要重新啓動來重新向RPC註冊。

客戶端有NFS文件存取需求時,向服務器端要求數據的流程:

1.客戶端會向服務器端的RPC(port111)發出NFS文件存取功能的詢問要求;
2.服務器端找到對應的已註冊的NFSdaemon端口後,會回報給客戶端;
3.客戶端了解正確的端口後,就可以直接與NFSdaemon來聯機。

NFS啓動的RPCdaemons

rpc.nfsd:這個daemon主要的功能就是在管理客戶端是否能夠使用服務器文件系統掛載信息等,其中還包含這個登陸者的ID的判別

rpc.mountd:這個daemon主要的功能,則是在管理NFS的文件系統哩!當客戶端順利的通過rpc.nfsd而登入服務器之後,在他可以使用NFS服務器提供的檔案之前,還會經過檔案權限(就是那個-rwxrwxrwx與owner,group那幾個權限啦)的認證程序!他會去讀NFS的配置文件/etc/exports來比對客戶端的權限,當通過這一關之後客戶端就可以取得使用NFS檔案的權限啦!(注:這個也是我們用來管理NFS分享之目錄的權限與安全設定的地方哩!)

NFS的文件訪問權限:

客戶端以NFS取用服務器端的文件系統時,還得具有

1NFS服務器有開放可寫入的權限(與/etc/exports設定有關)

2實際的文件權限具有可寫入的權限。

NFSServer端設定

所需軟件:

RPC主程序:rpcbind

NFS主程序:nfs-utils

[root@centos ~]# yum install rpcbind
[root@centos ~]# yum install nfs-utils

NFS配置文件:

主要配置文件:/etc/exports

NFS文件系統維護指令:/usr/sbin/exportfs

分享資源的登錄文件:/var/lib/nfs/*tab

客戶端查詢服務器分享資源的指令:/usr/sbin/showmount

[root@www ~]# vim /etc/exports /tmp 192.168.100.0/24(ro) localhost(rw) *.ev.ncku.edu.tw(ro,sync) [分享目錄] [第一部主機(權限)] [可用主機名] [可用通配符]

要將/tmp分別分享給三個不同的主機或網域的意思。記得主機後面以小括號()設計權限參數,若權限參數不止一個時,則以逗號(,)分開。且主機名與小括號是連在一起的喔!在這個檔案內也可以利用#來批註呢。

想將/tmp分享出去給大家使用,由於這個目錄本來就是大家都可以讀寫的,因此想讓所有的人都可以存取,要讓root寫入的檔案還是具有root的權限

[root@centos ~]# vim /etc/exports
# 任何人都可以用我的 /tmp ,用通配符來處理主機名,重點在no_root_squash
/tmp  *(rw,no_root_squash)

啓動rpc、nfs服務

[root@centos ~]# service rpcbind start
Starting rpcbind: [  OK  ]
[root@centos ~]# service nfs start
Starting NFS services:  [  OK  ]
Starting NFS mountd: [  OK  ]
Starting NFS daemon: [  OK  ]

查看開放端口

[root@centos ~]# netstat -plunt | grep -E '(rpc|nfs)'
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      6023/rpcbind
tcp        0      0 0.0.0.0:52528               0.0.0.0:*                   LISTEN      6069/rpc.mountd
tcp        0      0 0.0.0.0:54929               0.0.0.0:*                   LISTEN      6069/rpc.mountd
tcp        0      0 0.0.0.0:34879               0.0.0.0:*                   LISTEN      6069/rpc.mountd
tcp        0      0 :::35502                    :::*                        LISTEN      6069/rpc.mountd
tcp        0      0 :::111                      :::*                        LISTEN      6023/rpcbind
tcp        0      0 :::60977                    :::*                        LISTEN      6069/rpc.mountd
tcp        0      0 :::39008                    :::*                        LISTEN      6069/rpc.mountd
udp        0      0 0.0.0.0:37102               0.0.0.0:*                               6069/rpc.mountd
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               6023/rpcbind
udp        0      0 0.0.0.0:36248               0.0.0.0:*                               6069/rpc.mountd
udp        0      0 0.0.0.0:57902               0.0.0.0:*                               6069/rpc.mountd
udp        0      0 0.0.0.0:686                 0.0.0.0:*                               6023/rpcbind
udp        0      0 :::111                      :::*                                    6023/rpcbind
udp        0      0 :::34965                    :::*                                    6069/rpc.mountd
udp        0      0 :::686                      :::*                                    6023/rpcbind
udp        0      0 :::42044                    :::*                                    6069/rpc.mountd
udp        0      0 :::36419                    :::*                                    6069/rpc.mountd

查看每個RPC服務的註冊狀況

[root@www ~]# rpcinfo -p [IP|hostname]
[root@www ~]# rpcinfo -t|-u IP|hostname 程序名稱
選項與參數:
-p :針對某 IP (未寫則預設爲本機) 顯示出所有的 port 與 porgram 的信息;
-t :針對某主機的某支程序檢查其 TCP 封包所在的軟件版本;
-u :針對某主機的某支程序檢查其 UDP 封包所在的軟件版本;

顯示出目前這部主機的RPC狀態

[root@centos ~]# 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
100005    1   udp  37102  mountd
100005    1   tcp  34879  mountd
100005    2   udp  57902  mountd
100005    2   tcp  52528  mountd
100005    3   udp  36248  mountd
100005    3   tcp  54929  mountd
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100227    2   tcp   2049  nfs_acl
100227    3   tcp   2049  nfs_acl
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100227    2   udp   2049  nfs_acl
100227    3   udp   2049  nfs_acl
100021    1   udp  38908  nlockmgr
100021    3   udp  38908  nlockmgr
100021    4   udp  38908  nlockmgr
100021    1   tcp  56488  nlockmgr
100021    3   tcp  56488  nlockmgr
100021    4   tcp  56488  nlockmgr

檢查nfs這個程序相關軟件版本信息(僅查看TCP)

[root@centos ~]# rpcinfo -t localhost nfs
program 100003 version 2 ready and waiting
program 100003 version 3 ready and waiting
program 100003 version 4 ready and waiting

NFS的聯機查看

[root@www ~]# showmount [-ae] [hostname|IP]
選項與參數:
-a :顯示目前主機與客戶端的 NFS 聯機分享的狀態;
-e :顯示某部主機的 /etc/exports 所分享的目錄數據。

查看設定好的相關exports分享目錄信息

[root@centos ~]# showmount -e localhost
Export list for localhost:
/tmp *

當你要掃瞄某一部主機他提供的NFS分享的目錄時,就使用showmount-eIP(或hostname)即可

NFS關於目錄權限設定的數據非常之多,在/etc/exports只是比較特別的權限參數而已,還有很多預設參數呢!這些預設參數在哪?我們可以檢查一下/var/lib/nfs/etab就知道了

[root@centos ~]# tail /var/lib/nfs/etab
/tmp    *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

重新編輯/etc/exports文件,不需要重啓nfs!如果重新啓動nfs的話,要得再向RPC註冊!我們可以通過exportfs這個指令

[root@www ~]# exportfs [-aruv]
選項與參數:
-a :全部掛載(或卸除) /etc/exports 檔案內的設定
-r :重新掛載 /etc/exports 裏面的設定,此外,亦同步更新 /etc/exports 及 /var/lib/nfs/xtab 的內容!
-u :卸除某一目錄
-v :在 export 的時候,將分享的目錄顯示到屏幕上!

NFS客戶端的設定

手動掛載NFS服務器分享的資源

所需軟件:

[root@centos ~]# yum install rpcbind
#啓動rpcbind服務
[root@centos ~]# service rpcbind start
#查詢服務器提供哪些資源
[root@centos ~]# showmount -e 192.168.246.23
Export list for 192.168.246.23:
/tmp *

建立掛載點

[root@centos ~]# mkdir -p /home/nfs/
[root@centos ~]# mount -t nfs 192.168.246.23:/tmp  /home/nfs/
[root@centos ~]# df -Th
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda2     ext4    193G   24G  159G  14% /
tmpfs        tmpfs    1.9G  904K  1.9G   1% /dev/shm
/dev/sda1     ext4    194M   48M  137M  26% /boot
/dev/sda3     ext4    145G  188M  137G   1% /home
192.168.246.23:/tmp
nfs     97G  9.6G   82G  11% /home/nfs

至此,最簡單的NFS掛載共享就完成了!

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