04_FTP文件传输与目录共享
一、FTP文件传输
1.1、FTP 概述
FTP(File Transfer Protocol)是文件传输协议,用于在网络上文件传输。
它应用于 pc机和服务器之间的数据传递。它在传输时工具是有图形操作的。
属于 应用层协议,默认端口:
- 21:控制连接(发送命令、认证) 长驻端口 检查服务是否启动的标志
- 20:数据连接(传输文件)
支持两种模式:
- 主动模式(Active Mode)
- 被动模式(Passive Mode)
模式都是针对于服务器端。
主动模式
1. 客户端连接服务器 21 端口 进行控制会话 2. 客户端告诉服务器:我在某个端口等你 3. 服务器从 20 端口 主动连接客户端的数据端口
- 缺点:客户端防火墙可能阻止服务器的主动连接

被动模式
1. 客户端连接服务器 21 端口 2. 服务器告诉客户端:我开了一个临时端口等你来 3. 客户端主动连接这个端口传输数据
- 优点:客户端发起所有连接,防火墙更容易放行
- 缺点:服务器开放的端口过多,对于服务器的安全性降低

1.2、FTP 常见用途
- 网站文件上传/下载(网页发布)
- 企业内部文件分发
1.3、FTP 服务软件
在 Linux 中,常用的 FTP 服务软件:
vsftpd(Very Secure FTP Daemon) → 默认安全性高,CentOS 官方推荐
- proftpd(功能丰富,但相对复杂)
- pure-ftpd(轻量化)
1.4、FTP服务器搭建与使用
1.4.1、安装和防火墙处理
1. node1上安装vsftpd服务(FTP服务器)
# 安装
[root@node1 /root]# dnf install -y vsftpd
已安装:
vsftpd-3.0.5-8.el9.x86_64
完毕!
# 检查
[root@node1 /root]# rpm -qa vsftpd
vsftpd-3.0.5-8.el9.x86_64注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
# 开机自启动 它不是必须的
# systemctl enable vsftpd
# 启动ftp服务
[root@node1 /data]# systemctl start vsftpd
# 查看服务状态
[root@node1 /data]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; preset: disabled)
# 已经启动了ftp服务
Active: active (running) since Sat 2026-03-28 12:08:34 CST; 7s ago
Process: 4378 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 4379 (vsftpd)
Tasks: 1 (limit: 10867)
Memory: 736.0K
CPU: 3ms
CGroup: /system.slice/vsftpd.service
└─4379 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
3月 28 12:08:34 node1 systemd[1]: Starting Vsftpd ftp daemon...
3月 28 12:08:34 node1 systemd[1]: Started Vsftpd ftp daemon.
# 查看端口
[root@node1 /data]# ss -tunpl | grep 21
tcp LISTEN 0 32 *:21 *:* users:(("vsftpd",pid=4379,fd=3))
# 查看进程
[root@node1 /data]# ps aux | grep vsftpd
root 4379 0.0 0.0 10332 1088 ? Ss 12:08 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
# 允许ftp服务能放行
[root@node01 ~]# setenforce 0
[root@node01 ~]# firewall-cmd --permanent --add-service=ftp --zone=public
[root@node01 ~]# firewall-cmd --reload注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
1.4.2、匿名访问配置 node1
##### node1
# 数据准备
mkdir /data
cd /data
rm -rf *
mkdir ftpdata anon
echo 1111 >/data/anon/test.txt
-------------------------------修改配置--------------------------------------------
##### 修改vsftpd服务的配置
# 进入到vsftpd服务的配置目录
[root@node1 /data/ftpdata]# cd /etc/vsftpd/
# 查看当前目录中的文件列表
[root@node1 /etc/vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
# 备份一下
[root@node1 /etc/vsftpd]# cp vsftpd.conf vsftpd.conf.bak
# 打开编辑
[root@node01 vsftpd]# vi vsftpd.conf
##### 设置以下几个配置项:
# 修改 允许匿名用户访问
anonymous_enable=YES
# 新增 此选项没有,需要手动来书写,最后在最底部来添加
# 设置匿名用户默认的根目录
anon_root=/data/anon
# 允许匿名用户上传文件
anon_upload_enable=YES
# 运行匿名用户创建文件夹
anon_mkdir_write_enable=YES
# 新增 此选项没有,需要手动来书写,最后在最底部来添加
# 允许匿名用户删除和重命名文件
anon_other_write_enable=YES
##### 修改配置文件, 记得重启下FTP服务
[root@node1 /etc/vsftpd]# systemctl restart vsftpd
注:出于安全考虑,vsftpd 的默认机制严禁用户对自己的根目录拥有写权限。如果检测到根目录权限过高(如 777),服务会直接报错,导致用户无法登录注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
1.4.3、命令端访问【了解】 node2
在node2上安装FTP客户端工具
### 安装
# 命令行 FTP 客户端
dnf install -y lftp
### 连接
lftp ftp://node1
> ls 查看
> pwd 当前位置
> cd 切换目录
> get 下载 你执行 ftp连接时路径在何处,get下载的文件就在何处
> put 上传 你执行 ftp连接时路径在何处,put上传的文件就在何处
> bye 离开
-------------------------------------- node2 ---------------------------------------
[root@node2 /root]# echo 1111 >node2.txt
[root@node2 /root]# ls
node2.txt test.txt
[root@node2 /root]# lftp ftp://node1
lftp node1:/> put node2.txt
# 上传到的目录你没有权限
put: 访问失败: 553 Could not create file. (node2.txt)
-------------------------------------- node1 ---------------------------------------
# 给/data/anon 目录添加其他用户为可写权限, /data/anon 它是ftp的匿名用户的根目录
[root@node1 /data]# chmod o+w anon/
-------------------------------------- node2 ---------------------------------------
[root@node2 /root]# lftp ftp://node1
# 查看是否连接成功
lftp node1:~> ls
# 报错,因为vsftp为了安全不让 ftp的根目录有写的权限,有就不让连接
ls: 登录失败: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
-------------------------------------- node1 ---------------------------------------
[root@node1 /data]# chmod o-w anon/
# 在anon 目录下面再创建一个public目录,让它可写
[root@node1 /data/anon]# mkdir public
[root@node1 /data/anon]# chmod o+w public
-------------------------------------- node2 ---------------------------------------
[root@node2 /root]# lftp ftp://node1
# 查看是否连接成功
lftp node1:~> ls
drwxr-xrwx 2 0 0 6 Apr 30 06:41 public
-rw-r--r-- 1 0 0 5 Apr 30 06:30 test.txt
lftp node1:/> cd public/
lftp node1:/public> put node2.txt
5 bytes transferred
-------------------------------------- node1 ---------------------------------------
[root@node1 /data/anon]# ll public/
总用量 4
-rw-------. 1 ftp ftp 5 4月 30 14:41 node2.txt
# 去除掉原来的其他用户的权限
[root@node1 /data/anon]# chmod o-w public/
# 递归修改目录它的所属用户和所属组
[root@node1 /data/anon]# chown -R ftp.ftp public注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
1.4.4、图形工具访问
FileZilla这是免费的 FTP图形解决方案。*FileZilla 客户端*不仅支持 FTP,还支持 SFTP。它是根据 GNU 通用公共许可证的条款免费分发的开源软件。
FileZilla还是一款跨平台的软件。
下载地址:https://filezilla-project.org/download.php?type=client
匿名登录ftp

1.4.5、禁止匿名用户访问 node1
在 node1 修改FTP的相关配置
vi /etc/vsftpd/vsftpd.conf
###### 修改以下配置:
# 禁用匿名用户访问
anonymous_enable=NO
# 保存文件并退出,重启服务
systemctl restart vsftpd
# 匿名登录,就不能成功了
响应: 530 Login incorrect.
错误: 严重错误: 无法连接到服务器注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
1.4.6、本地用户登录
使用 Linux 系统用户,直接访问自己的家目录,安全性比匿名高,可读写。
在 node1 修改FTP的相关配置
vi /etc/vsftpd/vsftpd.conf
###### 修改以下配置:
# 允许本地用户登录 默认就是yes,不用修改
local_enable=YES
# 允许写入操作(上传文件) 默认就是yes,不用修改
write_enable=YES
# 在文件底部写如下内容
# 开启 chroot 限制,防止用户跳出共享目录
chroot_local_user=YES
# 共享目录(约束) -- 新增
local_root=/data/ftpdata
# 核心设置:如果根目录有写权限,必须开启此项
#allow_writeable_chroot=YES
# 设置上传文件的默认权限 002
# 默认文件权限 666
# 默认目录权限 777
#local_umask=022
# 保存文件并退出 esc :wq
# 重启服务
[root@node1 /data/anon]# systemctl restart vsftpd
# 创建数据
[root@node1 /data/ftpdata]# mkdir -p /data/ftpdata/mp4
[root@node1 /data/ftpdata]# echo 1111 >/data/ftpdata/mp4/a.txt
[root@node1 /data/ftpdata]# chmod -R 777 /data/ftpdata/mp4注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
[root@node1 /data/ftpdata]# useradd ftpuser1
# 设置密码
[root@node01 /data/ftpdata]# echo 'ftpuser1:123' | chpasswd
------------------------------------------------------------------------------
[root@node1 /data/ftpdata]# useradd -d /data/ftpdata/ftpuser2 ftpuser2
[root@node1 /data/ftpdata]# echo 'ftpuser2:123'|chpasswd
[root@node1 /data/ftpdata]# usermod -m -d /data/ftpdata/ftpuser1 ftpuser1
[root@node1 /data/ftpdata]# ll
总用量 0
drwx------. 2 ftpuser1 ftpuser1 79 4月 30 15:23 ftpuser1
drwx------. 2 ftpuser2 ftpuser2 79 4月 30 15:22 ftpuser2
[root@node1 /data/ftpdata]# chown -R .ftpuser1 ftpuser2
[root@node1 /data/ftpdata]# ll
总用量 0
drwx------. 2 ftpuser1 ftpuser1 79 4月 30 15:23 ftpuser1
drwx------. 2 ftpuser2 ftpuser1 79 4月 30 15:22 ftpuser2
[root@node1 /data/ftpdata]# chmod -R g=rx ftpuser2注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
# 先安装 dnf install -y lftp
# lftp ftp://用户名:密码@ftp服务器主机地址
[root@node2 /root]# lftp ftp://ftpuser1:123@node1
lftp ftpuser1@node1:~> ls
drwxrwxrwx 2 0 0 19 Apr 30 07:00 mp4
lftp ftpuser1@node1:/> cd mp4
lftp ftpuser1@node1:/mp4> ls
-rwxrwxrwx 1 0 0 5 Apr 30 07:00 a.txt
lftp ftpuser1@node1:/mp4> bye注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
1.4.7、用户名单列表使用
在ftp配置/etc/vsftpd目录下,有2个文件:ftpusers和user_list,主要是用来控制哪些用户可以或不能访问 FTP 服务,管理用户访问权限,防止某些用户登录FTP服务器。
- ftpusers 文件:用于列出不允许访问 FTP 服务的用户
- user_list文件:控制哪些用户可以访问 FTP 服务,具体取决于配置文件中
userlist_enable和userlist_deny的设置
- userlist_enable=YES 启用或禁用
vsftpd服务的系统用户列表功能。
- userlist_deny=YES 默认情况下,列在
user_list文件中的用户会被拒绝访问。
- userlist_deny=NO 列在
user_list文件中的用户将被允许访问,除非在ftpusers中显式禁止。
- 如果一个用户同时在ftpusers文件中存在,也是user_list中存在,则以ftpusers文件中的优先级为高.
[root@node01 vsftpd]# ls
ftpusers user_list
# ftpusers 只要有用户存在,则此用户就不允许ftp登录
vi /etc/vsftpd/vsftpd.conf
#### 修改以下内容:
# 开启user_list权限设置功能 默认就是开启的
userlist_enable=YES
# 添加一下内容:
# 开启白名单,运行文件中的用户,在user_list文件中写入的用户才被允许登录ftp
# 如果开启了user_list配置,则本地用户要想登录ftp服务,则必须要指定一下才行
# 开启允许访问ftp的本地用户
userlist_deny=NO
# 保存后,重启一下FTP服务
systemctl restart vsftpd
------------------ 设置可以登录的本地用户
[root@node1 /etc/vsftpd]# cp user_list user_list.bak
[root@node1 /etc/vsftpd]# vi user_list
# 这两个用户是可以被允许登录的
ftpuser1
ftpuser3注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
1.4.8、常见错误

此错误表示的当前FTP文件系统的根目录的权限过大,存在写权限, 一般就会爆出如上错误, 因为FTP默认情况下,不允许文件系统根目录存在写权限, 以保证根目录的文件安全(根目录下可能会放置一些系统文件信息, 担心出现破坏)

当在ftp中看到550错误的时候, 一般就是当前这个用户没有权限操作这个文件或目录,如果想要操作, 请赋予相应权限
1.5、ftp案例
1. 请将node1作为ftp的服务器, windows为ftp的客户端,并完成ftp服务端与ftp客户端进行文件的上传与下载 2. FTP服务器要求如下:
1. 不允许匿名用户访问 2. /export/public目录当前ftp的根目录 3. 在FTP服务器端的/export/public目录下, 创建logs、src目录,并将目录的权限所有用户设置写入权限 4. 在windows客户端的目录下, 创建 a.log hello.java文件, 并将这两个文件通过ftp客户端上传到服务器刚刚创建的logs和src目录, a.log放置到logs目录, hello.java放置到src目录 5. 设置黑白名单:
1. 在服务器端 创建 zhangsan lisi wangwu 三个用户, 并设置密码均为123 2. 将zhangsan放置到黑名单,lisi和wangwu用户放置到白名单, 验证zhangsan无法访问,lisi和wangwu可以正常访问
# node1 安装 vsftpd 软件
dnf install -y vsftpd
# 环境准备
[root@node1 /etc/vsftpd]# cd /etc/vsftpd/
[root@node1 /etc/vsftpd]# cp vsftpd.conf.2026-03-28 vsftpd.conf
# node1 创建对应的目录
# 755
mkdir -p /export/public/{log,src}
cd /export/public
chmod 777 log
chmod 777 src
# node1 创建用户
useradd zhangsan
useradd lisi
useradd wangwu
echo 'zhangsan:123' | chpasswd
echo 'lisi:123' | chpasswd
echo 'wangwu:123' | chpasswd
# node1中去修改配置文件
vi /etc/vsftpd/vsftpd.conf
# 开启 chroot 限制,防止用户跳出共享目录 修改
chroot_local_user=YES
# 共享目录(约束) -- 新增
local_root=/export/public
# 添加一下内容:
# 开启白名单,运行文件中的用户,在user_list文件中写入的用户才被允许登录ftp
# 如果开启了user_list配置,则本地用户要想登录ftp服务,则必须要指定一下才行
userlist_deny=NO
# 保存后,重启一下FTP服务
systemctl restart vsftpd
# 设置黑名单
vi /etc/vsftpd/ftpusers
zhangsan
# 设置能访问的本地用户
vi /etc/vsftpd/user_list
lisi
wangwu
# 关闭防火墙
setenforce 0
systemctl stop firewalld注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
二、Samba共享
2.1、Samba 是什么?
Samba 是一种在 Linux/Unix 与 Windows 系统之间 实现文件共享和打印服务的开源软件。
它使用 SMB/CIFS 协议,使 Linux 服务器可以像 Windows 文件服务器一样被访问。
典型用途:
- Linux 和 Windows 之间共享文件夹
- Linux 作为局域网文件服务器
2.2、Samba 工作原理
1. Windows 客户端
- 通过 SMB/CIFS 协议 访问共享。
- 在资源管理器里输入
\\192.168.88.10\sharedata。
2. Samba 服务端
smbd处理文件共享请求、权限验证、数据传输。
nmbd负责 NetBIOS 名称解析(让局域网内能用主机名直接访问)。
3. Linux 文件系统
- Samba 只是中间桥梁,最终还是调用 Linux 内核的文件系统接口来读写磁盘。
┌────────────────────────┐
│ Windows 客户端 │
│ (支持SMB/CIFS协议) │
└──────────┬─────────────┘
│
│ SMB/CIFS 协议
▼
┌────────────────────────┐
│ Samba 服务进程 │
│ smb(文件共享服务) │
│ nmb(NetBIOS解析) │
└──────────┬─────────────┘
│
│ 本地文件系统调用
▼
┌────────────────────────┐
│ Linux 文件系统层 │
│ /data/sambashare 目录 |
└────────────────────────┘注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3、Samba服务
2.3.1、安装Samba服务
在Linux服务器中完成samba软件安装,这里在node1服务器中安装
dnf install -y samba注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3.2、创建共享目录
mkdir -p /data/smbshare注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3.3、修改配置文件
配置文件所在位置:/etc/samba/smb.conf
配置文件配置说明文档:<cite doc-id="HaFBwaoDAiBnZvkT21McEn5LnWf" file-type="wiki" title="相关配置文件配置说明" type="doc"></cite>
[root@node01 data]# cd /etc/samba/
# 备份
[root@node1 /etc/samba]# cp smb.conf smb.conf.bak
# 修改
[root@node01 samba]# vi smb.conf
# 增加共享配置文件信息
# 模块名
[datashare]
comment = samba share
# 要共享的目录 -- 注意权限问题
path = /data/smbshare
read only = No注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3.4、配置用户信息
创建一个本地用户, 添加到SMB服务中, 便于后续基于这个用户来访问
# 创建本地用户
[root@node01 samba]# useradd smbuser -s /sbin/nologin
# 基于本地用户创建samba授权登录密码 密码为 123456 虚拟用户和密码
#smbpasswd -a smbuser
[root@node01 samba]# smbpasswd -a smbuser
New SMB password:输入密码 你要想的密码
Retype new SMB password:确认的密码
Added user smbuser.
# -a 添加一个 Samba 用户(首次添加必须用这个)
# -x 删除一个 Samba 用户
# smbpasswd 用户名 => 修改密码
# 验证用户是否添加成功
[root@node01 samba]# pdbedit -L
smbuser:1003:
# 把 samba中的根目录修改下所属用户和所属组
[root@node01 samba]# chown smbuser.smbuser -R /data/smbshare注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3.5、启动samba服务
# 启动
systemctl start nmb
systemctl start smb注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.3.6、开启防火墙
[root@node01 samba]# setenforce 0
[root@node01 samba]# firewall-cmd --add-service=samba --permanent
success
[root@node01 samba]# firewall-cmd --reload
success注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.4、访问操作
2.4.1、在Linux主机访问
本次以node2服务器为客户端来进行访问samba,linux访问samba需要安装客户端
# 查看是否存在smb客户端
rpm -qa | grep samba
# 安装
dnf install -y samba-client注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
# smbuser 在 192.168.88.10 服务器中对共享的目录一定要有相关的操作权限
# datashare samba模块名
smbclient //192.168.88.10/datashare -U smbuser
# 进入共享目录, 输入 ? 可以查看支持的命令注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
2.4.2、在windows主机访问
在windows中打开文件资源管理器后,在地址栏中输出samba服务器主机地址,注意最前面的符号为反向的\\
# 在linux node1中完成对目录的权限修改
chown -R smbuser.smbuser /data/smbshare
# 在windows中设置就可以
\\192.168.88.10 回车注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
三、NFS目录共享
3.1、基本介绍
NFS(Network File System,网络文件系统)是一种 允许不同主机通过网络共享文件和目录 的协议,属于 分布式文件系统。使得远程主机能够像本地磁盘一样访问和操作文件。
NFS 的作用
- 在局域网内共享文件(Linux ↔ Linux)
- 集中化存储,减少重复数据
- 方便多台服务器访问同一份数据
- 作为虚拟化、容器环境的共享存储(KVM、Docker、K8s)
NFS 通常运行在 TCP/UDP 2049 端口,配合 RPC(远程过程调用) 进行通信。
3.2、NFS 工作原理
1. NFS 服务器端
- 用户自定义一个目录用于共享,及分配对应权限
- 使用 rpc(rpcbind)提供端口映射(111)
- NFS 服务监听客户端请求并响应
2. NFS 客户端
- 发送挂载请求到 NFS 服务器
- 通过 RPC 获取文件元数据(文件名,文件属性)
- 读写数据像本地一样操作
+----------------+ +----------------+
| NFS Client |<----->| NFS Server |
| (挂载端) | RPC | (导出端) |
+----------------+ +----------------+
^
|
v
+----------------+
| 应用程序 |
| (读写文件) |
+----------------+
RPC 统一管理服务端各 NFS 服务组件(mountd、nfsd 等)的动态端口,并将这些端口信息记录在 rpcbind 中。
当客户端发起请求时,客户端首先与 rpcbind 通信,查询目标 NFS 服务对应的实际端口号,读取nfs中的数据。注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
3.3、服务器端
在node1中创建一个目录/data,用于给node2或更多的服务器来连接,实现数据的共享。

3.3.1、安装
node1服务器中
# 检查是否已安装过
rpm -qa | grep nfs
# 安装 NFS 服务
dnf install -y nfs-utils注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
3.3.2、防火墙允许
node1服务器中
# 关闭selinux
setenforce 0
# 如果是学习阶段,可以直接停了防火墙
#systemctl stop firewalld
# 允许nfs服务对外提供访问
#firewall-cmd --permanent --add-service=nfs
#firewall-cmd --permanent --add-service=rpc-bind
#firewall-cmd --permanent --add-service=mount
firewall-cmd --permanent --add-service={nfs,rpc-bind,mountd} --zone=public
firewall-cmd --reload注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
3.3.3、创建共享目录
node1服务器中
# 创建需要共享的目录
[root@node1 /root]# rm -rf /data
[root@node1 /root]# mkdir /data
# 配置文件设置 ---- 主配置文件
[root@node1 /root]# vi /etc/exports
# 添加以下内容:
# /data 192.168.88.12(rw,sync,no_root_squash)
# /data 192.168.88.0/24(rw,sync,no_root_squash)
/data *(rw,sync,no_root_squash)
# 参数说明:
# ai提示词 /etc/exports 配置文件中所有的选项说明
/data : 这是要共享的目录路径,意味着 NFS 服务器将 /export/software 这个目录导出,允许客户端访问
* 表示所有客户端都可以访问这个共享目录
192.168.88.0/24 代表共享给某个网段
192.168.88.12 共享给某个IP
rw : 读写权限
ro : 只读权限
sync : 数据同步写入(安全但慢)
async : 异步写入(快但有丢数据风险)
no_root_squash : 不要压缩 root 用户的权限,保留 root 权限(有安全风险)
root_squash : 客户端 root 映射为 nobody(默认)
all_squash : 压制所有用户。将所有客户端用户都映射为匿名用户。
anonuid / anongid : 指定匿名用户映射到的UID和GID,与root_squash或all_squash配合使用。
# 启动服务
systemctl start nfs-server
# 开启自启动 -- 在确认没有任何问题时,再开机自启动
systemctl enable nfs-server
# 检查一下
systemctl status nfs-server
# 查看进程
ps aux | grep nfs
# 查看端口
ss -tunpl | grep 2049
ss -tunpl | grep 111注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
3.4、客户端挂载
3.4.1、安装
node2服务器中
# 安装客户端工具
dnf install -y nfs-utils
# 测试查看共享资源
[root@node2 ~]# showmount -e node1
Export list for node01:
# 看到此信息,表示已于node1互通了,可以共享使用node1共享目录
# 此列表中一定要有对应的目录和本身客户的访问ip地址或ip网段或*,如果这3者没有一个存在,则表示你和node1无法使用nfs
# 报错 mount.nfs: access denied by server while mounting 192.168.88.10:/data
/data 192.168.88.12注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
3.4.2、挂载使用
# 创建挂载目录
mkdir -p /mnt/nfsshare
# 执行挂载操作:
# mount:Linux挂载命令,用来将一个设备、分区或网络文件系统挂载到本地目录。
# -t nfs:指定挂载的文件系统类型是 NFS
# mount 以nfs类型来把 node01主机中共享的/data目录,挂载到本机中的 /mnt/nfsshare中
mount -t nfs node1:/data /mnt/nfsshare
# 执行后,可以通过df -h 的方式查看是否挂载成功
[root@node02 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 871M 0 871M 0% /dev/shm
tmpfs 349M 6.4M 342M 2% /run
efivarfs 256K 54K 198K 22% /sys/firmware/efi/efivars
/dev/mapper/cs-root 47G 3.2G 44G 7% /
/dev/nvme0n1p2 960M 226M 735M 24% /boot
/dev/nvme0n1p1 599M 7.5M 592M 2% /boot/efi
tmpfs 175M 4.0K 175M 1% /run/user/0
node1:/data/nfsdata 47G 3.3G 44G 7% /mnt/nfsshare
# 卸载方法
[root@node02 nfsshare]# cd
[root@node02 ~]# umount /mnt/nfsshare
# 卸载报错的情况
# 你在卸载前,一定要退出到目录外,才可以
[root@node02 nfsshare]# umount /mnt/nfsshare
umount.nfs4: /mnt/nfsshare: device is busy注意事项:
- 修改配置前先备份原文件,尤其是 SSH、Nginx、数据库和 Kubernetes 生产配置。
同步说明
本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。