centos7 配置nfs

搭建nfs服务器,服务端配置如下:

[root@x160 ~]# yum -y install nfs-utils
[root@x160 ~]# systemctl start nfs-server
[root@x160 ~]# systemctl enable nfs-server
[root@x160 ~]# mkdir /dataweb
[root@x160 ~]# echo "welcome to web" >/dataweb/index.html

  

[root@x160 ~]# cat <<eof >/etc/exports 
-/webdata 192.168.0.1/24(rw,no_root_squash)
-eof 
查看nfs共享配置 
[root@x160 ~]# exportfs -v 
/webdata 192.168.0.1/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash) 
关闭防火墙 
[root@x160 ~]# systemctl stop firewalld;systemctl disable firewalld;setenforce 0;sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

  

 客户端配置:

关闭防火墙 
[root@x170 ~]# systemctl stop firewalld;systemctl disable firewalld;setenforce 0;sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
[root@x170~]# yum -y install nfs-utils

配置本机hosts文件,添加域名解析 [root@x170~]#echo "192.168.0.104 nas" >> /etc/hosts
查看nfs服务器共享目录
[root@x170~]# showmount -e nas
Export list for nas:
/webdata 192.168.0.1/24

安装web服务
[root@x170~]#yum install -y httpd
[root@x170~]#systemctl start httpd;systemctl enable httpd
[root@x170 html]# ps -ef | grep http
root       2978      1  0 16:35 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2979   2978  0 16:35 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2980   2978  0 16:35 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2981   2978  0 16:35 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2982   2978  0 16:35 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2983   2978  0 16:35 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root       3045   1145  0 16:47 pts/0    00:00:00 grep --color=auto http

手动挂在nfs共享目录到web网站根目录 [root@x170~]#mount -t nfs nas:/webdata /var/www/html [root@x170 html]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/centos-root xfs 37G 4.3G 33G 12% / devtmpfs devtmpfs 243M 0 243M 0% /dev tmpfs tmpfs 254M 0 254M 0% /dev/shm tmpfs tmpfs 254M 4.6M 249M 2% /run tmpfs tmpfs 254M 0 254M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 125M 890M 13% /boot tmpfs tmpfs 51M 0 51M 0% /run/user/0 nas:/webdata nfs4 37G 13G 25G 34% /var/www/html
自动挂载nfs共享目录到web网址根目录

[root@x170~]#echo "nas:/webdata  /var/www/html  nfs  defaults 0 0" >> /etc/fstab
[root@x170~]#mount -a 
[root@x170 html]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        37G  4.3G   33G  12% /
devtmpfs                devtmpfs  243M     0  243M   0% /dev
tmpfs                   tmpfs     254M     0  254M   0% /dev/shm
tmpfs                   tmpfs     254M  4.6M  249M   2% /run
tmpfs                   tmpfs     254M     0  254M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  125M  890M  13% /boot
tmpfs                   tmpfs      51M     0   51M   0% /run/user/0
nas:/webdata            nfs4       37G   13G   25G  34% /var/www/html

  

 

通过物理机浏览器正常访问,如下图:

因为nfs服务器设置的目录共享权限是no_root_squash,所以可以在web服务器端使用root账号修改nfs共享文件内容

[root@x170 html]# vim /var/www/html/index.html
1111111111111welcome to web

  

通过物理机浏览器访问,发现内容也同步更新。如下图: 

 

 至此,centos7 中的nfs配置完成。

nfs服务的firewall防火墙设置

配置端口,经测试,可以不用配置。

默认设置中 nfs 端口是2049,portmapper 的端口是111,mountd 端口是20048,status 和 nlockmgr 是随机端口。如需进行防火墙开放端口的设置,修改如下,否则跳过:
修改 /etc/sysconfig/nfs 文件

sudo vi /etc/sysconfig/nfs
#增加端口配置如下一行,对应 rpc.statd 服务,显示status
STATD_PORT=2050

因 nfslock 服务会自动开启 rpc.statd,无需做设置;在rpcinfo -p 映射中,rpc.statd 对应 status ,后续再次修改端口后重启服务使配置生效的

sudo systemctl restart nfs-lock

