nfs服务器的安装配置

一、原理

nfs的目标是使计算机共享资源。
使用nfs,客户端可以透明地访问服务器中的文件系统,这不同于FTP协议。FTP会产生一个完整的文件副本;NFS只访问一个进程引用文件部分,并且目的就是使得这种访问透明。这意味着任何能够访问一个本地文件的客户端程序不需要作任何修改就能够访问一个NFS文件。

nfs的优缺点

1)优点
  1. 节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
  2. 简单容易上手
  3. 方便部署非常快速,维护十分简单
2)缺点
  1. 局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
  2. 在高并发下NFS效率/性能有限
  3. 客户端没用用户认证机制,且数据是通过明文传送
  4. NFS的数据是明文的,对数据完整性不做验证

二、配置

服务端和客户端的主机型号都为rhel7


本次实验各ip设置:
服务端:172.25.254.170
客户端:172.25.254.171


本次实验使用到的软件:nfs-utils用来提供nfs服务;autofs用来设置设备使用时自动挂载,不使用时自动卸载


本次实验的配置文件:
/etc/exports ##修改共享文件的权限设置
/etc/sysconfig/autofs ##autofs的配置文件
/etc/auto.master ##主策略文件
/etc/auto.nfs ##自己设置的自定义挂载目录的子配置文件,从主策略文件中读取出来的

1、安装挂载

提供nfs服务的软件为:nfs-utils

1)安装软件

yum install nfs-utils -y

2)服务端设置
**<1>修改防火墙设置**
[root@server ~]# firewall-cmd --add-service=nfs --permanent 
success
[root@server ~]# firewall-cmd --add-service=rpc-bind --permanent 
success
[root@server ~]# firewall-cmd --add-service=mountd --permanent 
success
[root@server ~]# firewall-cmd --reload 
success
**<2>设置共享文件**
[root@server ~]# mkdir /westos/nfs -p
[root@server ~]# vim /etc/exports
/westos/nfs      *(sync)         ##sync表示所有客户端访问本机的共享目录使客户端与服务端同步
[root@server ~]# exportfs -vr   
exporting *:/westos/nfs
3)客户端挂载测试
[root@client ~]# mount 172.25.254.170:/westos/nfs /mnt  ##挂载
[root@client ~]# showmount -e 172.25.254.170
Export list for 172.25.254.170:         ##显示172.25.254.170主机>    里面的共享文件,相当于smbclient -L
/westos/nfs *

2、设置在客户端挂载存在时间

全部在客户端设置

1)安装软件

yum install autofs -y

2)修改配置文件
[root@client ~]# systemctl start autofs
[root@client ~]# ls -ld /net/       ##只有当autofs服务开启时,这个目录才会存在,服务关闭,目录自动消失
drwxr-xr-x 2 root root 0 Dec  9 10:09 /net/
[root@client net]# ls       ##这个目录用ls并不会列出服务器中的文件
[root@client net]# cd 172.25.254.170    ##但可以通过进入服务器ip进入服务器的共享文件目录
[root@client 172.25.254.170]# ls
westos
[root@client ~]# vim /etc/sysconfig/autofs  ##配置文件在rhel7上在这个文件,而rhel7.2配置文件是在/etc/autofs.conf文件
TIMEOUT=5           ##表示挂载上多少时间后自动卸载,默认为300秒
[root@client ~]# systemctl restart autofs
3)测试
[root@client ~]# cd /net/172.25.254.170/westos/nfs/     ##进入这个目录后,便后自动实现挂载
[root@client nfs]# cd
[root@client ~]# df
Filesystem                 1K-blocks    Used Available Use% Mounted on
/dev/vda1                   10473900 3177296   7296604  31% /
devtmpfs                      493408       0    493408   0% /dev
tmpfs                         508996     140    508856   1% /dev/shm
tmpfs                         508996   13412    495584   3% /run
tmpfs                         508996       0    508996   0% /sys/fs/cgroup
/dev/mapper/vg0-vo            483670    2339    451840   1% /home
172.25.254.170:/westos/nfs  10473984 3148288   7325696  31% /net/172.25.254.170/westos/nfs
[root@client ~]# df     ##5秒后,再次使用df,会发现挂载的nfs共享目录自动被卸载
Filesystem         1K-blocks    Used Available Use% Mounted on
/dev/vda1           10473900 3177296   7296604  31% /
devtmpfs              493408       0    493408   0% /dev
tmpfs                 508996     140    508856   1% /dev/shm
tmpfs                 508996   13412    495584   3% /run
tmpfs                 508996       0    508996   0% /sys/fs/cgroup
/dev/mapper/vg0-vo    483670    2339    451840   1% /home

