在 CentOS 系统中搭建 FTP(文件传输协议)服务是一项常见且重要的服务器管理任务,它允许用户在网络上的不同计算机之间可靠地传输文件,本文将以 CentOS 7/8/Stream 为例,详细介绍如何安装、配置和运行一个安全稳定的 FTP 服务器,我们将使用系统中最受欢迎且安全性较高的 vsftpd(Very Secure FTP Daemon)软件包。
第一步:系统更新与准备工作
在安装任何新软件之前,最佳实践是确保您的系统软件包是最新的,这可以修复已知的安全漏洞并提升系统稳定性,打开终端,执行以下命令:
sudo yum update -y
或者,在较新的 CentOS 8/Stream 版本上使用 dnf
:
sudo dnf update -y
更新完成后,检查防火墙状态,FTP 服务需要特定的端口才能正常通信,因此我们需要预先了解如何配置防火墙规则。
第二步:安装 vsftpd 服务
CentOS 的官方软件源中包含了 vsftpd,安装过程非常简单,执行以下命令即可完成安装:
sudo yum install -y vsftpd
或使用 dnf
:
sudo dnf install -y vsftpd
安装程序会自动将 vsftpd 配置为系统服务,并放置在标准位置。
第三步:启动并设置开机自启
安装完成后,我们需要启动 vsftpd 服务,并将其设置为系统启动时自动运行,以确保服务持久可用。
sudo systemctl start vsftpd sudo systemctl enable vsftpd
您可以使用以下命令来验证服务是否正在运行:
sudo systemctl status vsftpd
如果输出中显示 active (running)
,则表示服务已成功启动。
第四步:配置防火墙规则
FTP 协议使用端口 21 进行命令连接,端口 20 进行数据连接(主动模式),为了更好地兼容位于 NAT 或防火墙后的客户端,我们通常需要开启被动模式(Passive Mode)的端口范围。
开放 FTP 服务所需的端口:
sudo firewall-cmd --permanent --add-service=ftp
为了支持被动模式,我们需要在 vsftpd 配置文件中指定一个端口范围,然后在这里开放这个范围,假设我们计划使用 30000 到 31000 这个范围:
sudo firewall-cmd --permanent --add-port=30000-31000/tcp
重新加载防火墙配置使规则生效:
sudo firewall-cmd --reload
第五步:配置 vsftpd
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 | NO | 禁止匿名用户登录,增强安全性。 |
local_enable=YES | YES | 允许本地系统用户登录 FTP。 |
write_enable=YES | YES | 允许登录用户上传、修改文件。 |
chroot_local_user=YES | YES | 将用户限制在其主目录内,防止浏览系统其他目录。 |
pasv_enable=YES | YES | 启用被动模式,提高客户端兼容性。 |
pasv_min_port=30000 | 30000 | 设置被动模式使用的最小端口。 |
pasv_max_port=31000 | 31000 | 设置被动模式使用的最大端口。 |
userlist_enable=YES | YES | 启用用户列表控制。 |
userlist_file=/etc/vsftpd/user_list | /etc/vsftpd/user_list | 指定用户列表文件路径。 |
修改完成后,保存并退出文件,然后重启 vsftpd 服务以应用新配置:
sudo systemctl restart vsftpd
第六步:创建 FTP 用户并测试
为了安全起见,我们不建议直接使用 root
或其他系统关键账户登录 FTP,创建一个专用的 FTP 用户是更好的选择。
创建一个新用户,
ftpuser
,并指定其主目录(/var/www/html
):sudo useradd -d /var/www/html -s /sbin/nologin ftpuser
-s /sbin/nologin
参数禁止该用户通过 SSH 登录系统,仅用于 FTP 服务。为该用户设置密码:
sudo passwd ftpuser
确保该用户对其主目录有读写权限:
sudo chown -R ftpuser:ftpuser /var/www/html
您可以使用 FTP 客户端(如 FileZilla、WinSCP)或命令行工具 ftp
来连接服务器了,在客户端输入服务器的 IP 地址、用户名 ftpuser
和您设置的密码,即可成功连接并传输文件。
相关问答 (FAQs)
问题1:我已经按照步骤操作,但仍然无法连接或登录 FTP 服务器,可能是什么原因?
解答: 这是一个常见问题,通常由以下几个因素导致:
- 防火墙问题: 这是最常见的原因,请再次确认您已经正确开放了 21 端口以及被动模式的端口范围(30000-31000),并且已经执行了
firewall-cmd --reload
。 - SELinux 问题: CentOS 默认启用的 SELinux 安全模块可能会阻止 FTP 写入操作,您可以临时关闭 SELinux 进行测试(
sudo setenforce 0
),如果问题解决,则需要永久配置 SELinux 策略允许 FTP 访问(sudo setsebool -P ftpd_full_access on
)。 - 服务状态异常: 使用
sudo systemctl status vsftpd
检查服务是否正在运行,查看日志输出以获取错误信息。 - 用户凭证错误: 确认您输入的用户名和密码完全正确,检查
/etc/vsftpd/user_list
和/etc/vsftpd/ftpusers
文件,确保您的用户名没有被列入黑名单。
问题2:如何将 FTP 用户限制在其主目录内,防止他们访问系统的其他敏感文件?
解答: 这个功能被称为“chroot 监狱”,是保障服务器安全的重要措施,您需要在 /etc/vsftpd/vsftpd.conf
配置文件中进行设置。
- 找到并修改(或添加)以下行:
chroot_local_user=YES
启用此选项后,所有本地用户在登录后都会被默认限制在自己的主目录中。
- 在某些 vsftpd 版本中,如果用户的主目录本身是可写的,chroot 会因为安全原因登录失败,您需要添加以下配置来允许这种写操作:
allow_writeable_chroot=YES
或者,您可以创建一个用户主目录下的子目录作为 FTP 根目录,并保证主目录本身不可写,这也是一种更安全的做法。
修改完配置文件后,记得执行sudo systemctl restart vsftpd
重启服务使配置生效。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复