溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Ubuntu16.04搭建NFS 文件共享服務(wù)器的方法

發(fā)布時(shí)間:2020-10-22 05:20:06 來源:腳本之家 閱讀:197 作者:rollingstarky 欄目:服務(wù)器

NFS網(wǎng)絡(luò)文件系統(tǒng) (Network File System),是一種 分布式 文件系統(tǒng)協(xié)議,該協(xié)議允許客戶端主機(jī)可以像訪問本地文件系統(tǒng)一樣通過網(wǎng)絡(luò)訪問服務(wù)器端文件,即可以將遠(yuǎn)程服務(wù)器文件直接 mount掛載 )到本地的文件目錄結(jié)構(gòu)中進(jìn)行訪問。

一、軟件安裝

服務(wù)器端需要安裝 nfs-kernel-server 軟件包:

$ sudo apt-get update 
$ sudo apt-get install nfs-kernel-server

二、服務(wù)器配置

默認(rèn)情況下,NFS 服務(wù)器上定義了某個(gè)共享目錄,則該目錄及其子目錄下的所有文件都可被訪問。

出于對(duì)安全的考慮,客戶端任何需要 超級(jí)用戶 (即 root 用戶,UID=0 & GID=0)權(quán)限的文件操作都默認(rèn)映射到 UID=65534 和 GID=65534 的用戶,即 Ubuntu 系統(tǒng)中的 nobody:nogroup。

例如客戶端使用 root 權(quán)限在掛載的共享目錄中創(chuàng)建文件時(shí),該文件的 屬主屬組 自動(dòng)變?yōu)?nobody:nogroup ,而非 root:root

1. 在服務(wù)器端創(chuàng)建共享目錄

sudo mkdir -p /var/nfs/gernel 
sudo mkdir -p /var/nfs/public 
sudo chown nobody:nogroup /var/nfs/gernel

2. 修改 exports 文件

為了使 NFS 服務(wù)器定義的共享文件可被指定的客戶端主機(jī)訪問,需要在服務(wù)器端的 /etc/exports 文件中添加對(duì)應(yīng)的記錄。

該文件的格式如下:

Directory Host(Options ...) Host(Options) #comment 關(guān)于 /etc/exports 文件的詳細(xì)語法格式可參考 man exports 。

文件示例:

/var/nfs/gernel 192.168.56.0/24(rw,insecure,sync,no_subtree_check)
/var/nfs/public *(ro,insecure,sync,no_subtree_check)
/home/starky 192.168.56.1(rw,insecure,no_root_squash,sync,no_subtree_check)

第一條紀(jì)錄表示 192.168.56.0/24 子網(wǎng) 中的所有主機(jī)都可掛載 var/nfs/gernel 目錄并擁有讀寫( rw )權(quán)限

第二條紀(jì)錄表示 所有 主機(jī)都可掛載 /var/nfs/public 目錄且擁有 只讀ro )權(quán)限