3、指定在客户端自动挂载的目录

全部在客户端上设置
一定要注意,想要自动挂载的目录不需要自己建立,在修改完成配置文件之后,重启服务,指定的目录会自动建立出来

1)设置配置文件
[root@client ~]# vim /etc/auto.master   ##修改主配置文件
/westos/linux   /etc/auto.nfs   ##前面的表示想要在客户端上挂载的目录位置,下一层目录会自动是服务端共享的目录,后面的表示实现这个功能的子配置文件,这个文件的名字可以自己设置
[root@client ~]# vim /etc/auto.nfs  ##设置子配置文件
nfs     -rw     172.25.254.170:/westos/nfs  ##表示将170主机上的/westos/nfs目录共享出来,并且为可读可写
[root@client ~]# systemctl restart autofs
2)测试
[root@client ~]# cd /westos/linux/nfs/
[root@client nfs]# cd
[root@client ~]# df
Filesystem                 1K-blocks    Used Available Use% Mounted on
/dev/vda1                   10473900 3181148   7292752  31% /
devtmpfs                      493408       0    493408   0% /dev
tmpfs                         508996     140    508856   1% /dev/shm
tmpfs                         508996   13416    495580   3% /run
tmpfs                         508996       0    508996   0% /sys/fs/cgroup
/dev/mapper/vg0-vo            483670    2339    451840   1% /home
172.25.254.170:/westos/nfs  10473984 3147904   7326080  31% /westos/linux/nfs

4、修改客户端上创建文件的权限

实验配置文件在服务端上的/etc/exports文件上面

**在上一个实验中,可以看到客户端设置对共享目录是可读可写,但是touch file的时候,会提示错误,这是因为客户端将服务端的共享目录挂载到本地设置的目录上时,在目录中创建文件,实质上是在服务端的主机上建立,因为服务端没有设置可写权限,所以会创建失败,具体设置情况如下:

1)可创建文件,权限为默认
1> 实验前测试及配置
[root@client ~]# cd /westos/linux/nfs
[root@client nfs]# ls
[root@client nfs]# touch file
touch: cannot touch ‘file’: Read-only file system
[root@client nfs]# touch file
touch: cannot touch ‘file’: Permission denied
2> 服务端配置
出现Read-only file system解决方法
[root@server ~]# vim /etc/exports
/westos/nfs     *(sync,rw)      ##rw表示可读可写
[root@server ~]# exportfs -rv     ##刷新生效之后,客户端再次创建文件,会出现permission denied的问题,这是因为服务端的共享目录权限问题
解决方法为:
[root@server ~]# chmod 777 /westos/nfs/
3> 客户端测试
[root@client ~]# cd /westos/linux/nfs
[root@client nfs]# ls
[root@client nfs]# touch file
[root@client nfs]# ls -l
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec  9 11:15 file
2)设置客户端创建文件的用户

由上一个实验可以看到,默认创建文件的用户为nfsnobody,这个用户可以进行设置

1> 指定创建文件的用户为一个服务端指定的用户
<1> 服务端设置
[root@server ~]# useradd westos
[root@server ~]# id westos
uid=1001(westos) gid=1001(westos) groups=1001(westos)
[root@server ~]# vim /etc/exports
/westos/nfs     *(sync,rw,anonuid=1001,anongid=1001)
[root@server ~]# exportfs -rv
exporting *:/westos/nfs
<2> 客户端测试
[root@client nfs]# touch file1
[root@client nfs]# ls -l
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec  9 11:15 file
-rw-r--r-- 1      1001      1001 0 Dec  9 11:17 file1
**出现的用户名为服务器端的uid为1001的用户,出现1001而不是直接出现westos用户名的原因是客户端主机并没有uid为1001的用户**
2> 设置客户端如果为root用户的话,创建文件还是root用户,即root用户不转换

设置这个配置时,一定要注意将前面的anonuid和anongid删除掉,因为这两个会发生冲突,如果两个都有的话,就会是一个需要root用户转换,一个不需要转换

<1> 服务端设置
[root@server ~]# vim /etc/exports
/westos/nfs     *(sync,rw,no_root_squash)   ##no_root_squash表示超级用户不转换身份
[root@server ~]# exportfs -rv
exporting *:/westos/nfs
<2> 客户端测试
[root@client nfs]# touch file2
[root@client nfs]# ls -l
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec  9 11:15 file
-rw-r--r-- 1      1001      1001 0 Dec  9 11:17 file1
-rw-r--r-- 1 root      root      0 Dec  9 11:17 file2