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     
 
 
 
 
posted on 2020-08-13 09:37  james-roger  阅读(1517)  评论(0编辑  收藏  举报