相關概念:node
1、什麼是NFS(Network File System)即網絡文件系統。NFS 使用內核功能,因此內核須要支持NFS。linux
主要功能:經過網絡,讓不一樣的機器、不一樣的OS 能夠共享彼此的文件。vim
協議詳解請參考百度百科連接:http://baike.baidu.com/view/44349.htmcentos
2、什麼是RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。服務器
協議詳解請參考百度百科連接:http://baike.baidu.com/view/7287257.htm?fromId=32726&redirected=seachword網絡
主要功能:指定每一個NFS對應的 port number,並通知客戶端,讓客戶端能夠鏈接到正確的端口上。app
由於NFS服務必須使用RFC服務,因此稱之爲RPC Server的一種,另外NIS也屬於RPC Server。tcp
Server/client都要開啓RFC 服務。啓動NFS以前,RPC要先啓動,不然NFS會沒法向RPC註冊。工具
客戶端有NFS文件訪問需求時,向服務器的請求數據的流程:測試
一、客戶端向服務器端的RPC(Port 111) 發出NFS文件訪問功能。
二、服務器端找到對應的已註冊的 NFS daemon 端口後,會通知客戶端。
三、客戶端找到正確端口後,能夠直接與NFS daemon。
3、NFS Server 端的配置
一、所須要軟件
RPC主程序: rpcbind
NFS主程序: nfs-utils
[root@jone ~]# yum -y install rpcbind nfs-utils
二、NFS的軟件結構
主配置文件:/etc/exports
NFS文件系統維護命令:/usr/sbin/exportfs 共享 /etc/exports 更新的目錄資源、將NFS 共享的目錄卸載以及從新共享。
共享資源的日誌文件:/var/lib/nfs/*tab etab:記錄NFS共享目錄的完整權限設置值;另外一個xtab,記錄到鏈接到此NFS服務器的客戶端信息。
客戶端查詢服務器共享資源的命令:/usr/sbin/showmount
三、/etc/exports配置文件
[root@centos ~]# vi /etc/exports
/tmp 192.168.11.0/24(ro) *(rw)
*.ev.ncku.edu.tw(ro,sync)
[分享目錄] [第一部主機(權限)] [可用主機名] [可用通配符]
每一行最前面是要分享出來的目錄。是以目錄爲單位啊! 而後這個目錄能夠依照不一樣的權限分享給不一樣的主機,像鳥哥上面的 例子說明是: 要將 /tmp 分別分享給三個不一樣的主機或網域的意思。記得主機後面以小括號 () 設計權限參數, 若權限參數不止一個時,則以逗號 (,) 分開。且主機名與小括號是連在一塊兒的!在這個檔案內也能夠利用 # 來批註呢。
至於主機名的設定主要有幾個方式:
一、可使用完整的 IP 或者是網域,例如 192.168.100.10 或192.168.100.0/24 ,或 192.168.100.0/255.255.255.0 均可以接受! 不可使用 192.168.100.* 。
二、也可使用主機名,但這個主機名必需要在 /etc/hosts 內,或可以使用 DNS找到該名稱才行!反正重點是可找到 IP 就是了。若是是主機名的話,那麼能夠支持通配符,例如 * 或 ? 都可接受。
Exports文件中的權限參數
選項 說明
Ro 該主機對該共享目錄有隻讀權限
Rw 該主機對該共享目錄有讀寫權限
Root_squash 客戶機用root用戶訪問該共享文件夾時,將root用戶映射成匿名用戶
No_root_squash 客戶機用root訪問該共享文件夾時,不映射root用戶
All_squash 客戶機上的任何用戶訪問該共享目錄時都映射成匿名用戶
Anonuid 將客戶機上的用戶映射成指定的本地用戶ID的用戶
Anongid 將客戶機上的用戶映射成屬於指定的本地用戶組ID
Sync 資料同步寫入到內存與硬盤中
Async 資料會先暫存於內存中,而非直接寫入硬盤
Insecure 容許從這臺機器過來的非受權訪問
例題一:
讓 root 保留 root權限
答:[root@centos ~]# vi /etc/exports
/tmp *(rw,no_root_squash) 任何人均可以使用 /tmp,主機名可使用通配符處理,重點是no_root_squash。
例題二:同一目錄針對不一樣範圍開放不一樣權限
我要將一個公共的目錄 /home/public 公開出去,可是隻有限定個人局域網絡192.168.11.0/24 這個網域且加入 vbirdgroup 的用戶纔可以讀寫,其餘來源則只能讀取。
答:
[root@centos ~]# mkdir /home/public
[root@centos ~]# groupadd vbirdgroup例題三:僅給某個單一主機使用的目錄設定
我要將一個私人的目錄 /home/test 開放給 192.168.100.10 這個 Client 端的機器來使用時,該如何設定?假設使用者的身份是 dmtsai 才具備完整的權限時。
答:
[root@centos ~]# mkdir /home/test
[root@centos~]# setfacl -m u:dmtsai:rwx /home/test
[root@centos ~]# vim /etc/exports
/tmp *(rw,no_root_squash)
/home/public 192.168.11.0/24(rw) *(ro)
/home/test 192.168.11.173(rw)
# 只要設定 IP 正確便可!
這樣就設定完成了!並且,只有 192.168.11.173這部機器才能對 /home/test 這個目錄進行存取喔!
例題四:開放匿名登陸的狀況
我要讓 *.centos.vbird 網域的主機,登入個人 NFS 主機時,能夠存取 /home/linux ,可是他們存數據的時候,我但願他們的 UID 與 GID 都變成 45 這個身份的使用者,假設我 NFS 服務器上的 UID 45 與 GID 45 的用戶/組名爲 nfsanon。
答:
[root@centos~]# groupadd -g 45 nfsanon
[root@centos ~]# useradd -u 45 -g nfsanon nfsanon
[root@centos ~]# mkdir /home/linux
[root@centos ~]# setfacl -m u:nfsanon:rwx /home/linux
[root@centos ~]# vim /etc/exports
/tmp *(rw,no_root_squash)
/home/public 192.168.11.0/24(rw) *(ro)
/home/test 192.168.11.173(rw)
/home/linux *.centos.vbird(rw,all_squash,anonuid=45,anongid=45)
# 若是要開放匿名,那麼重點是 all_squash,而且要配合 anonuid 喔!
特別注意到那個 all_squash 與 anonuid, anongid 的功能!如此一來,當clientlinux.centos.vbird 登入這部 NFS 主機,而且在 /home/linux 寫入檔案時,該檔案的全部人與全部羣組,就會變成 /etc/passwd 裏面對應的 UID 爲 45 的那個身份的使用者了!
三、啓動NFS
/etc/init.d/rpcbind start
/etc/init.d/nfs start
/etc/init.d/nfslock start
查看NFS 開啓的端口
[root@centos ~]# netstat -tunlp | grep -E "(rpc|nfs)"
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1345/rpcbind
tcp 0 0 0.0.0.0:54000 0.0.0.0:* LISTEN 3034/rpc.mountd
tcp 0 0 0.0.0.0:60724 0.0.0.0:* LISTEN 1425/rpc.statd
tcp 0 0 0.0.0.0:58105 0.0.0.0:* LISTEN 3034/rpc.mountd
tcp 0 0 0.0.0.0:49257 0.0.0.0:* LISTEN 3034/rpc.mountd
tcp 0 0 :::111 :::* LISTEN 1345/rpcbind
tcp 0 0 :::57367 :::* LISTEN 1425/rpc.statd
tcp 0 0 :::59611 :::* LISTEN 3034/rpc.mountd
tcp 0 0 :::44958 :::* LISTEN 3034/rpc.mountd
tcp 0 0 :::55489 :::* LISTEN 3034/rpc.mountd
udp 0 0 0.0.0.0:111 0.0.0.0:* 1345/rpcbind
udp 0 0 0.0.0.0:753 0.0.0.0:* 1425/rpc.statd
udp 0 0 0.0.0.0:49675 0.0.0.0:* 3034/rpc.mountd
udp 0 0 0.0.0.0:39183 0.0.0.0:* 3034/rpc.mountd
udp 0 0 0.0.0.0:672 0.0.0.0:* 1345/rpcbind
udp 0 0 0.0.0.0:60470 0.0.0.0:* 1425/rpc.statd
udp 0 0 0.0.0.0:36158 0.0.0.0:* 3034/rpc.mountd
udp 0 0 :::49007 :::* 1425/rpc.statd
udp 0 0 :::111 :::* 1345/rpcbind
udp 0 0 :::672 :::* 1345/rpcbind
udp 0 0 :::34479 :::* 3034/rpc.mountd
udp 0 0 :::39476 :::* 3034/rpc.mountd
udp 0 0 :::40297 :::* 3034/rpc.mountd
主要的端口是:
rpcbind 啓動的 port 在 111 ,同時啓動在 UDP 與 TCP;
nfs 自己的服務啓動在 port 2049 上頭!
其餘 rpc.* 服務啓動的 port 則是隨機產生的,所以需向 port 111 註冊。
啓動nfs後又修改了/etc/exports,不用重啓該服務,使用exports命令便可:
Exports [-aruv]
-a 所有mount或umount文件/etc/exports中的內容
-r 從新mount文件/etc/exports中的共享內容
-u umount目錄
-v 在export的時候,將詳細的信息輸出到屏幕上
例:
[root@localhost ~]# exportfs –rv 所有從新export一次
[root@localhost ~]# exportfs –au 所有卸載
4、NFS 客戶端的設置
一、客戶端先rpcbind服務。
[root@jone ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
二、掃描NFS服務器目錄有那些,以及是否可用。
showmount –e 192.168.90.254 (服務器端IP)
三、客戶端創建掛載點目錄。
[root@jone ~]# mkdir -p /home/nfs/public/
四、使用mount 將服務器直接掛載到相關目錄。
mount -t nfs 192.168.90.254 :/home/public /home/nfs/public
五、查看是否掛載成功。
[root@jone ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
8.5G 1.7G 6.4G 21% /
tmpfs 246M 0 246M 0% /dev/shm
/dev/sda1 485M 32M 429M 7% /boot
192.168.90.254:/home/public
28G 790M 26G 3% /home/nfs/public
六、使用完畢以後可使用umount卸載
umount /home/nfs/pulic
PS:
一、用戶帳號。客戶端和服務器端的帳號不一致致使文件系統使用上的混亂,NFS比較大弊端。
二、NFS 服務器開放寫入權限(/etc/exports 設置有關)
三、文件權限具備可寫入(W)的權限。
常與NIS搭配使用。
自動掛載服務:autofs
創建主配置文件 /etc/auto.master
創建數據對應文件內(/etc/auto.nfs)的掛載信息與服務器對應的資源。
沒有測試成功,繼續測試。
鳥哥總結的重點,最好記住。
Network FileSystem (NFS) 可讓主機之間透過網絡分享彼此的檔案與目錄;
NFS 主要是透過 RPC 來進行 file share 的目的,因此 Server 與 Client的 RPC 必定要啓動才行!
NFS 的配置文件就是 /etc/exports 這個檔案;
NFS 的權限能夠觀察 /var/lib/nfs/etab,至於的重要登陸檔能夠參考 /var/lib/nfs/xtab 這個檔案,還包含至關多有用的信息在其中!
NFS 服務器與客戶端的使用者帳號名稱、UID 最好要一致,能夠避免權限錯亂:
NFS 服務器預設對客戶端的 root 進行權限壓縮,一般壓縮其成爲nfsnobody 或 nobody。
NFS 服務器在更動 /etc/exports 這個檔案以後,能夠透過 exportfs 這個 指令來從新掛載分享的目錄! 可使用 rpcinfo 來觀察 RPC program 之間的關係!!!
NFS 服務器在設定之初,就必需要考慮到 client 端登入的權限問題,不少時候沒法寫入或者沒法進行分享,主要是 Linux 實體檔案的權限設定問題所致!
NFS 客戶端能夠透過使用 showmount, mount 與 umount 來使用 NFS 主機提供的分享的目錄!
NFS 亦可使用掛載參數,如 bg, soft, rsize, wsize, nosuid, noexec, nodev 等參數, 來達到保護本身文件系統的目標!
本文主要內容來自:鳥哥的Linux私房菜服務器架設篇(第三版),這是一本很好的入門和工具書,有興趣的能夠查看。