凌峰创科服务平台

CentOS6.5如何搭建FTP服务器?

  1. 安装 vsftpd
  2. 启动并设置开机自启
  3. 配置防火墙和 SELinux (最关键的一步)
  4. 基本配置文件详解
  5. 创建 FTP 用户
  6. 客户端测试与常见问题

环境准备

  • 操作系统:CentOS 6.5 (Final)
  • 目标:搭建一个允许本地用户登录的 FTP 服务器。
  • 需要root权限或使用 sudo

第一步:安装 vsftpd

CentOS 6.5 的官方软件源中默认包含 vsftpd,我们可以直接使用 yum 命令进行安装。

CentOS6.5如何搭建FTP服务器?-图1
(图片来源网络,侵删)
# 检查是否已安装
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 数据传输所需的被动模式端口范围。

CentOS6.5如何搭建FTP服务器?-图2
(图片来源网络,侵删)
# 开放 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

然后使用 vinano 编辑器打开文件:

CentOS6.5如何搭建FTP服务器?-图3
(图片来源网络,侵删)
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 创建一个专用用户,可以按以下步骤操作:

  1. 创建新用户

    # 创建一个名为 ftpuser 的用户,并指定其家目录为 /home/ftpuser
    useradd -m -d /home/ftpuser ftpuser
    # 为 ftpuser 设置密码
    passwd ftpuser
    # 输入两次密码
  2. 设置用户主目录权限 为了让用户能上传文件,需要确保其主目录和上层目录的权限正确。

    # 设置 ftpuser 家目录的拥有者为 ftpuser
    chown -R ftpuser:ftpuser /home/ftpuser
    # 设置目录权限为 755 (所有者可读写执行,组和其他用户可读执行)
    chmod -R 755 /home/ftpuser
    # 如果需要允许用户创建文件,确保家目录的写权限对所有者是开放的
    # 这一步通常由 umask 控制,但为了保险,可以设置
    # chmod u+w /home/ftpuser

第六步:客户端测试与常见问题

如何测试?

  1. 使用命令行测试 (Linux/macOS)

    ftp your_server_ip
    # 然后输入用户名和密码
    # 登录后,可以使用 `ls`, `get`, `put` 等命令。
    # 输入 `bye` 退出。
  2. 使用图形化 FTP 客户端 如 FileZilla、FlashFXP 等,在主机地址处输入你的服务器 IP,选择 "普通" (Normal) 或 "询问" (Ask for password) 模式,输入用户名和密码即可连接。

  3. 使用浏览器 在地址栏输入 ftp://your_server_ip,然后输入用户名和密码。

常见问题排查

  1. 问题:连接被拒绝 (Connection refused) 或 超时

    • 原因:防火墙或 SELinux 没有正确配置。
    • 解决:请仔细检查 第三步 的所有操作,确保 iptablessetsebool 命令都已正确执行并保存。
  2. 问题: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
  3. 问题: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
  4. 问题:数据连接失败,无法列出文件或上传下载

    • 原因:通常是被动模式端口范围没有在防火墙中开放,或者客户端没有使用被动模式。
    • 解决
      • 确认 第三步iptablesvsftpd.conf 的被动模式端口范围一致。
      • 在 FTP 客户端(如 FileZilla)中,连接类型选择 "被动模式" (Passive mode)。

至此,你的 CentOS 6.5 FTP 服务器已经搭建完成并且可以正常使用了。

分享:
扫描分享到社交APP
上一篇
下一篇