在服务器管理和文件传输领域,FTP(文件传输协议)依然扮演着重要的角色,出于安全考虑,将 FTP 服务运行在非标准端口上是一种常见的实践,可以有效规避大量针对默认端口 21 的自动化扫描和攻击,本文将详细介绍如何在 CentOS 7 系统上,使用广泛应用的 vsftpd
(Very Secure FTP Daemon)软件,搭建一个监听在自定义端口 10086 上的 FTP 服务,整个过程将涵盖软件安装、核心配置、防火墙与 SELinux 设置、用户管理以及最终测试,确保您能够安全、顺利地完成部署。
准备工作
在开始之前,请确保您具备以下条件:
- 一台已安装 CentOS 7 操作系统的服务器。
- 拥有
sudo
权限或 root 权限的用户账户。 - 服务器能够连接到互联网,以便下载必要的软件包。
第一步:安装 vsftpd
vsftpd
是 CentOS 默认的 FTP 服务器软件,以其安全性和高性能而著称,我们可以通过 yum
包管理器轻松安装它。
打开终端,执行以下命令:
sudo yum update -y sudo yum install vsftpd -y
安装完成后,vsftpd
服务默认是禁用的,我们先不要启动它,因为首先需要进行详细的配置。
第二步:配置 vsftpd 以使用端口 10086
vsftpd
的核心配置文件位于 /etc/vsftpd/vsftpd.conf
,在修改之前,建议先备份原始配置文件,以防出现问题时可以快速恢复。
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
使用您喜欢的文本编辑器(如 vi
或 nano
)打开配置文件:
sudo vi /etc/vsftpd/vsftpd.conf
我们需要修改和添加多个参数,下表汇总了关键的配置项及其作用:
参数 | 建议值 | 作用说明 |
---|---|---|
anonymous_enable | NO | 禁止匿名用户登录,增强安全性。 |
local_enable | YES | 允许本地系统用户登录 FTP。 |
write_enable | YES | 允许登录用户进行写入操作(上传、删除等)。 |
chroot_local_user | YES | 将所有本地用户限制在其主目录内,防止访问其他系统目录。 |
listen | YES | 使 vsftpd 以独立模式运行,而不是由 xinetd 管理。 |
listen_port | 10086 | 核心配置:设置 FTP 服务监听的命令端口为 10086。 |
pasv_enable | YES | 启用被动模式(PASV),这对于客户端位于 NAT 防火墙后至关重要。 |
pasv_min_port | 10087 | 设置被动模式下的最小数据端口。 |
pasv_max_port | 10090 | 设置被动模式下的最大数据端口。 |
pasv_address | 你的服务器公网IP | 重要:填写服务器的公网 IP 地址,用于被动模式连接。 |
allow_writeable_chroot | YES | 允许在 chroot 监狱中的主目录可写,解决 vsftpd 2.3.5+ 版本的安全限制问题。 |
请根据上表,在 vsftpd.conf
文件中找到对应行进行修改,或添加新的行,配置文件中,以 开头的行为注释。
修改后的关键配置部分可能如下所示:
# 禁用匿名登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许写入权限 write_enable=YES # 将用户限制在主目录 chroot_local_user=YES # 允许 chroot 目录可写 allow_writeable_chroot=YES # 监听在 IPv4,并设置端口 listen=YES listen_port=10086 # 被动模式配置 pasv_enable=YES pasv_min_port=10087 pasv_max_port=10090 # 请将下面的 IP 替换为您服务器的实际公网 IP 地址 pasv_address=123.45.67.89
保存并关闭文件。
第三步:配置防火墙和 SELinux
CentOS 7 默认使用 firewalld
作为防火墙,并启用了 SELinux
,这是确保 FTP 服务能够被外部访问的关键步骤,也是最容易被忽略的环节。
配置 firewalld
我们需要开放我们配置的端口:命令端口 10086 和被动模式数据端口范围 10087-10090。
# 开放命令端口 sudo firewall-cmd --permanent --add-port=10086/tcp # 开放被动模式数据端口范围 sudo firewall-cmd --permanent --add-port=10087-10090/tcp # 重新加载防火墙规则使其生效 sudo firewall-cmd --reload
您可以使用 sudo firewall-cmd --list-all
命令来验证端口是否已成功开放。
配置 SELinux
SELinux(Security-Enhanced Linux)会限制进程的权限,默认情况下它可能会阻止 FTP 用户写入文件,我们需要设置一个 SELinux 布尔值来允许 FTP 服务完全访问用户的主目录。
sudo setsebool -P ftpd_full_access on
-P
参数表示此设置是永久性的,重启后依然有效。
第四步:创建 FTP 用户并设置权限
为了安全起见,我们应该创建一个专门用于 FTP 访问的用户,而不是直接使用 root 或其他系统管理员账户。
# 创建一个名为 ftpuser 的新用户,并指定其主目录为 /home/ftpuser sudo useradd -m ftpuser # 为该用户设置一个密码 sudo passwd ftpuser
根据我们之前的 chroot_local_user=YES
配置,ftpuser
登录后将被锁定在 /home/ftpuser
目录内,为了方便文件管理,您可以在该目录下创建一些子目录,upload
。
sudo mkdir /home/ftpuser/upload sudo chown ftpuser:ftpuser /home/ftpuser/upload
第五步:启动并启用 vsftpd 服务
所有配置都已完成,现在可以启动 vsftpd
服务了。
# 启动 vsftpd 服务 sudo systemctl start vsftpd # 设置 vsftpd 开机自启 sudo systemctl enable vsftpd
您可以使用 sudo systemctl status vsftpd
来检查服务是否正在运行。
第六步:测试 FTP 连接
您可以从任何一台客户端机器(使用 FileZilla、WinSCP 或命令行 ftp
工具)来测试连接。
使用 FileZilla 进行测试:
- 打开 FileZilla。
- 在“主机”输入框中,填写您的服务器 IP 地址。
- 在“端口”输入框中,填写
10086
。 - 在“用户名”和“密码”输入框中,分别填写
ftpuser
和您设置的密码。 - 点击“快速连接”。
如果一切正常,您应该能成功连接到服务器,并看到 /home/ftpuser
目录下的内容,请确保 FileZilla 的“服务器” -> “强制显示隐藏文件”选项是可选的,并且连接模式设置为“被动”(这是默认设置,通常无需更改)。
相关问答 FAQs
问题 1:我已经按照教程配置完毕,但使用 FTP 客户端连接时,在“读取目录列表”阶段卡住并最终超时,这是什么原因?
解答: 这是最常见的问题,几乎总是由被动模式配置不当引起的,请按以下顺序排查:
- 防火墙规则:确认
firewalld
已经开放了pasv_min_port
到pasv_max_port
之间的所有 TCP 端口(本例中为 10087-10090),可以再次运行sudo firewall-cmd --list-ports
检查。 :检查 /etc/vsftpd/vsftpd.conf
文件中的pasv_address
是否正确填写了服务器的公网 IP 地址,如果填写的是内网 IP,客户端将无法通过公网连接到被动模式的数据端口。- 客户端模式:确保您的 FTP 客户端使用的是“被动模式”,虽然这是大多数现代客户端的默认设置,但有时可能会被手动更改为“主动模式”,导致连接失败。
- 云服务商安全组:如果您的服务器部署在阿里云、腾讯云等云平台上,除了系统内部的
firewalld
,还需要在云平台控制台的安全组规则中,同样放行 10086 及 10087-10090 端口。
问题 2:我可以成功登录 FTP 服务器,但无法上传文件,服务器返回“550 Permission denied”或“553 Could not create file”错误,该如何解决?
解答: 这个问题通常与文件系统权限或 SELinux 策略有关,请检查以下几点:
- SELinux 策略:这是最可能的原因,请确认您已经执行了
sudo setsebool -P ftpd_full_access on
命令,您可以通过getsebool -a | grep ftp
命令查看当前 FTP 相关的 SELinux 布尔值状态,确保ftpd_full_access
为on
。 - 目录权限:检查您尝试上传文件的目标目录的所有者和权限,如果您想向
/home/ftpuser/upload
目录上传文件,该目录必须对ftpuser
用户可写,可以使用ls -ld /home/ftpuser/upload
查看,并使用sudo chown ftpuser:ftpuser /home/ftpuser/upload
和sudo chmod 755 /home/ftpuser/upload
确保权限正确。 :再次检查 /etc/vsftpd/vsftpd.conf
文件,确保write_enable=YES
这一行没有被注释掉(行首没有 )。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复