如何快速搭建CentOS Minimal FTP服务器实现文件共享的详细步骤教程?

更新于
2026-08-16 11:54:55
15阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

快速搭建 CentOS Minimal FTP 服务器实现文件共享的完整步骤

1️⃣ 先决条件与常见痛点

在开始之前请先确认以下两点,避免后期遇到“服务启动失败”或“连接被拒绝”的尴尬:

  • 程序已更新至最新补丁`sudo yum update -y`。老实说,
  • 防火墙和 SELinux 已知状态若不确定。可先临时关闭 SELinux并确保 firewalld 开启。

2️⃣ 安装 vsftpd

bash sudo yum install vsftpd -y

如何快速搭建CentOS Minimal FTP服务器实现文件共享的详细步骤教程?

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

如何快速搭建CentOS Minimal FTP服务器实现文件共享的详细步骤教程?

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 测试步骤:
    1. Create new Site → Hostname: your_server_ip → Port Number:21 → File protocol:FTP → Encryption:none。
    2. User name & password → Log in。
    3. Succeed → 可以看到 `/home/ftpuser` 或你设定的根目录。尝试拖拽上传文件,若提示权限错误,请回到第 4 步检查 `write_enable` 与目录权限。不过,

9️⃣ 常见故障排查清单

问题描述排查思路 & 解法

"Service failed to start" // 程序日志查看: journalctl -u vsftpd.service

  • - 检查 `/etc/vsftpd/vsftpd.conf ` 是否有语法错误。可使用 `vsfdtppwdcheck –c /etc/vs...`.
  • - 确认 selinux 未阻拦。
  • - 确认没有其他程序占用 TCP 21。
  • - 看日志 `/var/log/vsFTPD.log`。寻找关键字 `error`,通常能定位到具体原因。
"Connection timed out" / "Connection refused" // 防火墙与网络层面排查
  • - 使用 `telnet your_server_ip 21`. 若连不上,说明网络或防火墙拦截。话说回来,
  • - 在服务器上执行 `firewall-cmd –list-all | grep services`. 确认已包含 ftp。
  • - 若在云网站,请检查安全组或网络 ACL。
"550 Permission denied"// 权限相关
  • - 检查目标目录是否属于当前使用者且具写权限: `ls –ld $`。
  • - 如果你把根目录改成 `/var/www/html`,则需给该使用者读写执行权限: `chmod 750 /var/www/html;chown ftpuser …`.
  • - 确认 `/etc/vsFTPD.conf ` 中的 `writ_enable YES ` 已开启。
"Anonymous login allowed but I don't want it"// 安全性提高
  • - 将 `Anonymouse_enable NO ` 写入配置文件,并重新启动。• 若想完全禁止匿名登录,还可以在 PAM 中移除 `/etc/pam.d/vsFTPd‐anonymous-login‑*' 文件中的条目。
'} "File transfer stalls after few MB" '\t\t\t\t\t\t\t\t\t\t\t\r \r \r \r'>// 高级调试建议 // 尝试切换主动模式或被动模式. \r // 如果你在 NAT 后面可以手动指定 PASV 数据端口范围:\r // echo \"pasv_min_port =10000\">> /etc/vsFTPD.conf \r // echo \"pasv_max_port =10100\">> /etc/vSFTPD.conf\r // 并在防火墙中打开对应范围。\r // 同时开启 ``listen_ipv6=no`` 防止 IPv6 路由错误。\r"
    • 使用命令行工具 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

快速搭建 CentOS Minimal FTP 服务器实现文件共享的完整步骤

1️⃣ 先决条件与常见痛点

在开始之前请先确认以下两点,避免后期遇到“服务启动失败”或“连接被拒绝”的尴尬:

  • 程序已更新至最新补丁`sudo yum update -y`。老实说,
  • 防火墙和 SELinux 已知状态若不确定。可先临时关闭 SELinux并确保 firewalld 开启。

2️⃣ 安装 vsftpd

bash sudo yum install vsftpd -y

如何快速搭建CentOS Minimal FTP服务器实现文件共享的详细步骤教程?

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

如何快速搭建CentOS Minimal FTP服务器实现文件共享的详细步骤教程?

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 测试步骤:
    1. Create new Site → Hostname: your_server_ip → Port Number:21 → File protocol:FTP → Encryption:none。
    2. User name & password → Log in。
    3. Succeed → 可以看到 `/home/ftpuser` 或你设定的根目录。尝试拖拽上传文件,若提示权限错误,请回到第 4 步检查 `write_enable` 与目录权限。不过,

9️⃣ 常见故障排查清单

问题描述排查思路 & 解法

"Service failed to start" // 程序日志查看: journalctl -u vsftpd.service

  • - 检查 `/etc/vsftpd/vsftpd.conf ` 是否有语法错误。可使用 `vsfdtppwdcheck –c /etc/vs...`.
  • - 确认 selinux 未阻拦。
  • - 确认没有其他程序占用 TCP 21。
  • - 看日志 `/var/log/vsFTPD.log`。寻找关键字 `error`,通常能定位到具体原因。
"Connection timed out" / "Connection refused" // 防火墙与网络层面排查
  • - 使用 `telnet your_server_ip 21`. 若连不上,说明网络或防火墙拦截。话说回来,
  • - 在服务器上执行 `firewall-cmd –list-all | grep services`. 确认已包含 ftp。
  • - 若在云网站,请检查安全组或网络 ACL。
"550 Permission denied"// 权限相关
  • - 检查目标目录是否属于当前使用者且具写权限: `ls –ld $`。
  • - 如果你把根目录改成 `/var/www/html`,则需给该使用者读写执行权限: `chmod 750 /var/www/html;chown ftpuser …`.
  • - 确认 `/etc/vsFTPD.conf ` 中的 `writ_enable YES ` 已开启。
"Anonymous login allowed but I don't want it"// 安全性提高
  • - 将 `Anonymouse_enable NO ` 写入配置文件,并重新启动。• 若想完全禁止匿名登录,还可以在 PAM 中移除 `/etc/pam.d/vsFTPd‐anonymous-login‑*' 文件中的条目。
'} "File transfer stalls after few MB" '\t\t\t\t\t\t\t\t\t\t\t\r \r \r \r'>// 高级调试建议 // 尝试切换主动模式或被动模式. \r // 如果你在 NAT 后面可以手动指定 PASV 数据端口范围:\r // echo \"pasv_min_port =10000\">> /etc/vsFTPD.conf \r // echo \"pasv_max_port =10100\">> /etc/vSFTPD.conf\r // 并在防火墙中打开对应范围。\r // 同时开启 ``listen_ipv6=no`` 防止 IPv6 路由错误。\r"
    • 使用命令行工具 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