■ 唐山市路南區(qū)教育局 黃健
編者按:在某些情況下,單位可能會同時用到FTP 和NFS,筆者遇到在該場景下,某單位的在線教學(xué)平臺遭遇FTP 不能共享NFS 文件夾的問題。本文對該問題進(jìn)行了解析。
FTP 和NFS提供的都是文件共享服務(wù),應(yīng)用都比較廣泛。不過,二者應(yīng)用場景的區(qū)別還是比較大的。
FTP 主要應(yīng)用于互聯(lián)網(wǎng)環(huán)境,允許未知客戶端訪問,客戶端只需通過IP 地址、端口以及分配的用戶賬戶即可訪問FTP 服務(wù)器,沒有其它特殊要求。NFS 多用于幾臺或幾十臺計(jì)算機(jī)共享存儲空間。一般情況下,這些計(jì)算機(jī)必須獲得NFS 服務(wù)器授權(quán),才能訪問NFS 共享存儲空間。
盡管FTP 和NFS 同時應(yīng)用的案例不多見,在林林總總的實(shí)際生產(chǎn)環(huán)境中,總會出現(xiàn)FTP 和NFS 一起應(yīng)用的場景。筆者在部署某單位的在線教學(xué)平臺時,就不得不面臨這樣的場景,并遭遇FTP 不能共享NFS 文件夾的問題。
該單位的在線教學(xué)平臺由一系列負(fù)載均衡服務(wù)器、緩存網(wǎng)絡(luò)服務(wù)器、下載服務(wù)器、上傳服務(wù)器、視頻轉(zhuǎn)換服務(wù)器、Web 服務(wù)器、數(shù)據(jù)庫服務(wù)器及直播服務(wù)器構(gòu)成。每類服務(wù)器以集群方式對外提供服務(wù),以滿足在線考試等高并發(fā)需求。平臺的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖1 所示。
該單位通過租用某云平臺的主機(jī)來部署上述服務(wù),共租用了23 臺云主機(jī),每臺云主機(jī)均默認(rèn)配備了一塊40 GB的系統(tǒng)盤。該單位還租用了23 塊云硬盤,其中1 塊20 TB云硬盤用來存儲非結(jié)構(gòu)化的教學(xué)資源,掛在在部署NFS服務(wù)器的云主機(jī)上,23 臺云主機(jī)以NFS 文件共享方式共享該20 TB的存儲空間。1塊2 TB 的云硬盤掛在在部署數(shù)據(jù)庫服務(wù)器的云主機(jī)上,用來存放在線教學(xué)平臺結(jié)構(gòu)化的數(shù)據(jù)(數(shù)據(jù)庫)。其它21 塊云硬盤都只有300 GB 存儲空間,用于存放平臺程序及其數(shù)據(jù)。
該在線教學(xué)平臺以FTP方式對外提供上傳、下載及網(wǎng)盤服務(wù),因此需要在Web 服務(wù)器、上傳服務(wù)器、下載服務(wù)器上部署FTP 服務(wù)。筆者在這些服務(wù)器時部署FTP 服務(wù)時,需為某用戶賬戶指定的同一個文件夾為作為FTP 共享文件夾,也就是需要NFS 文件夾。
圖1 單位在線教學(xué)平臺網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)圖
筆者先將NFS 共享文件夾掛載成本地磁盤,再按需求指定FTP 共享文件夾,同時授予指定用戶賬戶文件“讀取”“寫入”“刪除”“追加”權(quán)限,授予指定用戶賬戶目錄“創(chuàng)建”“刪除”“列表”及子目錄對應(yīng)權(quán)限(如圖2 所示)。
配置好FTP 服務(wù)器后,筆者使用FTP 客戶端工具“Leap FTP”上傳文件,以此來測試FTP 服務(wù)。經(jīng)測試,使用Leap FTP 可以連接到FTP 服務(wù)器,可以訪問到FTP 共享文件夾,只是在上傳文件時報(bào)“can't access file”錯誤。如圖3所示。
出現(xiàn)“不能訪問文件”錯誤的原因有很多,在排除文件被占用等情況后,筆者開始懷疑是不是NFS 權(quán)限設(shè)置問題。NFS 服務(wù)不具備用戶驗(yàn)證功能,NFS 服務(wù)器會將客戶端的訪問映射為匿名用戶nfsnobody。因此,在配置NFS 共享目錄時,需要為該目錄配置相應(yīng)的訪問權(quán)限。
圖2 對指定用戶賬戶文件授予各種權(quán)限
圖3 使用Leap FTP 連接FTP 服務(wù)器并訪問FTP 共享文件夾
經(jīng)檢查,筆者已將NFS 共享目錄指定為nfsnobody 所有,而且通過Windows 自帶的文件資源管理器可以打開此共享文件夾,可以復(fù)制、粘貼和創(chuàng)建文件,可以創(chuàng)建和刪除文件夾,說明上面出現(xiàn)的錯誤不是NFS 權(quán)限的問題。
根據(jù)NFS 用戶身份映射原理,如果客戶端當(dāng)前所使用的用戶身份是root,默認(rèn)情況下,當(dāng)客戶端訪問NFS 服務(wù)器時,在NFS 服務(wù)器會將其用戶身份映射為nfsnobody。筆者對比了客戶端上加載NFS 所必需的“Client for NFS”服務(wù)和FTP 服務(wù)器上的“FileZilla Server FTP server”服務(wù)(如圖4 所示)。
二者在登錄身份上有明顯差別,“Client for NFS”服務(wù)的登錄身份是“網(wǎng)絡(luò)服務(wù)”,而“FileZilla Server FTP server”服務(wù)的登錄身份是“本地系統(tǒng)賬戶”。
筆者由此猜測,是不是正常訪問NFS 文件夾時,依賴的是“Client for NFS”服務(wù),該服務(wù)使用“root”身份訪問NFS 服務(wù)器,NFS 服務(wù)器再將其身份映射為nfsnobody。
如果將NFS 共享文件夾裝載成本地磁盤后,在FTP 服務(wù)器上再將其所指定為FTP共享文件夾,而“FileZilla Server FTP server”服務(wù)則是以本地系統(tǒng)賬戶身份訪問該文件夾,并不是“Client for NFS”服務(wù)訪問的NFS 文件夾。因此,客戶端訪問NFS服務(wù)器的身份不是“root”。NFS 服務(wù)器將非“root”用戶身份視作其它用戶(other),并不會將其映射為nfsnobody用戶,這有可能就是前面所報(bào)“can't access file”錯誤的原因。
根據(jù)上述分析,在指定FTP 共享文件夾時,如果將所指定的文件夾的路徑由本地路徑改成NFS 共享目錄的路徑,是不是就可以解決共享NFS 目錄的問題呢?
圖4 NFS“Client for NFS”服務(wù)和FTP“FileZilla Server FTP server”服務(wù)對比
圖5 將NFS 共享目錄指定為FTP 共享文件夾
筆者本著試一試的想法,直接將NFS 共享目錄指定為FTP 共享文件夾(如圖5 所示)。
重新指定FTP 共享文件夾后,仍用FTP 客戶端工具leadftp 測試FTP 服務(wù)。經(jīng)測試,可以正常上傳和下載文件,不能將NFS 文件夾作為FTP 共享文件夾的問題最終得以解決。