第三條紀(jì)錄表示客戶端 IP 地址為 192.168.56.1 的主機(jī)可以掛載 /home/starky 目錄并擁有 讀寫 權(quán)限,而且任何 root 權(quán)限(UID=0 , GID=0)的文件操作都不默認(rèn)映射給 nobody:nogroup,而保持屬主(組)仍為 root( no_root_squash

insecure選項(xiàng):允許通過任意端口的遠(yuǎn)程訪問

sync選項(xiàng):強(qiáng)制 NFS 服務(wù)器在響應(yīng)請(qǐng)求之前將文件的改動(dòng)寫入磁盤(強(qiáng)調(diào)客戶端和服務(wù)端文件內(nèi)容的一致性,但會(huì)降低文件操作的效率)。

no_subtree_check選項(xiàng):禁用 subtree_check 。subtree_check 用來設(shè)置服務(wù)器在收到請(qǐng)求時(shí),檢查該文件是否在指定目錄結(jié)構(gòu)中依舊可用(該選項(xiàng)會(huì)在某些情況下發(fā)生錯(cuò)誤:重命名某文件的同時(shí),該文件在客戶端打開)。

三、客戶端掛載共享目錄

列出 nfs 服務(wù)器上的共享目錄

$ showmount -e 192.168.56.102
Exports list on 192.168.56.102:
/home/starky            192.168.56.1
/var/nfs/public           *
/var/nfs/gernel           192.168.56.0/24

創(chuàng)建掛載點(diǎn)

sudo mkdir -p /mnt/nfs/gernel 
sudo mkdir -p /mnt/nfs/public 
sudo mkdir -p /mnt/nfs/starky

掛載遠(yuǎn)程目錄

sudo mount 192.168.56.102:/var/nfs/gernel /mnt/nfs/gernel 
sudo mount 192.168.56.102:/var/nfs/public /mnt/nfs/public 
sudo mount 192.168.56.102:/home/starky /mnt/nfs/starky

權(quán)限測(cè)試

如截圖所示:

Ubuntu16.04搭建NFS 文件共享服務(wù)器的方法

nfs 權(quán)限測(cè)試

NFS 的權(quán)限設(shè)定基于 Linux 文件系統(tǒng)的權(quán)限管理,即客戶端掛載遠(yuǎn)程共享目錄后,會(huì)把它們當(dāng)成本地磁盤目錄一樣對(duì)待,也是根據(jù)文件的屬主(組)及其對(duì)應(yīng)的權(quán)限設(shè)定來限制訪問。

gernel 目錄的屬主(組)為 nobody:nogroup(65534:65534),所以雖然該目錄為讀寫權(quán)限,非 root 用戶無法執(zhí)行新建操作。而 root 用戶由于 NFS 默認(rèn)的安全機(jī)制,會(huì)自動(dòng)映射到 nobody:nogroup。

由于我在客戶端和服務(wù)端都有一個(gè)名為 starky 的用戶,且它們的 UID:GID 都為1000:1000,所以服務(wù)端的 /home/starky 目錄可以直接被客戶端的 starky 用戶訪問。且由于 no_root_squash 選項(xiàng),通過 sudo 命令創(chuàng)建的文件其屬主仍為 root(而不會(huì)再映射為 nobody)。

當(dāng)然這會(huì)導(dǎo)致一些安全問題,比如多個(gè)客戶端同時(shí)都有 UID(GID)為1000的用戶(不管用戶名是什么),則這些用戶會(huì)共享服務(wù)端 /home/starky 目錄里的文件權(quán)限。

四、系統(tǒng)啟動(dòng)時(shí)自動(dòng)掛載共享目錄

可編輯 /etc/fstab 文件令掛載共享目錄的 mount 操作成為系統(tǒng)的固定配置(手動(dòng)輸入的 mount 命令屬于臨時(shí)掛載,重啟會(huì)自動(dòng)卸載),使得系統(tǒng)重啟后可以自動(dòng)掛載遠(yuǎn)程文件系統(tǒng)。 /etc/fstab 文件的示例內(nèi)容如下:

# filesystem          mountpoint    fstype flags            dump  fsck
192.168.56.102:/var/nfs/gernel /mnt/nfs/gernel nfs   rw,bg,intr,hard,nodev,nosuid 0    0
192.168.56.102:/var/nfs/public /mnt/nfs/public nfs4  ro,bg,intr,soft,nodev,nosuid 0    0
192.168.56.102:/home/starky   /mnt/nfs/starky nfs   rw,bg,intr,hard,nodev,nosuid 0    0
附錄:

附錄:

1. /etc/exports 文件中的 Host 格式

/etc/exports 文件的格式為: Directory Host(Options ...) Host(Options) #comment

其中的 Host 項(xiàng)用來指定可訪問對(duì)應(yīng)共享目錄的主機(jī),其格式可分為以下幾種:

單個(gè)主機(jī)

Host 項(xiàng)可以為一個(gè)或多個(gè)單獨(dú)的 TCP/IP 主機(jī)名或 IP 地址

admin
admin.starky.net
192.168.56.101

IP 子網(wǎng)

10.0.0.0/255.0.0.0 
172.16.0.0/255.255.0.0
192.168.56.0/24

TCP/IP 域

通過使用 通配符 ,可以指定某個(gè)特定域中的全部或部分主機(jī)

*.starky.net
*craft.starky.net
???.starky.net

NIS 組

可以指定某個(gè) NIS 組中所有主機(jī)的訪問權(quán)限,使用 @group

2. /etc/exports 文件中的 Options

選項(xiàng) 描述
ro 只讀權(quán)限
rw 讀寫權(quán)限(默認(rèn))
rw= list 通過 list 指定具有寫權(quán)限的客戶端主機(jī),其他主機(jī)則為只讀權(quán)限
root_squash 將 UID 0 和 GID 0 映射到 anonuid 和 anongid(即 Ubuntu 系統(tǒng)中的 nobody 和 nogroup)
no_root_squash 允許需要 root 權(quán)限的文件操作,有安全風(fēng)險(xiǎn)
all_squash 將所有的 UID 和 GID 映射到它們的匿名形式,主要針對(duì)不信任的主機(jī)
anonuid= xxx 指定客戶端 root 權(quán)限的操作需要映射到的 UID(默認(rèn)是65534)
anongid= xxx 指定客戶端 root 權(quán)限的操作需要映射到的 GID(默認(rèn)是65534)
insecure 允許通過任意端口的遠(yuǎn)程訪問
async 服務(wù)器可以在寫入硬盤之前響應(yīng)客戶端的寫入請(qǐng)求
wdelay 通過延遲同步多個(gè)客戶端對(duì)文件的更新
sec= flavor 指定共享目錄的安全驗(yàn)證方法,包括 sys (UNIX 驗(yàn)證), dh (DES), krb5i , krb5p 和 none (匿名訪問)

3. NFS 掛載選項(xiàng)

選項(xiàng) 描述
rw 以讀寫模式掛載文件系統(tǒng)(rw 也需在服務(wù)端定義)
ro 以只讀模式掛載文件系統(tǒng)
bg 如掛載失?。ǚ?wù)器無響應(yīng)),在后臺(tái)繼續(xù)嘗試并執(zhí)行其他掛載請(qǐng)求
hard 如果服務(wù)器無響應(yīng),重復(fù)發(fā)送請(qǐng)求直到服務(wù)器回復(fù)
soft 如果服務(wù)器無響應(yīng),重復(fù)發(fā)送請(qǐng)求,超過一定時(shí)間后返回錯(cuò)誤,而不會(huì)一直阻塞
intr 允許用戶中斷阻塞的文件操作(并返回錯(cuò)誤)
nointr 不允許用戶中斷客戶端的文件操作請(qǐng)求
retrans= n 在 soft 模式下,指定返回錯(cuò)誤前重復(fù)發(fā)送請(qǐng)求的次數(shù)
timeo= n 設(shè)置超時(shí)后重復(fù)發(fā)送請(qǐng)求的時(shí)間間隔(單位 1/10 秒)
rsize= n 設(shè)置讀取 buffer 大小為 n bytes
wsize= n 設(shè)置寫入 buffer 大小為 n bytes
sec= flavor 設(shè)置安全驗(yàn)證方法
proto= proto 設(shè)置傳輸協(xié)議,NFSv4 必須為 TCP