修改 /etc/modprobe.d/lockd.conf 文件。Network Lock Manager (NLM),对应是 nlockmgr

sudo vi /etc/modprobe.d/lockd.conf 
#增加端口配置如下两行
options lockd nlm_tcpport=2051
options lockd nlm_udpport=2051

4、开启NFS服务,设置服务开机自启动,按顺序先 rpcbind 后 nfs

rpcbind主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解rpc就是一个中介服务。

sudo systemctl start rpcbind.service
sudo systemctl start nfs.service
sudo systemctl enable rpcbind.service
sudo systemctl enable nfs.service

sudo systemctl start rpcbind nfs-server
sudo systemctl enable rpcbind nfs-server

查看共享是否成功

showmount -e localhost

或用exportfs -arv命令,重新使配置文件生效,并显示生效内容 

sudo exportfs -arv

 查看服务对应端口的命令

rpcinfo -p

5、防火墙设置
查看防火墙是否在运行

sudo firewall-cmd --state

显示 running 则加上放行规则,否则跳过

sudo firewall-cmd --permanent --add-port=111/tcp
sudo firewall-cmd --permanent --add-port=111/udp
sudo firewall-cmd --permanent --add-port=2049-2051/tcp
sudo firewall-cmd --permanent --add-port=2049-2051/udp
sudo firewall-cmd --permanent --add-port=20048/tcp
sudo firewall-cmd --permanent --add-port=20048/udp
sudo firewall-cmd --reload
sudo firewall-cmd --add-service=nfs --permanent
sudo firewall-cmd --reload

-----------------------------------------------------------------------------------------------

NFS的常用目录

文件目录用途
/etc/exports NFS服务的主要配置文件,系统并没有默认值,是空文件,如这个文件不存在,需要自己创建
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值,即服务器配置的参数(包含默认的参数)
/var/lib/nfs/xtab 记录曾经登录过的客户端信息

NFS的配置文件:
/etc/exports:NFS配置文件
/var/lib/nfs/*tab:NFS服务器日志放置路径;etab记录共享出来的目录完整权限设置值;xtab记录曾经连接到此NFS主机的相关客户端数据

NFS的两个命令:
/usr/sbin/exportfs:维护NFS共享资源;重新共享/etc/exports变更目录或将NFS server共享目录卸载或重新共享
/usr/sbin/showmount:在客户端查看NFS服务器共享出来的目录资源

7、NFS的主要配置文件 /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服务器也不检查其父目录的权限,这样可以提高效率;
复制代码

例如

/ user01(rw) user02(rw,no_root_squash)

表示共享服务器上的根目录(/)只有user01和user02两台主机可以访问,且有读写权限;user01主机用root用户身份访问时,将客户机的root用户映射成服务器上的匿名用户(root_squash,该参数为缺省参数),相当于在服务器使用nobody用户访问目录;user02主机用root用户身份访问该共享目录时,不映射root用户(no_root_squash),即相当于在服务器上用root身份访问该目录。在配置文件中,使用了no_root_squash ,所以root用户不受约束,在 user02 机器上到挂载点下,到共享目录下,就可以像在本地磁盘使用root用户一样,是不受限制的(通常情况下,不限制root用户的比较多,要注意安全问题)

/root/share/ 192.168.1.2(rw,insecure,sync,all_squash)

表示共享服务器上的/root/share/目录只有192.168.1.2主机可以访问,且有读写权限;此主机用任何身份访问时,将客户机的用户都映射成服务器上的匿名用户(all_squash),相当于在服务器上用nobody用户访问该目录(若客户机要在该共享目录上保存文件(即写操作),则服务器上的nobody用户对该目录必须有写的权限)

/home/ylw/ *.test.com (rw,insecure,sync,all_squash)

表示共享/home/ylw/目录,*.test.com域中所有的主机都可以访问该目录,且有读写权限

/home/share/ .test.com (ro,sync,all_squash,anonuid=zh3,anongid=wa4)

表示共享目录/home/share/,*.test.com域中的所有主机都可以访问,但只有只读的权限,所有用户都映射成服务器上的uid为zh3、gid为wa4的用户

-----------------------------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/xiaofeng666/p/13220080.html