linux上nfs掛載
環境準備
NFS服務端 CentOS7 192.168.1.11
NFS客戶端 CentOS7 192.168.1.12
安裝NFS與配置
NFS的常用目錄:
/etc/exports #NFS服務的主要配置檔案 /usr/sbin/exportfs #NFS服務的管理命令 /usr/sbin/showmount #客戶端的檢視命令 /var/lib/nfs/etab #記錄NFS分享出來的目錄的完整許可權設定值 /var/lib/nfs/xtab #記錄曾經登入過的客戶端資訊
服務端
#CentOS系統服務端 yum -y install nfs-utils yum -y install rpcbind
將服務加入開機自啟動,並啟動服務:
systemctl enable rpcbind nfs-server systemctl start rpcbind nfs-server
檢視nfs服務向rpc註冊的埠資訊(當前nfs-server未啟動,所有沒有註冊埠):
[root@localhost ~]# rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper
如果此時啟動nfs,可以發現nfs隨機註冊的埠如下(對於此種情況下,如果未開啟防火牆,隨機埠是沒有問題的,一旦開啟就需要將埠固定下來了):
[root@localhost ~]# rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper 100000 3 tcp 111 portmapper 100000 2 tcp 111 portmapper 100000 4 udp 111 portmapper 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100005 1 udp 20048 mountd 100005 1 tcp 20048 mountd 100005 2 udp 20048 mountd 100005 2 tcp 20048 mountd 100005 3 udp 20048 mountd 100005 3 tcp 20048 mountd 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 3 tcp 2049 nfs_acl 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 3 udp 2049 nfs_acl 100021 1 udp 37045 nlockmgr 100021 3 udp 37045 nlockmgr 100021 4 udp 37045 nlockmgr 100021 1 tcp 39375 nlockmgr 100021 3 tcp 39375 nlockmgr 100021 4 tcp 39375 nlockmgr
防火牆配置
NFS的防火牆很難設定規則,除了固定的nfs2049、portmapper111之外, 還有很多不固定的埠是由rpc.mountd, rpc.rquotad等服務所開啟的。因此我們需要在/etc/sysconfig/nfs指定特定的埠,這樣每次啟動nfs時,相關服務啟動的埠就會固定,如此即可設定防護牆!
固定nfs服務埠
固定埠nfs 2049、portmapper 111,另外3個服務埠可設定為mountd 892、rpc.statd 662、 nlockmgr 32803、32769
配置:
1.修改/etc/sysconfig/nfs檔案,將下列內容的註釋去掉,如果沒有則新增:
# TCP port rpc.lockd should listen on.
LOCKD_TCPPORT=32803
# UDP port rpc.lockd should listen on.
LOCKD_UDPPORT=32769
# Port rpc.mountd should listen on.
MOUNTD_PORT=892
# Port rpc.statd should listen on.
STATD_PORT=662
# Outgoing port statd should used. The default is port
# is random
STATD_OUTGOING_PORT=2020
埠配置完成後檢視(注意重啟nfs與伺服器):
[root@localhost ~]# rpcinfo -p
CentOS7下配置
編輯檔案 /etc/firewalld/zones/public.xml:
#vim /etc/firewalld/zones/public.xml <?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="ssh"/> <service name="http"/> <service name="https"/> <port protocol="tcp" port="8080"/> <port protocol="tcp" port="22"/> <port protocol="tcp" port="111"/> <port protocol="tcp" port="662"/> <port protocol="tcp" port="892"/> <port protocol="tcp" port="2049"/> <port protocol="tcp" port="32803"/> <port protocol="udp" port="111"/> <port protocol="udp" port="662"/> <port protocol="udp" port="892"/> <port protocol="udp" port="2049"/> <port protocol="udp" port="32769"/> </zone>
注意重啟防火牆
建立共享目錄
建立服務端共享目錄,例如:
mkdir /nfs
NFS共享目錄檔案配置
/etc/exports檔案內容:
#vi /etc/exports
/nfs 192.168.1.76(rw,sync,secure,no_root_squash,no_all_squash)
以上配置分為三個部分:
第一部分就是本地要共享出去的目錄。
第二部分為允許訪問的主機(可以是一個IP,一個IP段如192.168.0.0/24、192.168.0.0/255.255.255.0,指定域名的主機www.example.com,指定域中的所有主機.example.com,所有主機)。
第三部分小括號裡面的,為一些許可權選項。許可權說明:
rw :讀寫;
ro :只讀;
sync :同步模式,記憶體中資料時時寫入磁碟
async :不同步,把記憶體中資料定期寫入磁碟中
secure :nfs通過1024以下的安全TCP/IP埠傳送
insecure :nfs通過1024以上的埠傳送
no_root_squash:NFS客戶端連線服務端時如果使用的是root的話,那麼對服務端分享的目錄來說,
也擁有root許可權。 顯然開啟這項是不安全的
root_squash:當客戶端登陸NFS的身份為root使用者時,將客戶端的root使用者及所屬組都對映為匿名使用者
或使用者組(預設設定), 通常使用nobody或nfsnobody身份
subtree:若輸出目錄是一個子目錄,則nfs伺服器將檢查其父目錄的許可權(預設設定)。
no_subtree:即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的許可權,這樣可以提高效率
no_all_squash :無論客戶端登陸NFS的身份為何,都將對映為root使用者(預設設定)
all_squash :不論NFS客戶端連線服務端時使用什麼使用者,對服務端分享的目錄來說都是擁有匿名使用者許可權;
anonuid:匿名使用者的UID值,通常是nobody或nfsnobody,可以在此處自行設定
anongid:匿名使用者的GID值
配置完成後,重新載入nfs配置(exportfs -rv)或重啟nfs服務。
exportfs [-aruv]
引數說明:
-a 全部掛載(或解除安裝)/etc/exports檔案內的設定
-r 重新掛載/etc/exports中的設定,此外同步更新/etc/exports及/var/lib/nfs/xtab中的內容
-u 解除安裝某一目錄
-v 在export時將共享的目錄顯示在螢幕上
例如:
[root@localhost /]# exportfs -rv
exporting 192.168.1.12:/nfs
客戶端
#CentOS系統客戶端 yum -y install nfs-utils
掛載NFS共享目錄
1、檢視showmount -e IP來檢視NFS共享狀態:
[root@localhost /]# showmount -e 192.168.1.11
Export list for 192.168.1.11:
/data 192.168.1.12
2、掛載NFS共享目錄
1)建立服務端共享目錄,例如:
mkdir /test
2)掛載目錄
#臨時掛載,即時生效
mount -t nfs -o nfsvers=3 192.168.1.11:/nfs /test
#配置永久掛載nfs檔案系統,儲存後重啟伺服器即可生效
$ vim /etc/fstab
$ 192.168.1.11:/data /test nfs defaults,nfsvers=3 0 0
客戶端執行nfsstat -m命令,檢視當前所使用的nfs版本:
[root@localhost ~]# nfsstat -m
/data from 192.168.1.11:/data
Flags: rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,
proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.60,mountvers=3,
mountport=892,mountproto=udp,local_lock=none,addr=192.168.1.11
3)檢視掛載是否成功:
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 994M 0 964M 0% /dev
tmpfs 100M 8.4M 962M 1% /run
/dev/mapper/centos-root 6.7G 3.5G 2.2G 53% /
/dev/sda1 497M 118M 350M 24% /boot
192.168.1.11:/nfs 6.2G 4.5G 1.2G 72% /test
常用命令
nfsstat
檢視NFS的執行狀態,對於調整NFS的執行有很大幫助:
nfsstat -s #檢視服務端的情況
nfsstat -c #檢視客戶端的情況
exportfs
啟動了NFS之後又修改了/etc/exports,使用exportfs命令來使改動立刻生效
rpcinfo
檢視rpc執行資訊,可以用於檢測rpc執行情況的工具
例項
例項一
服務端NFS配置:
#vi /etc/exports
/nfs 192.168.1.12(rw,sync,secure,no_root_squash,no_all_squash)
客戶端建立檔案:touch a,客戶端顯示如下:
[root@localhost test]# touch a
[root@localhost test]# ls -al
total 4
drwxr-xr-x. 2 root root 15 Feb 24 20:52 .
dr-xr-xr-x. 19 root root 4096 Feb 24 20:51 ..
-rw-r--r--. 1 root root 0 Feb 24 20:52 a
服務端”/data”顯示如下:
[root@localhost /]# ls -al /data
total 0
drwxr-xr-x. 2 root root 15 Feb 24 20:52 .
dr-xr-xr-x. 18 root root 236 Feb 19 00:43 ..
-rw-r--r--. 1 root root 0 Feb 24 20:52 a
例項二
服務端NFS配置:
#vi /etc/exports
/data 192.168.1.12(rw,sync,secure,root_squash)
此時服務端”/nfs”的許可權:
[root@localhost /]# ls -al | grep nfs
drwxr-xr-x. 2 root root 15 Feb 24 20:52 nfs
客戶端建立檔案:touch b,客戶端顯示如下:
[root@localhost test]# touch b
touch: cannot touch 'b': Permission denied
此時客戶端是不能建立,主要是因”/nfs”的許可權:所在組group和其他使用者other的許可權不能寫,需要修改許可權:
[root@localhost /]# chmod go+w /nfs
[root@localhost /]# ls -al | grep nfs
drwxrwxrwx. 2 root root 15 Feb 24 20:52 nfs
客戶端再次建立檔案:touch b,客戶端顯示如下:
[root@localhost test]# touch b
[root@localhost test]# ls -al
total 4
drwxrwxrwx. 2 root root 24 Feb 24 21:03 .
dr-xr-xr-x. 19 root root 4096 Feb 24 20:51 ..
-rw-r--r--. 1 root root 0 Feb 24 20:52 a
-rw-r--r--. 1 nfsnobody nfsnobody 0 Feb 24 21:03 b
服務端”/nfs”顯示如下:
[root@bogon /]# ls -al /nfs
total 0
drwxrwxrwx. 2 root root 24 Feb 24 21:03 .
dr-xr-xr-x. 18 root root 236 Feb 19 00:43 ..
-rw-r--r--. 1 root root 0 Feb 24 20:52 a
-rw-r--r--. 1 nfsnobody nfsnobody 0 Feb 24 21:03 b
例項三
服務端NFS配置:
建立group和user
# groupadd -g 1000 jason
# useradd -u 1000 -g jason -M -s /bin/bash jason
設定共享目錄許可權
setfacl -m u:jason:rwx /nfs
#vi /etc/exports
/data 192.168.1.12(rw,sync,secure,all_squash,,anonuid=1000,anongid=1000))
此時服務端”/nfs”的許可權:
[root@localhost /]# ls -al | grep nfs
drwxr-xr-x. 2 root root 15 Feb 25 12:41 data
[root@localhost /]# getfacl /nfs
getfacl: Removing leading '/' from absolute path names
# file: nfs
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
[root@localhost /]# setfacl -m u:jason:rwx /nfs
[root@localhost /]# getfacl /data
getfacl: Removing leading '/' from absolute path names
# file: nfs
# owner: root
# group: root
user::rwx
user:jason:rwx #多出來一個使用者jason的許可權rwx
group::r-x
mask::rwx
other::r-x
備註:ACL(Access Control List),主要的目的是在提供傳統的 owner,group,others 的 read,write,execute 許可權之外的細部許可權配置
1)、setfacl可以更精確的控制權限的分配
2)、getfacl取得某個檔案/目錄的 ACL 配置專案
客戶端建立檔案:touch a,客戶端顯示如下:
[root@localhost test]# touch a
[root@localhost test]# ls -al
total 4
drwxrwxr-x. 2 root root 15 Feb 25 12:39 .
dr-xr-xr-x. 19 root root 4096 Feb 24 20:51 ..
#因客戶端也存在uid和gid為1000的jason,所以使用者和組都顯示為jason,否則顯示1000
-rw-r--r--. 1 jason jason 0 Feb 25 12:39 a
服務端”/nfs”顯示如下:
[root@localhost nfs]# ls -al
total 0
drwxrwxr-x+ 2 root root 15 Feb 25 12:41 .
dr-xr-xr-x. 18 root root 236 Feb 19 00:43 ..
-rw-r--r--. 1 jason jason 0 Feb 25 12:41 a