4. NFS 協(xié)議討論

傳輸協(xié)議

最初的 NFSv2 由于性能原因使用 UDP 協(xié)議,雖然 NFS 添加了自己的 包序列重組錯(cuò)誤檢查 功能,但 UDP 和 NFS 都不具備 阻塞控制 算法,所以在大型的互聯(lián)網(wǎng)絡(luò)環(huán)境中缺乏足夠的性能。

NFSv3 提供了 UDP 和 TCP 協(xié)議之間的選擇。NFSv4 只能使用 TCP 協(xié)議。

隨著 CPU,內(nèi)存等硬件設(shè)備和網(wǎng)絡(luò)傳輸速度的提高,最初由于性能需求而傾向 UDP 協(xié)議的選擇也變得不再必要。

State

NFSv2 和 NFSv3 是 無狀態(tài) 的連接,服務(wù)端不會(huì)跟蹤客戶端對(duì)共享目錄的掛載情況,而是使用 "cookie" 來記錄一次成功的掛載。"cookie" 不會(huì)因?yàn)榉?wù)器重啟而刪除,可以用來在服務(wù)器掛掉之后保留客戶端的連接信息。

NFSv4 是 有狀態(tài) 的連接,客戶端和服務(wù)端都會(huì)維護(hù)文件操作紀(jì)錄及文件鎖的狀態(tài)。所以不再需要 "cookie" 的使用。

文件鎖

早期版本的 NFS 協(xié)議(v2 & v3)由于是 無狀態(tài) 的連接,它們并不清楚哪些主機(jī)正在使用哪些文件。但是文件鎖的實(shí)現(xiàn)又需要獲取狀態(tài)信息。所以早期協(xié)議中的文件鎖是獨(dú)立于 NFS 實(shí)現(xiàn)的。

