目录

一:什么是NFS服务?

二:NFS的挂载原理

三.NFS工作原理

四.NFS服务的配置

Ⅰ.安装NFS服务

Ⅱ.相关配置文件

/etc/exports                           NFS服务的主要配置文件

/usr/sbin/exportfs                   NFS服务的管理命令

/usr/sbin/showmount              客户端的查看命令

/var/lib/nfs/etab                      记录NFS分享出来的目录的完整权限设定值

/var/lib/nfs/xtab                      记录曾经登录过的客户端信息

Ⅲ.NFS实践

①创建一个共享目录

②编写NFS服务的主配置文件

③挂载共享目录

⑤用客户端centos 8检查,使用showmount  -e  服务器IP地址 命令连接服务器的nfs服务

⑤:在客户端挂载共享目录

⑥NFS的共享权限和访问控制

⑦卸载已挂载的共享目录

 五:Autofs自动挂载服务

Ⅰ.Autofs和mount的区别

Ⅱ.Autofs挂载的优点

Ⅲ.Autofs挂载的使用

1.安装服务:

2.修改配置文件(主配置+子配置文件)

3.配置完毕:


一:什么是NFS服务?

       NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。

        NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利

NFS一般用来存储共享视频,图片等静态数据

二:NFS的挂载原理

linux基础第9节 ----配置与管理NFS服务器_linux

当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。

挂载后,NFS客户端查看磁盘信息命令:#df –h。

三.NFS工作原理

linux基础第9节 ----配置与管理NFS服务器_客户端_02

1.首先服务器端启动RPC服务,并开启111端口

2.服务器端启动NFS服务,并向RPC注册端口信息

3.客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

4.服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

5.客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

四.NFS服务的配置

Ⅰ.安装NFS服务

①服务器安装nfs-utils软件:

linux基础第9节 ----配置与管理NFS服务器_客户端_03

 ②关闭防火墙或者放行nfs服务

linux基础第9节 ----配置与管理NFS服务器_配置文件_04

③关闭Selinux

linux基础第9节 ----配置与管理NFS服务器_运维_05

 ④客户端centos8 安装nfs-utils软件:

linux基础第9节 ----配置与管理NFS服务器_服务器_06

 ⑤客户端centos8放行nfs服务

linux基础第9节 ----配置与管理NFS服务器_运维_07

⑥客户端centos8关闭selinux

linux基础第9节 ----配置与管理NFS服务器_linux_08

Ⅱ.相关配置文件

/etc/exports                           NFS服务的主要配置文件

linux基础第9节 ----配置与管理NFS服务器_客户端_09

默认是一个空文件,需要自己编写内容

格式是:

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

A:输出目录

输出目录是指NFS系统中需要共享给客户机使用的目录;

B:客户端

客户端是指网络中可以访问这个NFS输出目录的计算机;

客户端常用的指定方法:

  • 指定IP地址的主机;例192.168.1.1
  • 指定子网里的主机;例192.168.0.0/24 192.168.0.0/255.255.255.0
  • 指定域名内的主机;例david.bsmart.cn
  • 指定域中所有的主机;例*.bsmart.cn
  • 指定所有主机:*

C:NFS选项

a:访问权限选项:

  • ro :只读
  • rw:读写

b.用户映射选项

  • all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
  • no_all_squash:与all_squash取反(默认设置);
  • root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
  • no_root_squash:与rootsquash取反;
  • anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
  • anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

c.其它选项

  • secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
  • insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
  • sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
  • async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
  • wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
  • no_wdelay:若有写操作则立即执行,应与sync配合使用;
  • subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
  • no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

/usr/sbin/exportfs                   NFS服务的管理命令

默认是乱码文

linux基础第9节 ----配置与管理NFS服务器_配置文件_10

/usr/sbin/showmount              客户端的查看命令

/var/lib/nfs/etab                      记录NFS分享出来的目录的完整权限设定值

开始是一个空文件

/var/lib/nfs/xtab                      记录曾经登录过的客户端信息

刚开始都是空文件,后面再看

