詳解NFS文件傳輸服務
NFS(Network File System),NFS可以讓客戶端把服務器的共享目錄,掛載到本機使用,就像使用本機分區一樣,使用非常方便。
RPC服務
RPC(遠程調用)服務,NFS是被RPC服務管理的,所以必須安裝RPC的主程序rpcbind。
關於端口
NFS端口:2049
RPC端口:111
NFS守護進程端口:為隨機端口,但是能夠實現訪問,訪問不好解決。而RPC端口是111(固定的),當客戶端訪問的時候,找的不是NFS,也不是NFS的守護進程,而是RPC,告知服務器端連接本機的NFS服務,此時RPC可以幫忙確認NFS端口是哪一個,只要啟動NFS,NFS端口以及守護進程都會去先到RPC註冊,告知RPC主、守護進程端口號。此時,當有用戶訪問NFS服務器,RPC會返回給客戶端NFS主、守護進程的端口號。
文件服務器比較
服務器名稱 | 使用範圍 | 服務器端 | 客戶端 | 局限性 |
---|---|---|---|---|
FTP | 局域網、廣域網 | Windws、Linux | Windws、Linux | 無法直接在服務器端修改數據 |
Samba | 局域網 | Windws、Linux | Windws、Linux | 只能在內網使用 |
NFS | 局域網、廣域網 | Linux | Linux(Windows) | 客戶端需要掛載使用,對普通用戶有一定技術要求 |
用戶身份映射(系統權限)
NFS沒有用戶登陸認證機制,所以客戶端登陸到服務器之後,會把客戶端的身份映射到服務器端。就會出現以下四種可能:
1、客戶端和服務器端上剛好有相同的帳號和用戶組(用戶名和UID都要相同)。
3、服務器端上沒有客戶端的UID。
4、客戶端上是root使用共享。
實驗環境
- 系統環境:centos6.5
- NFS服務器端IP:192.168.1.77
- NFS客戶端IP :192.168.1.20
- 光盤掛載目錄:/mnt/sr0
- 相關軟件包:NFS主程序:nfs-utils
- RPC主程序:rpcbind
搭建步驟:
一、準備工作
1、關閉服務器端、客戶端防火墻、Selinux
[root@client ~]# vim /etc/sysconfig/selinux
[root@client ~]# chkconfig iptables off #開機啟動關閉防火墻
2、安裝並啟動服務
[root@redhat6 ~]# rpm -qa | grep nfs
[root@redhat6 ~]# rpm -qa | grep rpc
[root@redhat6 ~]# service rpcbind start #先啟動rpc,nfs需要rpc的存在
[root@redhat6 ~]# service nfs start
二、搭建NFS服務
1、編輯配置文件並詳解
[root@redhat6 ~]# vim /etc/exports
/etc/exports:
- 格式:共享目錄 客戶端[可以寫IP、域名](權限) 空格隔開可以寫多個客戶端……
2.可以識別的客戶端:
指定IP:192.168.1.20
指定網段: 192.168.1.0/24或192.168.1.0/255.255.255.0
指定主機名:www.test.com
所有主機:*3.常用權限(NFS服務權限)
rw: 讀寫(read&&write)
ro: 只讀(readonly)
all_squash:不論登陸是誰(UID),都壓縮為匿名用戶nfsnobody
root_squash:如果登陸的是root,壓縮為nfsnobody,默認root不能登陸
no_root_squash:允許root身份登陸,不推薦
anonuid:把所有的登陸用戶,不再壓縮為nfsnobody用戶,而是壓縮為指定uid用戶
sync: 將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性;
async:將數據先保存在內存緩沖區中,必要時才寫入磁盤
2、創建共享目錄
[root@redhat6 ~]# mkdir /opt/test #創建共享目錄
[root@redhat6 ~]# chmod 777 /opt/test/ #修改共享目錄權限
3、掛載共享目錄
[root@redhat6 ~]# exportfs -arv
掛載目錄(修改了配置文件不需要重啟服務,通過以下命令,掛載、卸載即可)
選項:
-a: 按照配置文件掛載/卸載所有目錄
-r: 重新掛載
-u: 卸載
-v: 顯示詳細信息
三、NFS客戶端使用
1、啟動服務
[root@raid ~]# service rpcbind start
2、將服務器的共享目錄掛載到本地
[root@raid ~]# showmount -e 192.168.1.77 #查看服務器端共享目錄
[root@raid ~]# mkdir /opt/client#建立掛載點
[root@raid ~]# mount -t nfs 192.168.1.77:/opt/test /opt/client ##將服務器端共享目錄掛載至本地
[root@raid ~]# df -h
四、用戶身份映射第一種可能
客戶端和服務器端上有相同的帳號和用戶組(UID也要相同),客戶端上用戶可以在服務器端上按照用戶權限使用文件
1、服務器端添加測試用戶
[root@redhat6 ~]# useradd -u 500 zhangsan
[root@redhat6 ~]# passwd zhangsan
2、客戶端添加測試用戶、並寫入文件測試
[root@raid ~]# useradd -u 500 zhangsan
[root@raid ~]# passwd zhangsan
[root@raid ~]# su - zhangsan
[zhangsan@raid ~]$ cd /opt/client/
[zhangsan@raid client]$ touch abc.txt
[zhangsan@raid client]$ ll
五、用戶身份映射第二種可能
當客戶端和服務器端上擁有相同的UID,但是用戶名不同,假設clinet上有用戶aa(UID500),服務器端上有用戶bb(UID:500)。在客戶端在使用服務器共享目錄時,身份識別為bb(因為Linux權限綁定在UID上)此種情況盡量避免出現,容易邏輯混亂
1、服務器端添加測試用戶
[root@redhat6 ~]# useradd -u 501 jack
[root@redhat6 ~]# passwd jack
2、客戶端添加測試用戶、並寫入文件測試
[root@raid ~]# useradd -u 501 tom
[root@raid ~]# passwd tom
[root@raid ~]# su - tom
[tom@raid ~]$ cd /opt/client/
[tom@raid client]$ touch 123.txt
[tom@raid client]$ ll 123.txt
3、服務器端查看寫入的文件屬性
[root@redhat6 ~]# cd /opt/test/
[root@redhat6 test]# ll
六、用戶身份映射第三種可能
服務器端上沒有客戶端的UID(客戶端上有此uid,服務器上沒有此uid)。客戶端用戶訪問服務器端時,服務器端上沒有此UID,則把此用戶自動轉變為nfsnobody偽用戶(UID:65534)
1、服務器端查看對應用戶
[root@redhat6 ~]# cat /etc/passwd | grep ‘503‘ #客戶端沒有UID為503的用戶
2、客戶端添加測試用戶、並寫入文件測試
[root@raid ~]# useradd -u 503 zhaoliu
[root@raid ~]# passwd zhaoliu
[root@raid ~]# su - zhaoliu
[zhaoliu@raid ~]$ cd /opt/client/
[zhaoliu@raid ~]$ ll aaa.txt
3、服務器端查看寫入的文件屬性
[root@redhat6 ~]# cd /opt/test/
[root@redhat6 test]# ll aaa.txt
七、用戶身份映射第四種可能
clinet上是root使用共享默認把root也轉變為nfsnobody。服務器端可以修改配置文件,允許root訪問nfs服務器
1、服務器端不允許root訪問,將配置文件中no_root_squash刪除
2、客戶端使用root寫入文件測試
[root@raid ~]# cd /opt/client/
[root@raid client]# touch hello.txt
[root@raid client]# ll
3、服務器端修改配置允許以root身份登錄
[root@redhat6 ~]# vim /etc/exports
[root@redhat6 ~]# exportfs -auv
[root@redhat6 ~]# exportfs -arv
4、服務器端查看寫入的文件屬性
[root@raid ~]# cd /opt/client/
[root@raid client]# touch love.txt
詳解NFS文件傳輸服務