- 安装 vsftpd
- 启动并设置开机自启
- 配置防火墙和 SELinux (最关键的一步)
- 基本配置文件详解
- 创建 FTP 用户
- 客户端测试与常见问题
环境准备
- 操作系统:CentOS 6.5 (Final)
- 目标:搭建一个允许本地用户登录的 FTP 服务器。
- 需要root权限或使用
sudo。
第一步:安装 vsftpd
CentOS 6.5 的官方软件源中默认包含 vsftpd,我们可以直接使用 yum 命令进行安装。

# 检查是否已安装 rpm -q vsftpd # 如果未安装,则执行安装 yum install vsftpd -y
安装完成后,vsftpd 的配置文件会放置在 /etc/vsftpd/vsftpd.conf。
第二步:启动 vsftpd 服务并设置开机自启
安装完成后,需要启动服务并设置它在系统重启后自动运行。
# 启动 vsftpd 服务 service vsftpd start # 查看服务状态,确保已启动 service vsftpd status # 设置开机自启 chkconfig vsftpd on
第三步:配置防火墙和 SELinux (最关键的一步)
这是新手最容易出错的地方,CentOS 6.5 默认开启了防火墙和 SELinux,它们会阻止 FTP 服务的连接。
配置防火墙 (iptables)
我们需要在防火墙中开放 FTP 服务的端口(21)以及 FTP 数据传输所需的被动模式端口范围。

# 开放 FTP 控制端口 21 iptables -A INPUT -p tcp --dport 21 -j ACCEPT # 开放被动模式端口范围 (50000-51000,这个范围后面会在vsftpd配置中指定) iptables -A INPUT -p tcp --dport 50000:51000 -j ACCEPT # 保存防火墙规则 (CentOS 6 必须手动保存,否则重启后失效) service iptables save # 重启防火墙使规则生效 service iptables restart
配置 SELinux (Security-Enhanced Linux)
SELinux 的默认策略可能会阻止 vsftpd 读写用户目录,我们需要为 vsftpd 设置正确的布尔值。
# 设置允许 FTP 读写用户主目录 setsebool -P ftpd_full_access on # 如果上面的命令提示 "boolean value not supported",可以尝试使用更宽松的策略: # setsebool -P ftp_home_dir on # setsebool -P allow_ftpd_full_access on # 通常第一个 `ftpd_full_access` 在大多数情况下是有效的。
重要提示:
-P选项会永久保存这个设置,重启后依然有效,如果不用-P,设置只在当前会话中有效。
第四步:基本配置文件详解
现在我们来编辑核心的配置文件 /etc/vsftpd/vsftpd.conf,建议先备份原文件。
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
然后使用 vi 或 nano 编辑器打开文件:

vi /etc/vsftpd/vsftpd.conf
以下是一些最常用的配置项及其解释,你可以根据需要修改它们:
# 禁止匿名用户登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许本地用户对 FTP 目录有写权限 write_enable=YES # 设置本地用户上传文件后的文件掩码,022 会让新文件权限为 755,新目录为 777 # local_umask=022 # 切换到 chroot 模式后,用户被限制在自己的主目录下,不能访问系统其他目录 # 重要:CentOS 6 默认不允许 chroot,需要下面两个配置项配合开启 chroot_local_user=YES allow_writeable_chroot=YES # 允许在 chroot 环境下写入 (CentOS 7+ 推荐,CentOS 6 下此选项可能无效,但加上无妨) # 启用目录消息功能,当用户进入某个目录时,会显示该目录下 .message 文件的内容 dirmessage_enable=YES # 启用上传和下载的日志记录 xferlog_enable=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES # 控制用户是否可以使用 PORT 模式的数据连接,默认为 YES,但出于安全考虑,建议启用被动模式 connect_from_port_20=NO # --- 被动模式配置 (非常重要,用于穿越防火墙) --- pasv_enable=YES pasv_min_port=50000 pasv_max_port=51000 # 这里的端口范围必须和前面在 iptables 中开放的端口范围一致 # 用户列表文件 userlist_enable=YES # userlist_file=/etc/vsftpd/user_list # userlist_deny=NO # 如果设置为 NO,则 user_list 文件中的用户允许登录,其他用户禁止,默认为 YES,则 user_list 文件中的用户禁止登录。
配置完成后,保存并退出文件(在 vi 中按 ESC,然后输入 wq)。
重启 vsftpd 服务使配置生效:
service vsftpd restart
第五步:创建 FTP 用户
最简单的方式是直接使用系统已有的用户,系统有一个用户 centos,那么它就可以直接登录 FTP。
如果你想为 FTP 创建一个专用用户,可以按以下步骤操作:
-
创建新用户
# 创建一个名为 ftpuser 的用户,并指定其家目录为 /home/ftpuser useradd -m -d /home/ftpuser ftpuser # 为 ftpuser 设置密码 passwd ftpuser # 输入两次密码
-
设置用户主目录权限 为了让用户能上传文件,需要确保其主目录和上层目录的权限正确。
# 设置 ftpuser 家目录的拥有者为 ftpuser chown -R ftpuser:ftpuser /home/ftpuser # 设置目录权限为 755 (所有者可读写执行,组和其他用户可读执行) chmod -R 755 /home/ftpuser # 如果需要允许用户创建文件,确保家目录的写权限对所有者是开放的 # 这一步通常由 umask 控制,但为了保险,可以设置 # chmod u+w /home/ftpuser
第六步:客户端测试与常见问题
如何测试?
-
使用命令行测试 (Linux/macOS)
ftp your_server_ip # 然后输入用户名和密码 # 登录后,可以使用 `ls`, `get`, `put` 等命令。 # 输入 `bye` 退出。
-
使用图形化 FTP 客户端 如 FileZilla、FlashFXP 等,在主机地址处输入你的服务器 IP,选择 "普通" (Normal) 或 "询问" (Ask for password) 模式,输入用户名和密码即可连接。
-
使用浏览器 在地址栏输入
ftp://your_server_ip,然后输入用户名和密码。
常见问题排查
-
问题:连接被拒绝 (Connection refused) 或 超时
- 原因:防火墙或 SELinux 没有正确配置。
- 解决:请仔细检查 第三步 的所有操作,确保
iptables和setsebool命令都已正确执行并保存。
-
问题:530 Login incorrect.
- 原因:
- 用户名或密码错误。
- 用户被
/etc/vsftpd/ftpusers或/etc/vsftpd/user_list文件禁止了。
- 解决:
- 检查密码是否正确。
- 检查
/etc/vsftpd/ftpusers文件,默认情况下,root,bin,daemon等系统用户被列在此文件中,禁止登录 FTP,如果你想让某个系统用户(如root)能登录,需要从此文件中删除其用户名。 - 检查
/etc/vsftpd/user_list文件,默认情况下,此文件中的用户也被禁止登录(因为userlist_deny=YES),如果你想允许列表中的用户登录,可以在此文件中添加用户名,并修改配置文件userlist_deny=NO。
- 原因:
-
问题:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- 原因:在较新版本的 vsftpd 中,出于安全考虑,不允许在 chroot 环境下拥有可写根目录,你的 CentOS 6.5 可能使用了较新的 vsftpd 包。
- 解决:
- 方案一(推荐):不要把用户的根目录设置为 FTP 的根目录,用户
ftpuser的家目录是/home/ftpuser,你可以在其下创建一个ftp目录作为真正的 FTP 根目录,并设置权限。mkdir /home/ftpuser/ftp chown ftpuser:ftpuser /home/ftpuser/ftp chmod 755 /home/ftpuser/ftp
这样用户登录后就在
/home/ftpuser/ftp目录下,无法返回到/home/ftpuser。 - 方案二:在
vsftpd.conf中添加以下配置(不推荐,有安全风险)。allow_writeable_chroot=YES
- 方案一(推荐):不要把用户的根目录设置为 FTP 的根目录,用户
-
问题:数据连接失败,无法列出文件或上传下载
- 原因:通常是被动模式端口范围没有在防火墙中开放,或者客户端没有使用被动模式。
- 解决:
- 确认 第三步 中
iptables和vsftpd.conf的被动模式端口范围一致。 - 在 FTP 客户端(如 FileZilla)中,连接类型选择 "被动模式" (Passive mode)。
- 确认 第三步 中
至此,你的 CentOS 6.5 FTP 服务器已经搭建完成并且可以正常使用了。
