如何快速搭建CentOS Minimal FTP服务器实现文件共享的详细步骤教程?
- 内容介绍
- 文章标签
- 相关推荐
快速搭建 CentOS Minimal FTP 服务器实现文件共享的完整步骤
1️⃣ 先决条件与常见痛点
在开始之前请先确认以下两点,避免后期遇到“服务启动失败”或“连接被拒绝”的尴尬:
- 程序已更新至最新补丁`sudo yum update -y`。老实说,
- 防火墙和 SELinux 已知状态若不确定。可先临时关闭 SELinux并确保 firewalld 开启。
2️⃣ 安装 vsftpd
bash sudo yum install vsftpd -y
3️⃣ 创建专门的 FTP 使用者
`vsftpd` 默认不允许匿名访问,建议创建本地使用者并限制其主目录。
`sudo useradd ftpuser` `sudo passwd ftpuser` 如需更安全,可将其家目录设为 /var/ftp/ftpuser 并赋予适当权限:
`sudo mkdir -p /var/ftp/ftpuser sudo chown ftpuser:ftpuser /var/ftp/ftpuser sudo chmod 750 /var/ftp/ftpuser`
4️⃣ 配置 vsftpd
Edit configuration file:
`sudo vi /etc/vsftpd/vsftpd.conf`
Add or modify following lines:
# 基础设置
listen=YES
anonymous_enable=NO # 禁止匿名登录。提高安全性
local_enable=YES # 允许本地使用者登录
write_enable=YES # 允许写入操作
# 限制目录范围,防止越权访问
chroot_local_user=YES # 将使用者限制在自己的主目录中
allow_writeable_chroot=YES # 在 chroot 环境中允许写操作
# 使用 PAM 与程序账户同步认证
pam_service_name=vsftpd
# 日志记录方法
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
# 防止密码暴力攻击,默认开启:
idle_session_timeout=600 # 空闲会话超时时间
connect_from_port_20=YES # 支持主动模式传输
⚠️ 常见配置错误检查清单:
- `listen=`是否为 YES 或 NO?
- `local_root=` 是否指向正确的目录?不过,如果你使用了自定义根目录,请确保方法存在且权限正确。
- `write_enable=` 必须是 YES,否则上传会报 “550 Permission denied”。
5️⃣ 调整 SELinux 策略
If you’re running SELinux in enforcing mode,you’ll need to allow `vsftpd` traffic.
No modification needed if you are using permissive mode.
# 临时禁用 SELinux
sudo setenforce 0
sudo vi /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=permissive 或者使用 targeted 模式下添加规则: echo "allow all" | sudo tee /etc/selinux/local.vsftpd.te && sudo checkmodule -M -m -o local.vsftpd.mod local.vsftpd.te && sudo semodule_package -o local.vsftpd.pp -m local.vsftdap.mod && sudo semodule -i local.vsftdp.pp
6️⃣ 配置防火墙规则
If you’re using firewalld。add FTP service permanently:
# 开放标准 FTP
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload
❗ 如果你使用的是 iptables,请执行:
# 打开 TCP 21 和 PASV 数据端口范围
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --match multiport --dports 10000:10100 -j ACCEPT
service iptables save
7️⃣ 启动并设置开机自启
# 启动 vsftpd 服务并检查状态
sudo systemctl start vsftpd
sudo systemctl status vsftpd
sudo systemctl enable vsftpd
8️⃣ 验证连接 & 上传下载测试
-
Nmap 检测端口是否开放:`nmap -Pn your_server_ip | grep ftp` 应显示 `
`。 - TLS 客户端命令行示例:
# 普通明文连接测试
nc your_server_ip 21
# 上传文件测试
ftp your_server_ip
User这方面,ftpuser
Password: ********
put test.txt
quit
# 若出现 `550 Permission denied.` 请检查目标目录权限或 `chroot_local_user` 设置。老实说,
windows 客户端 WinSCP 测试步骤:
-
Create new Site → Hostname: your_server_ip → Port Number:21 → File protocol:FTP → Encryption:none。
-
User name & password → Log in。
-
Succeed → 可以看到 `/home/ftpuser` 或你设定的根目录。尝试拖拽上传文件,若提示权限错误,请回到第 4 步检查 `write_enable` 与目录权限。不过,
9️⃣ 常见故障排查清单
| 问题描述 | 排查思路 & 解法 |
|---|
journalctl -u vsftpd.service
- - 检查 `/etc/vsftpd/vsftpd.conf ` 是否有语法错误。可使用 `vsfdtppwdcheck –c /etc/vs...`.
- - 确认 selinux 未阻拦。
- - 确认没有其他程序占用 TCP 21。
- - 看日志 `/var/log/vsFTPD.log`。寻找关键字 `error`,通常能定位到具体原因。
- - 使用 `telnet your_server_ip 21`. 若连不上,说明网络或防火墙拦截。话说回来,
- - 在服务器上执行 `firewall-cmd –list-all | grep services`. 确认已包含 ftp。
- - 若在云网站,请检查安全组或网络 ACL。
- - 检查目标目录是否属于当前使用者且具写权限: `ls –ld $`。
- - 如果你把根目录改成 `/var/www/html`,则需给该使用者读写执行权限: `chmod 750 /var/www/html;chown ftpuser …`.
- - 确认 `/etc/vsFTPD.conf ` 中的 `writ_enable YES ` 已开启。
- - 将 `Anonymouse_enable NO ` 写入配置文件,并重新启动。• 若想完全禁止匿名登录,还可以在 PAM 中移除 `/etc/pam.d/vsFTPd‐anonymous-login‑*' 文件中的条目。
-
• 使用命令行工具 telnet/fcsh 等检查数据通道是否能成功建立。\r\
• 如仍卡顿,查看程序负载和磁盘 I/O. \r\
• 对于大文件传输。可考虑使用 sFTP/SCP 替代。\r\
• 若使用 passive mode,请确保所有外部 IP 都能访问到你的 data port 范围。\r\
• 在 CloudWatch 等监控网站上监控网络吞吐量。\r\
• 最终如果仍旧卡顿,可考虑升级内核参数。例如 net.ipv4.tcp_fin_timeout 等。\r\
—— 更多详细方案请自行搜索 “vsFTPD performance tuning”。\r \
— — — — — —
"
:
- 按照上述步骤就可以完成 CentOS Minimal 下的 FTP 服务搭建;
- 所有关键环节都有对应的排查思路;
- 如仍遇到难题。记得先看日志,再按痛点清单逐一排除。
祝你愉快地完成搭建,并顺利实现内部文件共享!
快速搭建 CentOS Minimal FTP 服务器实现文件共享的完整步骤
1️⃣ 先决条件与常见痛点
在开始之前请先确认以下两点,避免后期遇到“服务启动失败”或“连接被拒绝”的尴尬:
- 程序已更新至最新补丁`sudo yum update -y`。老实说,
- 防火墙和 SELinux 已知状态若不确定。可先临时关闭 SELinux并确保 firewalld 开启。
2️⃣ 安装 vsftpd
bash sudo yum install vsftpd -y
3️⃣ 创建专门的 FTP 使用者
`vsftpd` 默认不允许匿名访问,建议创建本地使用者并限制其主目录。
`sudo useradd ftpuser` `sudo passwd ftpuser` 如需更安全,可将其家目录设为 /var/ftp/ftpuser 并赋予适当权限:
`sudo mkdir -p /var/ftp/ftpuser sudo chown ftpuser:ftpuser /var/ftp/ftpuser sudo chmod 750 /var/ftp/ftpuser`
4️⃣ 配置 vsftpd
Edit configuration file:
`sudo vi /etc/vsftpd/vsftpd.conf`
Add or modify following lines:
# 基础设置
listen=YES
anonymous_enable=NO # 禁止匿名登录。提高安全性
local_enable=YES # 允许本地使用者登录
write_enable=YES # 允许写入操作
# 限制目录范围,防止越权访问
chroot_local_user=YES # 将使用者限制在自己的主目录中
allow_writeable_chroot=YES # 在 chroot 环境中允许写操作
# 使用 PAM 与程序账户同步认证
pam_service_name=vsftpd
# 日志记录方法
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
# 防止密码暴力攻击,默认开启:
idle_session_timeout=600 # 空闲会话超时时间
connect_from_port_20=YES # 支持主动模式传输
⚠️ 常见配置错误检查清单:
- `listen=`是否为 YES 或 NO?
- `local_root=` 是否指向正确的目录?不过,如果你使用了自定义根目录,请确保方法存在且权限正确。
- `write_enable=` 必须是 YES,否则上传会报 “550 Permission denied”。
5️⃣ 调整 SELinux 策略
If you’re running SELinux in enforcing mode,you’ll need to allow `vsftpd` traffic.
No modification needed if you are using permissive mode.
# 临时禁用 SELinux
sudo setenforce 0
sudo vi /etc/selinux/config # 将 SELINUX=enforcing 改为 SELINUX=permissive 或者使用 targeted 模式下添加规则: echo "allow all" | sudo tee /etc/selinux/local.vsftpd.te && sudo checkmodule -M -m -o local.vsftpd.mod local.vsftpd.te && sudo semodule_package -o local.vsftpd.pp -m local.vsftdap.mod && sudo semodule -i local.vsftdp.pp
6️⃣ 配置防火墙规则
If you’re using firewalld。add FTP service permanently:
# 开放标准 FTP
sudo firewall-cmd --permanent --add-service=ftp
sudo firewall-cmd --reload
❗ 如果你使用的是 iptables,请执行:
# 打开 TCP 21 和 PASV 数据端口范围
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --match multiport --dports 10000:10100 -j ACCEPT
service iptables save
7️⃣ 启动并设置开机自启
# 启动 vsftpd 服务并检查状态
sudo systemctl start vsftpd
sudo systemctl status vsftpd
sudo systemctl enable vsftpd
8️⃣ 验证连接 & 上传下载测试
-
Nmap 检测端口是否开放:`nmap -Pn your_server_ip | grep ftp` 应显示 `
`。 - TLS 客户端命令行示例:
# 普通明文连接测试
nc your_server_ip 21
# 上传文件测试
ftp your_server_ip
User这方面,ftpuser
Password: ********
put test.txt
quit
# 若出现 `550 Permission denied.` 请检查目标目录权限或 `chroot_local_user` 设置。老实说,
windows 客户端 WinSCP 测试步骤:
-
Create new Site → Hostname: your_server_ip → Port Number:21 → File protocol:FTP → Encryption:none。
-
User name & password → Log in。
-
Succeed → 可以看到 `/home/ftpuser` 或你设定的根目录。尝试拖拽上传文件,若提示权限错误,请回到第 4 步检查 `write_enable` 与目录权限。不过,
9️⃣ 常见故障排查清单
| 问题描述 | 排查思路 & 解法 |
|---|
journalctl -u vsftpd.service
- - 检查 `/etc/vsftpd/vsftpd.conf ` 是否有语法错误。可使用 `vsfdtppwdcheck –c /etc/vs...`.
- - 确认 selinux 未阻拦。
- - 确认没有其他程序占用 TCP 21。
- - 看日志 `/var/log/vsFTPD.log`。寻找关键字 `error`,通常能定位到具体原因。
- - 使用 `telnet your_server_ip 21`. 若连不上,说明网络或防火墙拦截。话说回来,
- - 在服务器上执行 `firewall-cmd –list-all | grep services`. 确认已包含 ftp。
- - 若在云网站,请检查安全组或网络 ACL。
- - 检查目标目录是否属于当前使用者且具写权限: `ls –ld $`。
- - 如果你把根目录改成 `/var/www/html`,则需给该使用者读写执行权限: `chmod 750 /var/www/html;chown ftpuser …`.
- - 确认 `/etc/vsFTPD.conf ` 中的 `writ_enable YES ` 已开启。
- - 将 `Anonymouse_enable NO ` 写入配置文件,并重新启动。• 若想完全禁止匿名登录,还可以在 PAM 中移除 `/etc/pam.d/vsFTPd‐anonymous-login‑*' 文件中的条目。
-
• 使用命令行工具 telnet/fcsh 等检查数据通道是否能成功建立。\r\
• 如仍卡顿,查看程序负载和磁盘 I/O. \r\
• 对于大文件传输。可考虑使用 sFTP/SCP 替代。\r\
• 若使用 passive mode,请确保所有外部 IP 都能访问到你的 data port 范围。\r\
• 在 CloudWatch 等监控网站上监控网络吞吐量。\r\
• 最终如果仍旧卡顿,可考虑升级内核参数。例如 net.ipv4.tcp_fin_timeout 等。\r\
—— 更多详细方案请自行搜索 “vsFTPD performance tuning”。\r \
— — — — — —
"
:
- 按照上述步骤就可以完成 CentOS Minimal 下的 FTP 服务搭建;
- 所有关键环节都有对应的排查思路;
- 如仍遇到难题。记得先看日志,再按痛点清单逐一排除。
祝你愉快地完成搭建,并顺利实现内部文件共享!

