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
總結
以上是生活随笔為你收集整理的linux上nfs挂载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红旗柒在国际誉为什么?
- 下一篇: 本田锋范口碑怎么样 用户评价和专家点评?