在 CentOS 6.9 系统上搭建一个稳定、安全的 FTP(文件传输协议)服务器是许多系统管理员的常见需求,FTP 服务允许用户在网络中的客户端与服务器之间可靠地上传和下载文件,在众多 FTP 服务器软件中,vsftpd(Very Secure FTP Daemon)因其安全性、高性能和稳定性而成为 CentOS 系统的首选,本文将详细介绍在 CentOS 6.9 上安装、配置和管理 vsftpd 服务的完整流程。

环境准备与安装
在开始之前,请确保您拥有一个具有 root 权限的 CentOS 6.9 系统,并且网络连接正常。
确认您的系统版本以确保操作指南的适用性。
cat /etc/redhat-release
使用 yum 包管理器来安装 vsftpd。yum 会自动处理所有依赖关系。
yum install vsftpd -y
安装完成后,vsftpd 的主配置文件位于 /etc/vsftpd/vsftpd.conf,为了安全起见,建议在修改前先备份原始配置文件。
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
核心配置文件详解
vsftpd 的强大功能主要体现在其灵活的配置上,我们将通过修改 /etc/vsftpd/vsftpd.conf 文件来搭建一个适用于生产环境的、安全的 FTP 服务,以下是一些关键配置项的说明。
| 参数 | 建议值 | 说明 |
|---|---|---|
anonymous_enable=NO | NO | 禁止匿名用户登录,这是提升安全性的第一步。 |
local_enable=YES | YES | 允许本地系统用户登录 FTP。 |
write_enable=YES | YES | 允许本地用户拥有写入权限(上传、修改、删除)。 |
chroot_local_user=YES | YES | 启用用户监牢,将所有本地用户限制在其主目录内,防止其访问系统其他目录。 |
chroot_list_enable=YES | YES | 启用 chroot 列表功能,可以创建一个例外列表,让列表中的用户不受 chroot 限制。 |
chroot_list_file=/etc/vsftpd/chroot_list | /etc/vsftpd/chroot_list | 指定例外列表文件的路径。 |
listen=YES | YES | 让 vsftpd 以独立模式运行,而不是由 xinetd 管理。 |
pam_service_name=vsftpd | vsftpd | 指定 PAM 认证服务的名称。 |
userlist_enable=YES | YES | 启用用户列表控制。 |
userlist_file=/etc/vsftpd/user_list | /etc/vsftpd/user_list | 指定用户列表文件的路径,在 CentOS 中,此文件默认为黑名单。 |
pasv_enable=YES | YES | 启用被动模式,这对于客户端位于防火墙或 NAT 后面的情况至关重要。 |
pasv_min_port=30000 | 30000 | 设置被动模式使用的端口范围的最小值。 |
pasv_max_port=30100 | 30100 | 设置被动模式使用的端口范围的最大值。 |
请根据上表修改您的 /etc/vsftpd/vsftpd.conf 文件,保存并退出编辑器。
创建FTP用户并设置权限
为了安全起见,我们不建议直接使用 root 或其他系统用户,我们将创建一个专用的 FTP 用户,并禁止其通过 SSH 登录系统。

# 创建一个名为 ftpuser 的新用户,指定其主目录,并禁止shell登录 useradd -d /var/ftp/ftpuser -s /sbin/nologin ftpuser # 为该用户设置密码 passwd ftpuser
为该用户的主目录设置正确的所有权和权限。
# 将主目录的所有权赋予新创建的用户 chown -R ftpuser:ftpuser /var/ftp/ftpuser # 设置目录权限,确保用户有读写执行权限,而其他用户有读和执行权限 chmod -R 755 /var/ftp/ftpuser
注意:当 chroot_local_user=YES 时,被监禁的主目录不能拥有全局写权限,否则用户将无法登录。755 权限是一个安全且有效的选择。
防火墙与SELinux配置
CentOS 6.9 默认使用 iptables 作为防火墙,并且启用了 SELinux,这两个安全模块是 FTP 服务配置中最容易出问题的环节。
配置 iptables 防火墙
我们需要开放 FTP 的控制端口(21)以及我们在配置文件中定义的被动模式端口范围。
# 开放 21 端口 iptables -I INPUT -p tcp --dport 21 -j ACCEPT # 开放被动模式端口范围 iptables -I INPUT -p tcp --dport 30000:30100 -j ACCEPT # 保存规则,使其重启后依然生效 service iptables save # 重启 iptables 服务使规则生效 service iptables restart
配置 SELinux
SELinux 可能会阻止 vsftpd 访问用户主目录或写入文件,我们需要设置相关的布尔值来允许 FTP 服务。

# 查看 FTP 相关的 SELinux 状态 getsebool -a | grep ftp # 永久性地允许 FTP 用户完全访问其主目录 setsebool -P allow_ftpd_full_access on
启动服务与测试
所有配置完成后,就可以启动 vsftpd 服务,并将其设置为开机自启。
# 启动 vsftpd 服务 service vsftpd start # 设置 vsftpd 开机自启 chkconfig vsftpd on # 查看服务状态,确认其正在运行 service vsftpd status
您可以使用 FTP 客户端(如 FileZilla、WinSCP 或命令行 ftp 工具)来测试连接,使用您创建的 ftpuser 及其密码进行登录,如果一切顺利,您应该能够成功连接并被限制在 /var/ftp/ftpuser 目录中。
相关问答FAQs
问题1:连接成功但无法列出目录,提示 “500 OOPS: cannot change directory” 或 “550 Permission denied”。
解答: 这是一个非常典型的问题,通常由两个原因导致,检查 SELinux 设置,最直接的解决方法是运行 setsebool -P allow_ftpd_full_access on 来允许 FTP 完全访问,检查您登录用户的主目录权限,当启用了 chroot_local_user=YES 时,该主目录绝对不能是全局可写的(即权限不能是 777 或 775 中的全局写权限),请使用 chmod 755 /path/to/user/home 将其权限调整为安全值。
问题2:如何将用户限制在其主目录,防止其访问系统其他文件?
解答: 这个功能被称为“Chroot 监牢”,在 /etc/vsftpd/vsftpd.conf 配置文件中,设置 chroot_local_user=YES 即可,这行配置的作用是将所有本地用户默认限制在它们各自的主目录内,无法通过 cd .. 命令访问到上级目录或系统的其他任何地方,如果您希望某个特定用户不受此限制(需要一个可以访问整个系统的管理员账户),可以启用 chroot_list_enable=YES,然后在 /etc/vsftpd/chroot_list 文件中逐行添加这些例外用户的用户名。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复