在windows中經常使用網上鄰居的功能來實現在局域網中共享文件,方便了使用。那麼在linux中是否有同樣的功能呢?結果是肯定的。
在linux系統上我們可以使用nfs服務來實現局域網中的共享。nfs服務工作方法如下:
首先服務器啓動服務,service nfs start。
nfs服務(監聽2049端口)的主進程是nfsd同時要啓動四個進程portmap,rpc.mountd,lockd,rpc.quotad,rpc.statd這幾個進程。
nfs服務啓動的進程都是同時監聽tcp/udp協議。其幾個進程的作用分別如下:
1. portmap監聽端口111,提供的服務是給予其他三個進程提供隨機端口。rpc.mountd確定客戶端是否能夠掛載分區。
2. rpc.mountd,提供讓服務器掛載的接口
3. locked提供文件鎖,在有多個用戶掛載同個文件時,保證數據的同步性。其方法爲:對問價進行加鎖,不允許多個用戶同時修改一個文件。
4. rpc.quotad是在掛載時檢查是否有磁盤配額,同時並啓用之。
5. rpc.statd和locked聯合使用,共同保證數據的完整性和一致性
其工作過程如下:
client à服務器的portmapà得到mountd端口à連接服務器的mountd端口à mountd查找exports文件同時根據rpc.quotad的限制給予client權限(句柄)à訪問server的nfsd進程,掛載分區
在實現共享時分以下幾步:
1. 首先在服務器上配置所要共享的文件夾
2. 啓動服務,如果服務已經啓動使用命令export -arv重新讀取一下共享的文件夾。
3. 在客戶端中創建目錄,並掛載服務器中共享的文件夾
以下爲配置使用的命令:
是用命令 rpcinfo -p 可以查看nfs對應進程啓動的端口號
編輯配置文件/etc/exports:格式如下:
用戶列表可以是單個用戶,也可以是一個網段的用戶,或者是所有用戶。
常見的選項如:rw,async,root_squash,no_root_squash,all_squash含義如下
rw,允許掛載的文件及可讀可寫,但最終的權限是與文件本身權限的交集。
async,允許異步寫入
root_squash,當以root用戶的登錄時將其切換至nobody用戶的權限。
no_root_squash,直接以root用戶登錄對方主機。
all_squash,任何用戶登錄上之後都切換到nobody用戶。
當配置好上述文件後重啓nfs服務,或者執行命令exortfs -arv讓服務器重新讀取共享的目錄。
查看共享的文件夾:showmount -e SERVER-IP
如果看到服務器共享的文件夾,使用命令 mount -t nfs SERVER:/share/dir /local/dir將其掛載。然後切換至目錄查看,是否掛載成功。
當你切換至掛載的目錄時並創建目錄時,文件的屬主,屬組又是誰呢?這就是nfs服務的一個缺陷:nfs服務是以UID號來區分用戶的身份的,只要客戶機上當前用戶與服務器上的的一個用戶UID相同時,就以服務區上的那個用戶的身份運行。這樣就存在一種情況:本地的root用戶擁有了服務上root用戶的權限,所以在/etc/exports中最好加上root_squash,以保證其文件的安全性。
nfs的缺點:
1. 產生的端口是隨即的
2. 基於IP地址的驗證
3. 完全的相信客戶端
結局端口的問題可以通過更改配置文件的方法:
修改/etc/sysconfig/nfs
通過修改以上的幾行內容來規定端口,在選取端口時儘量使用不常用的端口避免衝突。
解決對身份的驗證,可以通過NIS或KERBOROS這將在後面的文章中介紹