系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客
文章目录
- 一、NFS 概述
- 1. 概述
- 2. 特点
- 二、NFS 工作原理
- 2.1 NFS 工作流程
- 2.2 挂载原理
- 三、NFS 服务部署
- 3.1 常用命令
- 3.2 服务器端配置
- 3.3 客户端配置
- 3.4 测试
- 四、总结
一、NFS 概述
1. 概述
NFS(Network File System)是一种基于 TCP/IP 传输的网络文件系统协议。通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。NAS 存储:NFS 服务的实现依赖于 RPC (Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持。手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs。
NFS 端口:2049,RPC 端口:111。
2. 特点
- 采用 TCP/IP 传输网络文件
- 安全性低
- 简单易操作
- 适合局域网环境
二、NFS 工作原理
NFS 服务器可以让 PC 将网络中的 NFS 服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利。
2.1 NFS 工作流程
- 首先服务器端启动 RPC 服务,并开启 111 端口。
- 服务器端启动 NFS 服务,并向 RPC 注册端口信息。
- 客户端启动 RPC(portmap 服务),向服务端的 RPC(portmap)服务请求服务端的 NFS 端口。
- 服务端的 RPC(portmap)服务反馈 NFS 端口信息给客户端。
- 客户端通过获取的 NFS 端口来建立和服务端的 NFS 连接并进行数据的传输。
2.2 挂载原理
当我们在 NFS 服务器设置好一个共享目录 /opt 后,其他的有权访问 NFS 服务器的 NFS 客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端 A 与客户端 B 挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端 /opt 的所有数据。
三、NFS 服务部署
3.1 常用命令
常用选项 | 描述 |
---|---|
rw | 允许读写 |
ro | 只读 |
sync | 同步写入 |
async | 先写入缓冲区,必要时才写入磁盘,速度快,但会丢数据 |
subtree_check | 若输出一个子目录,则 NFS 服务将检查其父目录权限 |
no_subtree_check | 若输出一个字目录,不检查父目录,提高效率 |
no_root_squash | 客户端以 root 登录时,赋予其本地 root 权限 |
root_squash | 客户端以 root 登录时,将其映射为匿名用户 |
all_squash | 将所有用户映射为匿名用户 |
exportfs -v // 查看详细的 NFS 信息
exportfs -r // 重读配置文件
showmount -e // 查看本机发布的 NFS 共享目录
showmount -e +IP // 查看 IP 地址发布的 NFS 共享目录
mount -t nfs 192.168.48.6:/opt /mnt // 将 NFS 服务端 192.168.48.6 下的 /opt 挂载到 /mnt 下
rpcinfo -p localhost // 查看 rpc 注册的端口信息
3.2 服务器端配置
1. 检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
2. 创建共享目录
vim /etc/exports // NFS 的配置文件,默认文件内容为空(无任何共享)
/opt 192.168.48.0/24(rw,sync,no_root_squash)
// 设置 /opt 为共享目录,允许 192.168.48.0 网段的 IP 地址主机访问
3. 启动服务或者 exportfs 加载配置
systemctl start rpcbind // 一定要先开启 rpcbind 服务
systemctl start nfs // 如服务已启动,更改完配置信息后需要重启服务
exportfs -ar --- 重新读取 /etc/exports 配置文件,更改生效
3.3 客户端配置
- 检查并安装软件
rpm -q rpcbind nfs-utils
yum install -y rpcbind nfs-utils
systemctl start rpcbind
systemctl start nfs
- 将共享目录挂载到本地
# showmount -e IP 查看对应的 IP 的服务器共享列表
[root@centos8 ~]# showmount -e 192.168.100.133
Export list for 192.168.100.133:
/shell *
/other 192.168.1000.0/24[root@centos8 ~]# mount -t nfs 192.168.100.133:/shell /mnt
3.4 测试
设置所有的用户都以特定的用户身份去操作 NFS 共享目录(示例配置以 nfs 用户身份)。
设置共享目录为 0755,除了 root 其他人没有 w 权限。
[root@localhost ~]# chmod 0755 /shell
[root@localhost ~]# ll -ld /shell/
drwxr-xr-x. 8 root root 143 8月 8 11:07 /shell/
服务配置共享有 w 权限。
[root@localhost ~]# cat /etc/exports
/shell *(rw,sync)
给与 nfs 用户 nfs 组共享目录 /shell 的 rw 权限。
[root@localhost ~]# setfacl -m u:nfs:rwx /shell
[root@localhost ~]# setfacl -m g:nfs:rwx /shell
在 NFS 服务端创建程序账号 nfs。
[root@localhost ~]# useradd -M -s /sbin/nologin nfs
[root@localhost ~]# id nfs
uid=1030(nfs) gid=1031(nfs) 组=1031(nfs)
修改配置,使所有人都以 nfs 身份使用共享目录。
[root@localhost ~]# vim /etc/exports
/shell *(rw,sync,all_squash,anonuid=1030,anongid=1031)
重启 NFS 服务。
[root@localhost ~]# systemctl restart nfs
挂载测试。
# 测试 root 管理用户
[root@centos8 ~]# whoami
root
[root@centos8 ~]# mount 192.168.50.147:/shell /mnt
[root@centos8 ~]# touch /mnt/root.sh
[root@centos8 ~]# ls -l /mnt/root.sh --- 因为当前客户端没有 1030 的账号,因此文件用户显示 uid
-rw-r--r--. 1 1030 1031 0 8月 7 23:48 /mnt/root.sh[root@localhost ~]# ls /shell/root.sh -l --- 在 NFS 服务端查看
-rw-r--r-- 1 nfs nfs 0 8月 8 11:48 /shell/root.sh
[root@centos8 ~]# umount /mnt# 测试普通用户
[root@centos8 ~]# su - c8
上一次登录:一 8月 7 23:06:10 EDT 2023 pts/2 上
[c8@centos8 ~]$ whoami
c8
[c8@centos8 ~]$ sudo mount 192.168.50.147:/shell /mnt/
[sudo] c8 的密码:
[c8@centos8 ~]$ [c8@centos8 ~]$
[c8@centos8 ~]$ touch /mnt/c88.sh
[c8@centos8 ~]$ ls -l /mnt/c88.sh
-rw-rw-r--. 1 1030 1031 0 8月 7 23:51 /mnt/c88.sh[root@localhost ~]# ls -l /shell/c88.sh
-rw-rw-r-- 1 nfs nfs 0 8月 8 11:51 /shell/c88.sh
[root@centos8 ~]# umount /mnt
四、总结
- NFS 服务多用于局域网内。
- 搭建服务时一定要先启动 rpc 后启动 nfs。
- 配置文件中的信息格式一定要对,否则报错。