Ⅲ.NFS实践

①创建一个共享目录

linux基础第9节 ----配置与管理NFS服务器_运维_11

②编写NFS服务的主配置文件

linux基础第9节 ----配置与管理NFS服务器_客户端_12

 这个意思就是:对所有用户共享/home/public目录,具有读写权限

③挂载共享目录

linux基础第9节 ----配置与管理NFS服务器_配置文件_13

扩展:

exportfs命令需要参考配置文件“/etc/exportfs”。也可以直接在命令行中指定要共享的NFS文件系统。

语法格式: export [参数] [目录]

常用参数:

-a全部挂载或者全部卸载-r重新挂载-u卸载某一个目录-v显示共享目录

exports:配置nfs的文件

exportfs:linux命令

当修改了/etc/exports后,并不需要重启nfs服务,只要用exportfs重新扫描一次NFS主配置文件,并且重新加载即可

exportfs    [-aruv] 

参数 含义 
a  全部挂载(或卸载)   /etc/exports 档案内的设定 
r   重新挂载  /etc/exports 里面的设定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的内容 
u  卸载某一目录 
v   在export的时候,将分享的目录显示到荧屏上 
#exportfs -rv//重新export一次 
#exportfs -au//全部卸载 

#:exportfs -r  //重新挂载一次  /etc/exports 这里里面的内容;

⑤用客户端centos 8检查,使用showmount  -e  服务器IP地址 命令连接服务器的nfs服务

linux基础第9节 ----配置与管理NFS服务器_客户端_14

在客户端showmount -e 192.168.122.10遇到以下错误提示,“clnt_create: RPC: Unable to receive

解决办法:在服务器redhat8上

linux基础第9节 ----配置与管理NFS服务器_客户端_15

这时,在客户端centos8上再次尝试

linux基础第9节 ----配置与管理NFS服务器_配置文件_16

 扩展:

如果在客户端showmount -e 服务器IP地址 遇到以下错误提示:clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

问题原因:服务端的防火墙上默认没有开启nfs服务相应的端口

解决办法:

1.简单粗暴的关闭防火墙

[root@localhost~]#systemctl stop firewalld.service

linux基础第9节 ----配置与管理NFS服务器_服务器_17

2. 在设置了防火墙的环境中使用NFS,需要在防火墙上打开如下端口:

a. portmap 端口 111 udp/tcp;
b. nfsd 端口 2049 udp/tcp;
c. mountd 端口 "xxx" udp/tcp

[root@localhost~]# vim /etc/services    <   /etc/services文件是记录网络服务名和它们对应使用的端口号及协议 >

linux基础第9节 ----配置与管理NFS服务器_客户端_18

 系统 RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768--65535)来进行通讯,我们可以通过编辑/etc/services 文件为 mountd指定一个固定端口:
# vim /etc/services
在末尾添加<按住shirt+g跳到最后一行>
mountd 1011/udp
mountd 1011/tcp

linux基础第9节 ----配置与管理NFS服务器_配置文件_19


[root@localhost~]# exportfs -a


现在我们会发现 mountd已经和端口 1011绑定了。

另外,nfs中需要通讯的服务还有 rpc.lockd和 rpc.statd,其中对lockd我们可以用类似的方法来指定固定端口,
# vim /etc/services
添加
lockd 35000/ucp
lockd 35000/tdp
# exportfs -a

⑤:在客户端挂载共享目录

命令格式:[root@localhost~]#mount NFS服务器IP:共享目录 本地挂载目录

linux基础第9节 ----配置与管理NFS服务器_服务器_20

 常见错误1:

报错:mount.nfs: mount point /mnt/nfs does not exist

原因:挂载点不存在

解决办法:创建挂载点后重新挂载

常见错误2:

报错:mount.nfs: Connection refused

原因1:连接失败,查看是不是nfs服务或者rpcbind服务没开

解决办法:先开启rpcbind服务在开启nfs服务

原因2:rpc没有注册成功

解决办法:

[root@localhost~]#rpcinfo -p          //查看服务的rpc注册结果 

