NFS 文件服务器简介
1.1)NFS (Network File System) —— 可以通过网络,让不同的机器,不同的操作系统可以共享彼此的的文件(share file)
NFS 服务的端口号 —— 2049
NFS 其他程序启动的额外端口号 —— 小于 1024 的端口 (默认 NFS 用来传输的端口是随机选择的)
备注:
- Unix Like 主机连接到另外一台 Unix Like 主机来共享彼此的文件时,使用 NFS 要不 SAMBA 服务器快速且方便的多。
- NFS 的配置很简单,只要启动 RPC (Remote Procedure Call,即 rpcbind 软件)远程过程调用协议,就能够搭建。
1.2)RPC (Remote Procedure Call)远程过程调用协议 的主要功能:
指定每个 NFS 功能所对应的 prot number ,并通知给客户端,让客户端可以连接到正确的端口上去。
RPC 固定使用 port 111 来监听客户端的需求,并向客户端响应正确的端口。
注意:
- 启动 NFS 之前,RPC 就需要先启动,否则 NFS 会无法向 RPC 注册。
- 若 RPC 重新启动,原先注册的数据会不见了,以此 RPC 重新启动后,它管理的所有服务都需要重新启动以重新向 RPC 注册。
客户端 有访问 NFS 文件需求时,它向 NFS 服务器端 请求数据流程:
- 客户端会向服务器端的 FPC (port 111)发出文件访问功能的查询需求
- 服务器端找到对应的已注册的 NFS daemon 端口后,通知给客户端
- 客户端了解正确端口后,可直接与 NFS daemon 连接
注意: 不论是 客户端,还是 服务器端 ,要使用 NFS 时,两者都需要启动 RPC 才行!!
1.3)NFS 启动的 RPC daemons
- rpc.nfsd :管理客户端是否能够使用服务器文件系统挂载信息等,还包含判断这个登录用户的 ID
- rpc.mount:管理 NFS 的文件系统,管理 NFS 共享目录的权限与安全设置的地方
服务启动脚本 —— /etc/init.d/nfs
1.4)NFS 的文件访问权限
在客户端已 NFS 使用服务器端的文件系统,还需具备:
- NFS 服务器已经开放可写入的权限 (与 /etc/exports 设置有关)。
- 实际的文件权限具有可写入 (w) 的权限。
- 用户账号,即 UID 的相关身份。
注意: NFS 本身的服务并没有进行用户身份验证,所以 NFS 通常需要与 NIS 这个可以确认客户端与服务器端身份一致的服搭配使用,以免身份的错乱。
NFS Server 端的配置
2.1)所需软件
- RPC 主程序:rpcbind
- NFS 主程序:nfs-utils
软件安装:
- rpm -qa | grep nfs
- rpm -qa | grep rpcbind
- dns install rpcbind
- dns install nfs
2.2) NFS 的软件结构
- 主要配置文件:/etc/exports # 使用 vim 主动建立
- NFS 文件系统维护命令:/usr/sbin/exportfs # NFS Server 共享的目录卸载或重新共享等
- 共享资源的日志文件:/var/lib/nfs/*tab # etab ,记录NFS 共享出来的目录的完整权限设定值;xtab,曾连接到此NFS 服务器的相关客户端的数据
- 客户端查询服务器共享资源的命令:/usr/sbin/showmount # 查看 NFS 共享出来的资源
2.3)启动 NFS
NFS 服务器端
- systemctl start nfs-server.service # 启动 nfs-sever 服务脚本
- systemctl start firewalld.service # 启动 火墙
- firewall-cmd --permanent --add-service=rpc-bind # 永久 添加信任服务 - rpc-bind
- firewall-cmd --permanent --add-service=mountd # 永久 添加信任服务 - mountd
- firewall-cmd --permanent --add-service=nfs # 永久 添加信任服务 - nfs
- firewall-cmd --reload # 重启 火墙
- firewall-cmd --list-all # 列出 所有 火墙信息
services: cockpit dhcpv6-client mountd nfs rpc-bind ssh
客户端测试
- showmount -e 172.25.254.20
Export list for 172.25.254.20:
2.4) /etc/exports 配置文件的语法参数
vim 主动建立主要配置文件:/etc/exports
- vim /etc/exports
1 ) NFS 共享目录
NFS 服务器端
- mkdir /nfs_westos # 创建共享目录 /nfs_westos
- vim /etc/exports # 编辑配置文件,权限设置
/nfs_westos 172.25.254.0(ro) 172.25.254.10(rw) # 172.25.254.0 网段 (ro 只读) 172.25.254.10 主机(rw 可读写)
- exportfs -rv # 生成 共享目录
- chmod 777 /nfs_westos # 添加 共享目录权限
客户端测试
- showmount -e 172.25.254.20
Export list for 172.25.254.20:
/nfs_westos 172.25.254.10,172.25.254.0
- mount 172.25.254.20:/nfs_westos /mnt # 挂载 NFS 共享目录 到客户端 /mnt
- touch /mnt/file # 172.25.254.20 对于 NFS 共享目录/nfs_westos 具有 rw 权限
- ls -l /mnt/file
-rw-r--r-- 1 nobody nobody 0 Jun 25 15:49 file # 默认访问的用户身份 nobody
2) 参数 no_root_squash —— root 用户身份不再 映射为 nobody
- vim /etc/exports # 编辑配置文件,参数设置
/nfs_westos 172.25.254.0(ro) 172.25.254.10(rw,no_root_squash)
- exportfs -rv # 修改生效
客户端测试
3) 参数 anonuid=xxx,anongid=xxx —— 指定用户身份
- vim /etc/exports # 编辑配置文件,参数设置
/nfs_westos 172.25.254.0(ro) 172.25.254.10(rw,anonuid=1000,anongid=1000)
- exportfs -rv # 修改生效
客户端测试
4 )参数 sync —— 更改生效后,同步数据到服务器
5 )参数 async —— 实时同步数据到服务器
NFS + autofs
安装 autofs
- dnf install autofs -y # 安装 autofs 服务,使用某共享目录时,自动挂载与卸载
测试 autofs 服务
- ls -ld /net
ls: cannot access '/net': No such file or directory
- systemctl start autofs.service # 启动 autofs.service 服务 之后
- ls -ld /net
drwxr-xr-x 2 root root 0 Jun 25 16:43 /net # 自动生成了 /net 目录
- cd /net # 位于 /net 目录 中
- ls
- cd 172.25.254.20 # 直接自动挂载,访问 172.25.254.20
nfs_westos
- cd nfs_westos
- ls
file file1 file3
自定义 NFS 共享目录的 挂载点 /westos/nfs
- mkdir /westos/nfs # 创建 自定义挂载点目录
- vim /etc/auto.master
/westos /etc/auto.nfs
- vim /etc/auto.nfs
nfs -rw 172.25.254.20:/nfs_westos
- systemctl restart autofs.service # 重启 autofs 服务
测试
- cd /westos/nfs # 自定义 挂载点 可以访问 NFS 共享目录
- ls
file file1 file3
- cd # 退出 autofs