以下是详细的步骤,从安装到配置,再到防火墙和 SELinux 的设置,确保 FTP 服务能够正常使用。
第一步:安装 vsftpd
我们需要检查系统是否已经安装了 vsftpd,如果没安装,则使用 yum 进行安装。

-
检查是否已安装
rpm -q vsftpd
如果已经安装,会显示版本号;如果没有,会提示
package vsftpd is not installed。 -
安装 vsftpd
sudo yum install -y vsftpd
-
启动 vsftpd 服务并设置开机自启
# 启动服务 sudo service vsftpd start # 设置开机自启 sudo chkconfig vsftpd on
你可以使用以下命令检查服务状态:
sudo service vsftpd status
第二步:配置 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
-
修改关键配置项 以下是推荐的配置,适用于大多数场景,你可以根据注释的说明进行修改。
# 允许匿名登录 (默认是 NO,建议保持 NO) anonymous_enable=NO # 允许本地用户登录 (默认是 YES) local_enable=YES # 允许本地用户对 FTP 目录有写权限 (默认是 NO,如果你需要上传文件,请改为 YES) write_enable=YES # 设置本地用户的 FTP 根目录 # chroot_local_user=YES 会将用户限制在其家目录下,这是安全的关键! chroot_local_user=YES # 如果你使用了 chroot_local_user=YES,下面这行需要取消注释,否则用户会收到 500 OOPS: vsftpd: refusing to run with writable root inside chroot 错误 # 它允许 chroot 目录是可写的 allow_writeable_chroot=YES # 设置欢迎信息 ftpd_banner=Welcome to my FTP service. # 设置监听地址,默认是监听所有网卡 listen=YES # 设置被动模式端口范围 (强烈推荐,用于穿越防火墙) # PASV 模式下,客户端连接到服务器的 21 端口进行控制,数据传输会使用一个高端口 pasv_enable=YES pasv_min_port=10020 pasv_max_port=10040 # 限制最大连接数 max_clients=50 max_per_ip=5 # 日志记录 xferlog_enable=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES
-
保存并退出 在
vi编辑器中,按ESC键,然后输入wq并回车。
第三步:创建 FTP 用户
FTP 服务需要系统用户才能登录,我们可以为 FTP 专门创建一个用户。

-
创建新用户 我们创建一个名为
ftpuser的用户,并将其家目录作为 FTP 根目录。sudo useradd -m -s /sbin/nologin ftpuser
-m: 自动创建用户的家目录。-s /sbin/nologin: 禁止此用户通过 SSH 或控制台登录系统,仅用于 FTP,这更安全。
-
设置用户密码
sudo passwd ftpuser
根据提示输入两次密码。
-
设置目录权限 (非常重要) 由于我们使用了
chroot_local_user=YES,必须确保 FTP 用户的家目录及其上级目录对于该用户是不可写的,否则vsftpd会拒绝连接。# 设置 ftpuser 家目录的所有者为 root,组为 ftpuser sudo chown -R root:ftpuser /home/ftpuser # 去掉家目录的写权限,只保留读和执行权限 sudo chmod -R 755 /home/ftpuser
这样,
ftpuser可以进入/home/ftpuser目录,但不能修改该目录本身,他可以在目录内创建文件和文件夹(因为write_enable=YES)。
第四步:配置防火墙 (iptables)
CentOS 6.5 默认使用 iptables 作为防火墙,FTP 服务需要开放两个端口:21 (控制端口) 和 被动模式 的高端口范围。
-
开放 21 端口
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
-
开放被动模式端口范围 我们在配置文件中设置了
10020-10040,所以这里也要开放这个范围。sudo iptables -A INPUT -p tcp --dport 10020:10040 -j ACCEPT
-
保存防火墙规则
sudo service iptables save
这条命令会将当前规则保存到
/etc/sysconfig/iptables文件中。 -
重启 iptables 服务使规则生效

sudo service iptables restart
第五步:配置 SELinux (安全增强型 Linux)
这是最容易出错的一步! 如果不正确配置 SELinux,即使上面所有步骤都正确,FTP 登录仍然会失败,CentOS 6.5 默认启用 SELinux。
-
检查 SELinux 状态
/usr/sbin/sestatus
如果结果中
SELinux status是enabled,则表示已启用。 -
为 FTP 设置 SELinux 布尔值 这个命令会自动处理 FTP 所需的 SELinux 策略,包括允许写入 chroot 目录。
sudo setsebool -P ftpd_full_access on
-P参数会使这个设置永久生效,重启后依然有效。
-
(可选) 手动标记目录上下文 如果上面的命令不起作用,或者你想手动控制,可以执行以下命令,通常第一步的
setsebool已经足够。# 为 ftpuser 的家目录设置正确的 SELinux 上下文 sudo semanage fcontext -a -t public_content_rw_t "/home/ftpuser(/.*)?" # 应用新的上下文 sudo restorecon -R -v /home/ftpuser
第六步:重启 vsftpd 服务并测试
完成所有配置后,重启 vsftpd 服务,然后进行测试。
-
重启服务
sudo service vsftpd restart
-
测试 你可以使用 FTP 客户端软件(如 FileZilla、WinSCP)或者命令行进行测试。
-
使用命令行测试 (在另一台机器上或本机)
ftp localhost
然后输入你创建的用户名
ftpuser和密码。 -
使用 FileZilla 测试
- 主机:
你的服务器IP地址 - 端口:
21 - 用户名:
ftpuser - 密码: 你设置的密码
- 协议: 选择 "FTP - 显式加密" (FTPES) 或 "FTP" (如果加密有问题),如果使用 FTP,确保在 "被动模式" 选项卡中勾选 "使用被动模式"。
- 主机:
-
如果连接成功,并且可以上传下载文件,那么恭喜你,FTP 服务器已经成功开启!
常见问题排查
如果连接失败,请检查以下几点:
- 用户密码错误? 确认用户名和密码正确。
- 防火墙问题? 运行
sudo service iptables stop临时关闭防火墙,看是否能连接,如果能,说明是防火墙规则问题,请重新检查第四步。 - SELinux 问题? 运行
sudo setenforce 0临时禁用 SELinux,看是否能连接,如果能,说明是 SELinux 策略问题,请重新检查