linux基础第9节 ----配置与管理NFS服务器_客户端_21

[root@localhost~]#systemctl status nfs-server  //查看nfs服务的启动状况

[root@localhost~]#systemctl start nfs-server    //启动nfs服务

[root@localhost~]#rpcinfo -p       //再次查看服务的rpc注册结果

linux基础第9节 ----配置与管理NFS服务器_服务器_22

这样基本就解决了,再次挂载就不会出现毛病了。 

常见错误2:

报错:mount.nfs: Connection timed out

原因:连接超时,查看是不是权限问题,或者是防火墙机制问题

解决办法:关闭防火墙,把共享权限改为775,在共享文件里面添加一个选项insecure

⑥NFS的共享权限和访问控制

现在我们在/mnt 里面建立一个文件,看看权限是什么

linux基础第9节 ----配置与管理NFS服务器_服务器_23

我用root 用户建立的文件,变成了nobody 用户。

原因就是我在配置文件默认root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);

常见问题:创建文件出现permission deny 权限不足

原因:/home/public共享目录你没有给其他用户写的权限

解决办法:[root@localhost~]#chmod -R 777 /home/public

关于权限的分析

  1. 客户端连接时候,对普通用户的检查

    a. 如果明确设定了普通用户被压缩的身份,那么此时客户端用户的身份转换为指定用户;

    b. 如果NFS server上面有同名用户,那么此时客户端登录账户的身份转换为NFS server上面的同名用户;

    c. 如果没有明确指定,也没有同名用户,那么此时 用户身份被压缩成nfsnobody;

  2. 客户端连接的时候,对root的检查

    a. 如果设置no_root_squash,那么此时root用户的身份被压缩为NFS server上面的root;

    b. 如果设置了all_squash、anonuid、anongid,此时root 身份被压缩为指定用户;

    c. 如果没有明确指定,此时root用户被压缩为nfsnobody;

    d. 如果同时指定no_root_squash与all_squash 用户将被压缩为 nfsnobody,如果设置了anonuid、anongid将被压缩到所指定的用户与组;

⑦卸载已挂载的共享目录

格式:umount    挂载点

linux基础第9节 ----配置与管理NFS服务器_服务器_24

 五:Autofs自动挂载服务

Ⅰ.Autofs和mount的区别

       Autofs服务程序与mount命令不同之处在于它是一种守护进程。只有检测到用户试图访问一个尚未挂载的文件系统时,才会自动检测并挂载该文件系统。

Ⅱ.Autofs挂载的优点

  1. 设置开机不一定要挂载目录,当用的时候才会挂载
  2. 用户不适用自动挂载的目录,过一段时间,会自动卸载

Ⅲ.Autofs挂载的使用

1.安装服务:

linux基础第9节 ----配置与管理NFS服务器_配置文件_25

2.修改配置文件(主配置+子配置文件)

autofs服务程序的主配置文件需要按照"挂载目录  子配置文件"的格式写入配置。

挂载目录是设备要挂载位置的上一级目录。

例如:挂盘挂载在/mnt/cdrom目录中,所以挂载目录就是/mnt

[root@localhost ~]# vim /etc/auto.master

在/misc     /etc/auto.misc  下面添加一行

/挂载的目录    子配置文件 

子配置文件是对这个目录内的挂载信息的进一步说明,子配置文件需要用户自定义。

子配置文件中需要按照"挂载目录  挂载文件类型及权限 设备名称"的格式写入配置

例如:[root@localhost~]#vim  /etc/cdrom.misc   <自定义的名称>

cdrom     -fstype=iso9660,ro,nosuid,nodev     :/dev/cdrom

//cdrom   挂载目录

// -fstype=iso9660:文件系统格式参数

//ro,nosuid,nodev :权限
// :/dev/cdrom    设备名称<被挂载的目录>   

3.配置完毕:

[root@localhost ~]# systemctl restart autofs.service 
[root@localhost ~]# systemctl enable autofs.service    //重启autofs服务并设置为自启动

linux基础第9节 ----配置与管理NFS服务器_配置文件_26