兄弟連Linux(二十三)--NFS服務
1、NFS簡介
1.1 什麼是NFS
NFS(Network File System) 配置簡單許可權不太明確
NFS可以讓客戶端把伺服器的共享目錄掛載到本機使用,就想使用本機分割槽一樣,使用非常方便。
1.2 RPC(遠端呼叫)服務
NFC是被RPC服務管理的,所以必須安裝RPC的主程式rpcbind
1.3 NFS埠
NFS埠:2049
RPC埠:111
NFS daemon埠:隨機
1.4 和其他檔案伺服器對比(SFU)
服務名稱 |
適用範圍 |
伺服器端 |
客戶端 |
侷限性 |
FTP |
內網和公網 |
Windows、Linux |
Windows、Linux |
無法直接在伺服器端修改資料 |
Samba |
內網 |
Windows、Linux |
Windows、Linux |
只能在內網使用 |
NFS |
內網和公網 |
Linux |
Linux(Windows) |
客戶端需要掛載使用,對普通使用者有一定的技術要求 |
2、NFS許可權說明
2.1 許可權說明
Linux系統目錄許可權會生效
NFS服務共享許可權也會生效
2.2 使用者身份對映(系統許可權)
NFS沒有使用者登入認證機制,所以客戶端登入到伺服器後,會把客戶端的身份對映到伺服器端,就會出現四種可能。
2.3 第一種可能
client和server上剛好有相同的賬號和使用者組(使用者名稱和UID都要相同)
client上使用者可以再server上按照使用者許可權使用檔案
2.4 第二種可能
當client和server上擁有相同的UID,但是使用者名稱不同
假設client上有使用者aa(UID:500),server上有使用者bb(UID:500)。在client在使用server共享目錄是,身份識別為bb(因為LInxu許可權繫結在UID上)
此種情況儘量避免出現,容易邏輯混亂
2.5 第三種可能
server上沒有client的UID
client使用者訪問server時,server上沒有此UID,則把此使用者自動轉變為nfsnobody(UID:65534)使用者
2.6 第四種可能
client上是root使用共享
預設把roor也轉變為nfsnobody,伺服器端可以修改配置檔案,允許root訪問nfs伺服器
3、NFS伺服器端設定
3.1 伺服器端安裝
預設已安裝,如需手動安裝
NFS主程式:nfs-utils
RPC主程式:rpcbind(舊版本 portmap)
3.2 相關檔案
配置檔案 /etc/exports
3.3 伺服器端管理
預設已啟動,如需手動啟動
$ service nfs start
$ service rpcbind start
3.4 守護程序
$ ps aux | grep -E “nfs|rpc”
rpc.rquotad NFS配額
rpc.mountd 處理客戶端掛載
nfsd NFS守護程序
rpcbind RPC守護程序
3.5 RPC服務註冊情況
$ rpcinfo –p IP或主機名
4、NFS伺服器端配置檔案
4.1 配置檔案
/etc/exports
共享目錄 客戶端(許可權)
4.2 可識別的客戶端
指定IP 192.168.44.4
指定網段 192.168.44.0/24 192.168.44.0/255.255.255.0
指定主機名 www.itxdl.cn
所有主機 *
4.3 常用許可權
rw 讀寫
ro 只讀
all_squash 不論登入是誰,都壓縮為匿名使用者nfsnobody
root_squash 如果登入的是root,壓縮為nfsnobody
no_root_squash 允許root身份登入,不推薦
anonuid 把所有的登入使用者,不再壓縮為nfsnobody使用者,而是壓縮為指定uid使用者
sync 將資料同步寫入記憶體緩衝區與磁碟中,效率低,但可以保證資料的一致性
async 將資料先儲存在記憶體緩衝區中,必要時才寫入磁碟
4.4 舉例1
任何人可以訪問,允許root訪問
$ vi /etc/exports
/home/test *(rw,no_root_squash)
4.5 舉例2
同時共享多個目錄
$ vi /etc/exports
/home/test 192.168.44.3(rw,no_root_squash) *(ro)
/home/soft 192.168.44.0/24(rw)
4.6 舉例3
匿名使用者訪問
$ vi /etc/exports
/home/soft 192.168.44.0/24(rw,all_squash,anonuid=600)
4.7 常用命令
$ exportfs 選項
-a 按照配置檔案掛載/解除安裝所有目錄
-r 重新掛載
-u 解除安裝
-v 顯示詳細資訊
4.8 exportfs舉例
$ exportfs -arv 重新掛載所有目錄,不用重啟NFS服務
$ exportfs -auv 全部解除安裝所有目錄
4.9 showmount命令
shoumount檢視共享目錄
$ shoumount –e IP或主機名
-e 產看某個主機的共享目錄
5、NFS客戶端使用
5.1 客戶端需要啟動的服務
需要啟動rpcbind,預設已經啟動
手工啟動命令
$ service rpcbind start
5.2 檢視伺服器端共享目錄
$ showmount -e 192.168.44.3 指定伺服器端IP即可
5.3 把伺服器共享目錄掛載到本地
$ mkdir /home/client 建立掛載點
$ mount –t nfs 192.168.44.3:/home/soft /home/client 掛在到本地使用
$ mount 檢視掛載
5.4 解除安裝
$ umount /home/client
5.5 開機自動掛載
$ vi /etc/fstab 192.168.44.2:/home/test /home/client nfs defaults 0 0
6、許可權實驗
6.1 第一種可能
client和server上剛好有相同的賬號和使用者組(使用者組名和UID都要相同)
client上使用者可以再server上按照使用者許可權使用檔案
伺服器
$ useradd –u 600 test1
$ passwd test1
客戶端
一樣的使用者與UID
$ su - test1
$ cd /home/test
$ touch cde
$ ll cde
-rw-rw-r--1 test1 test1 0 11月 14 2016 cde
6.2 第二種可能
當client和server上擁有相同過的UID,但是使用者民不同
假設client上有使用者aa(UID:500),server上有使用者bb(UID:500)。在client在使用server共享目錄時,身份識別為bb(因為Linux許可權繫結在UID上)
此種情況儘量避免出現,容易邏輯混亂
伺服器端
使用者名稱:test1 UID:600
客戶端
$ useradd -u 600 user1
$ su - user1
$ cd /home/test
$ touch def
$ ll def
-rw-rw-r-- 1 user1 user1 0 11月 14 2016 def
伺服器端
$ ll /tmp/def
-rw-rw-r-- 1 test1 test1 0 11月14 05:40 /tmp/def
6.3 第三種可能
server上沒有client的UID
client使用者訪問server時,server上沒有此UID,則把此使用者自動轉變為nfsnobody(UID:65534)使用者
伺服器端
沒有UID為700的使用者
客戶端
$ useradd -u 700 test2
$ touch qwe
$ ll qwe
-rw-rw-r-- 1 nobody nobody 0 11月14 2016 qwe
6.4 第四種可能
client上是root使用共享
預設把root也轉換為nfsnobody。伺服器端可以修改配置檔案,允許root訪問nfs伺服器
伺服器端
不允許root訪問
客戶端
$ cd /home/test
$ touch asd
$ ll asd
-rw-r--r-- 1 nfsnobody nfsnobody 0 1月14 2016 asd
伺服器端
允許root訪問
$ vi /etc/exports
/tmp 192.168.44.4(rw,no_root_squash)
$ exportfs -auv
$ exportfs -arv
客戶端
$ cd /home/test
$ touch zxc
$ ll zxc
-rw-r--r-- 1 root root 0 11月14 2016 zxc