而 NFSv4 將文件鎖的實(shí)現(xiàn)整合到了核心協(xié)議中,雖然此舉增加了復(fù)雜度,但同時(shí)也解決了早期版本中的很多問題。

但是為了兼容使用 V2 和 V3 協(xié)議的客戶端,獨(dú)立的 lockedstatd 守護(hù)進(jìn)程仍舊需要。

安全相關(guān)

NFS 協(xié)議最初在設(shè)計(jì)時(shí)并不關(guān)注安全性,NFSv4 通過引入對(duì)更強(qiáng)大的安全服務(wù)和身份驗(yàn)證的支持,加強(qiáng)了該協(xié)議的安全性。

傳統(tǒng)的 NFS 協(xié)議大多使用 AUTH_SYS 驗(yàn)證方式,基于 UNIX 的用戶和組標(biāo)識(shí)。在這種方式下,客戶端只需要發(fā)送自己的 UID 和 GID 并與服務(wù)器上的 /etc/passwd 文件內(nèi)容作對(duì)比,以決定其擁有怎樣的權(quán)限。

所以當(dāng)多個(gè)客戶端存在 UID 相同的用戶時(shí),這些用戶會(huì)擁有相同的文件權(quán)限。更進(jìn)一步,擁有 root 權(quán)限的用戶可以通過 su 命令切換到任意 UID 登錄,服務(wù)器會(huì)因此給予其對(duì)應(yīng) UID 的權(quán)限。

為了防止上面的問題出現(xiàn),服務(wù)器可選擇使用更健壯的驗(yàn)證機(jī)制比如 Kerberos 結(jié)合 NFS PRCSEC_GSS。

NFS 共享目錄的訪問控制基于 /etc/exports 文件中定義的主機(jī)名或 IP 地址。但是客戶端很容易針對(duì)其身份和 IP 地址造假,這也會(huì)導(dǎo)致一些安全問題。

NFSv4 只使用 TCP 作為自己的傳輸協(xié)議,而且通常只開放 2049 端口進(jìn)行數(shù)據(jù)傳輸。在配置防火墻時(shí),除了放開 2049 端口的限制外,還要時(shí)刻注意數(shù)據(jù)傳輸?shù)脑吹刂泛湍繕?biāo)地址。

5. Windows 系統(tǒng)掛載共享目錄

win10 系統(tǒng)默認(rèn)不能掛載 NFS 共享目錄,需要進(jìn)入 控制面板 - 程序 - 程序和功能 - 啟用或關(guān)閉 Windows 功能 ,勾選上 NFS 服務(wù) 。

Ubuntu16.04搭建NFS 文件共享服務(wù)器的方法

啟用 nfs 服務(wù)

之后就可以使用 mount 命令掛載共享目錄了。

Ubuntu16.04搭建NFS 文件共享服務(wù)器的方法

mount 命令掛載共享目錄

只是 Windows 系統(tǒng)并不使用 Linux 那樣的用戶管理,導(dǎo)致掛載的共享目錄只能讀取而沒有寫入的權(quán)限。

Ubuntu16.04搭建NFS 文件共享服務(wù)器的方法

無法寫入文件

解決辦法是在 注冊(cè)表 中新建兩個(gè) DWORD 值,用作 匿名用戶 的 UID 和 GID。

默認(rèn)參數(shù)下的掛載選項(xiàng),UID 和 GID 都為 -2:

Ubuntu16.04搭建NFS 文件共享服務(wù)器的方法

默認(rèn)掛載選項(xiàng)

可進(jìn)入 注冊(cè)表編輯器regedit ),定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default ,新建兩個(gè)名為 AnonymousUidAnonymousGid 的 DWORD(32位)值,改成自己需要用到的數(shù)字(我都改成了 0 ,即對(duì)應(yīng) Linux 系統(tǒng)中的 root 用戶。如需要改為 0 以外的數(shù)字,注意先轉(zhuǎn)換成 16 位)。

此時(shí)的掛載選項(xiàng)變?yōu)椋?/p>

Ubuntu16.04搭建NFS 文件共享服務(wù)器的方法

更改 UID 和 GID

如更改未生效,可重啟電腦。

參考資料

UNIX and Linux System Administration Handbook, 4th Edition

How to Mount an NFS Share Using a Windows 10 Machine

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI