1. 程式人生 > >詳解NFS文件傳輸服務

詳解NFS文件傳輸服務

sco utils cbi 空格 客戶端 啟動 tex service gre

簡介

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都要相同)。

2、當客戶端和服務器端上擁有相同的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:

  1. 格式:共享目錄 客戶端[可以寫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文件傳輸服務