NFS(Network File System)即網絡文件系統,是FreeBSD支持的文件系統中的一種,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用能夠透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件同樣。linux
系統:centos7vim
IP:192.168.0.240centos
爲確保不受防火牆影響,配置時關閉防火牆和selinuxbash
[root@localhost /]# sestatus –v #查看狀態 SELinux status: disabled [root@localhost /]# setenforce 0 #臨時關閉selinux setenforce: SELinux is disabled [root@localhost /]# vim/etc/sysconfig/selinux #修改配置文件,永久生效。 SELINUX=disabled [root@localhost /]# systemctl stopfirewalld.service #臨時關閉防火牆 [root@localhost /]# systemctl disablefirewalld.service #永久關閉防火牆
[root@localhost /]# rpm -qa |egrep rpcbind rpcbind-0.2.0-33.el7_2.1.x86_64 [root@localhost /]# rpm -qa |egrepnfs-utils nfs-utils-1.3.0-0.21.el7_2.1.x86_64
若未安裝使用yum安裝(更新):服務器
[root@localhost ~]# yum -y installnfs-utils rpcbind
1)編輯/etc/exports文件,默認無此文件,使用vim直接添加。網絡
[root@localhost nfs]# vim /etc/exports /var/nfs/iso1 *(rw,sync) /var/nfs/iso2 *(rw,sync) /var/nfs/iso3 *(rw,sync) /var/nfs/data1 *(rw,sync) /var/nfs/data2 *(rw,sync) /var/nfs/data3 *(rw,sync)
2)重啓服務dom
[root@localhost nfs]# service rpcbindrestart [root@localhost nfs]# service nfs-serverrestart [root@localhost nfs]# showmount -e Export list for localhost.localdomain: /var/nfs/data3 * /var/nfs/data2 * /var/nfs/data1 * /var/nfs/iso3 * /var/nfs/iso2 * /var/nfs/iso1 *
NFS服務器的配置相對比較簡單,只須要在相應的配置文件中進行設置,而後啓動NFS服務器便可。async
NFS的經常使用目錄tcp
/etc/exports NFS服務的主要配置文件ide
/usr/sbin/exportfs NFS服務的管理命令
/usr/sbin/showmount 客戶端的查看命令
/var/lib/nfs/etab 記錄NFS分享出來的目錄的完整權限設定值
/var/lib/nfs/xtab 記錄曾經登陸過的客戶端信息
NFS服務的配置文件爲 /etc/exports,這個文件是NFS的主要配置文件,不過系統並無默認值,因此這個文件不必定會存在,可能要使用vim手動創建,而後在文件裏面寫入配置內容。
/etc/exports文件內容格式:
<輸出目錄> [客戶端1 選項(訪問權限,用戶映射,其餘)] [客戶端2 選項(訪問權限,用戶映射,其餘)]
a. 輸出目錄:
輸出目錄是指NFS系統中須要共享給客戶機使用的目錄;
b. 客戶端:
客戶端是指網絡中能夠訪問這個NFS輸出目錄的計算機
客戶端經常使用的指定方式
指定ip地址的主機:192.168.0.200
指定子網中的全部主機:192.168.0.0/24 192.168.0.0/255.255.255.0
指定域名的主機:david.bsmart.cn
指定域中的全部主機:*.bsmart.cn
全部主機:*
c. 選項:
選項用來設置輸出目錄的訪問權限、用戶映射等。
NFS主要有3類選項:
訪問權限選項
設置輸出目錄只讀:ro
設置輸出目錄讀寫:rw
用戶映射選項
all_squash:將遠程訪問的全部普通用戶及所屬組都映射爲匿名用戶或用戶組(nfsnobody);
no_all_squash:與all_squash取反(默認設置);
root_squash:將root用戶及所屬組都映射爲匿名用戶或用戶組(默認設置);
no_root_squash:與rootsquash取反;
anonuid=xxx:將遠程訪問的全部用戶都映射爲匿名用戶,並指定該用戶爲本地用戶(UID=xxx);
anongid=xxx:將遠程訪問的全部用戶組都映射爲匿名用戶組帳戶,並指定該匿名用戶組帳戶爲本地用戶組帳戶(GID=xxx);
其它選項
secure:限制客戶端只能從小於1024的tcp/ip端口鏈接nfs服務器(默認設置);
insecure:容許客戶端從大於1024的tcp/ip端口鏈接服務器;
sync:將數據同步寫入內存緩衝區與磁盤中,效率低,但能夠保證數據的一致性;
async:將數據先保存在內存緩衝區中,必要時才寫入磁盤;
wdelay:檢查是否有相關的寫操做,若是有則將這些寫操做一塊兒執行,這樣能夠提升效率(默認設置);
no_wdelay:如有寫操做則當即執行,應與sync配合使用;
subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
no_subtree:即便輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣能夠提升效率;
[root@localhost nfs]# showmount –e #默認查看本身共享的服務 Export list for localhost.localdomain: /var/nfs/data3 * /var/nfs/data2 * /var/nfs/data1 * /var/nfs/iso3 * /var/nfs/iso2 * /var/nfs/iso1 * [root@localhost nfs]# showmount –a #顯示已經與客戶端鏈接上的目錄信息 All mount points on localhost.localdomain: 192.168.0.246:/var/nfs/data1 [root@localhost ~]# showmount -e192.168.0.240 #指定NFS服務器端IP Export list for 192.168.0.240: /var/nfs/data3 * /var/nfs/data2 * /var/nfs/data1 * /var/nfs/iso3 * /var/nfs/iso2 * /var/nfs/iso1 *
若是咱們在啓動了NFS以後又修改了/etc/exports,是否是還要從新啓動nfs呢?這個時候咱們就能夠用exportfs 命令來使改動馬上生效,該命令格式以下:
# exportfs [-aruv]
-a 所有掛載或卸載 /etc/exports中的內容
-r 從新讀取/etc/exports 中的信息,並同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸載單一目錄(和-a一塊兒使用爲卸載全部/etc/exports文件中的目錄)
-v 在export的時候,將詳細的信息輸出到屏幕上。
具體例子:
[root@localhost nfs]# exportfs –au #exportfs -au 卸載全部共享目錄 [root@localhost nfs]# showmount -e Export list for localhost.localdomain: [root@localhost nfs]# showmount -r [root@localhost nfs]# exportfs –r #exportfs -rv 從新共享全部目錄並輸出詳細信息 [root@localhost nfs]# showmount -e Export list for localhost.localdomain: /var/nfs/data3 * /var/nfs/data2 * /var/nfs/data1 * /var/nfs/iso3 * /var/nfs/iso2 * /var/nfs/iso1 *
1)nfsstat 查看NFS的運行狀態
2)rpcinfo 查看rpc執行信息,能夠用於檢測rpc運行狀況的工具,利用rpcinfo-p 能夠查看出RPC開啓的端口所提供的程序。
3)showmount
-a 顯示已經於客戶端鏈接上的目錄信息
-e IP或者hostname 顯示此IP地址共享的目錄
客戶端掛載NFS服務器中的共享目錄
命令格式:
mount NFS服務器IP:共享目錄 本地掛載點目錄
[root@localhost ~]# mkdir /tmp/mnt_test [root@localhost ~]# mount192.168.0.240:/var/nfs/iso1 /tmp/mnt_test [root@localhost ~]# ls /tmp/mnt_test/ [root@localhost ~]# ls /tmp/mnt_test/ #在nfs服務器端新建1.txt文件 1.txt
客戶端卸載共享目錄
[root@localhost tmp]# umount /tmp/mnt_test/
1. 客戶端鏈接時候,對普通用戶的檢查
a. 若是明確設定了普通用戶被映射的身份,那麼此時客戶端用戶的身份轉換爲指定用戶;
b. 若是NFS server上面有同名用戶,那麼此時客戶端登陸帳戶的身份轉換爲NFS server上面的同名用戶;
c. 若是沒有明確指定,也沒有同名用戶,那麼此時用戶身份被映射成nfsnobody;
2. 客戶端鏈接的時候,對root的檢查
a. 若是設置no_root_squash,那麼此時root用戶的身份被映射爲NFS server上面的root;
b. 若是設置了all_squash、anonuid、anongid,此時root 身份被映射爲指定用戶;
c. 若是沒有明確指定,此時root用戶被映射爲nfsnobody;
d. 若是同時指定no_root_squash與all_squash 用戶將被映射爲 nfsnobody,若是設置了anonuid、anongid將被映射到所指定的用戶與組;