凌峰创科服务平台

CentOS 6.5如何开启FTP服务器?

以下是详细的步骤,从安装到配置,再到防火墙和 SELinux 的设置,确保 FTP 服务能够正常使用。


第一步:安装 vsftpd

我们需要检查系统是否已经安装了 vsftpd,如果没安装,则使用 yum 进行安装。

CentOS 6.5如何开启FTP服务器?-图1

  1. 检查是否已安装

    rpm -q vsftpd

    如果已经安装,会显示版本号;如果没有,会提示 package vsftpd is not installed

  2. 安装 vsftpd

    sudo yum install -y vsftpd
  3. 启动 vsftpd 服务并设置开机自启

    # 启动服务
    sudo service vsftpd start
    # 设置开机自启
    sudo chkconfig vsftpd on

    你可以使用以下命令检查服务状态:

    sudo service vsftpd status

第二步:配置 vsftpd

vsftpd 的主配置文件是 /etc/vsftpd/vsftpd.conf,为了安全和易用,我们通常会修改一些关键配置。

  1. 备份原始配置文件 这是一个好习惯,以防配置出错可以快速恢复。

    sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
  2. 编辑配置文件 使用 vinano 编辑器打开配置文件:

    sudo vi /etc/vsftpd/vsftpd.conf
  3. 修改关键配置项 以下是推荐的配置,适用于大多数场景,你可以根据注释的说明进行修改。

    # 允许匿名登录 (默认是 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
  4. 保存并退出vi 编辑器中,按 ESC 键,然后输入 wq 并回车。


第三步:创建 FTP 用户

FTP 服务需要系统用户才能登录,我们可以为 FTP 专门创建一个用户。

CentOS 6.5如何开启FTP服务器?-图2

  1. 创建新用户 我们创建一个名为 ftpuser 的用户,并将其家目录作为 FTP 根目录。

    sudo useradd -m -s /sbin/nologin ftpuser
    • -m: 自动创建用户的家目录。
    • -s /sbin/nologin: 禁止此用户通过 SSH 或控制台登录系统,仅用于 FTP,这更安全。
  2. 设置用户密码

    sudo passwd ftpuser

    根据提示输入两次密码。

  3. 设置目录权限 (非常重要) 由于我们使用了 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 (控制端口) 和 被动模式 的高端口范围。

  1. 开放 21 端口

    sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
  2. 开放被动模式端口范围 我们在配置文件中设置了 10020-10040,所以这里也要开放这个范围。

    sudo iptables -A INPUT -p tcp --dport 10020:10040 -j ACCEPT
  3. 保存防火墙规则

    sudo service iptables save

    这条命令会将当前规则保存到 /etc/sysconfig/iptables 文件中。

  4. 重启 iptables 服务使规则生效

    CentOS 6.5如何开启FTP服务器?-图3

    sudo service iptables restart

第五步:配置 SELinux (安全增强型 Linux)

这是最容易出错的一步! 如果不正确配置 SELinux,即使上面所有步骤都正确,FTP 登录仍然会失败,CentOS 6.5 默认启用 SELinux。

  1. 检查 SELinux 状态

    /usr/sbin/sestatus

    如果结果中 SELinux statusenabled,则表示已启用。

  2. 为 FTP 设置 SELinux 布尔值 这个命令会自动处理 FTP 所需的 SELinux 策略,包括允许写入 chroot 目录。

    sudo setsebool -P ftpd_full_access on
    • -P 参数会使这个设置永久生效,重启后依然有效。
  3. (可选) 手动标记目录上下文 如果上面的命令不起作用,或者你想手动控制,可以执行以下命令,通常第一步的 setsebool 已经足够。

    # 为 ftpuser 的家目录设置正确的 SELinux 上下文
    sudo semanage fcontext -a -t public_content_rw_t "/home/ftpuser(/.*)?"
    # 应用新的上下文
    sudo restorecon -R -v /home/ftpuser

第六步:重启 vsftpd 服务并测试

完成所有配置后,重启 vsftpd 服务,然后进行测试。

  1. 重启服务

    sudo service vsftpd restart
  2. 测试 你可以使用 FTP 客户端软件(如 FileZilla、WinSCP)或者命令行进行测试。

    • 使用命令行测试 (在另一台机器上或本机)

      ftp localhost

      然后输入你创建的用户名 ftpuser 和密码。

    • 使用 FileZilla 测试

      • 主机: 你的服务器IP地址
      • 端口: 21
      • 用户名: ftpuser
      • 密码: 你设置的密码
      • 协议: 选择 "FTP - 显式加密" (FTPES) 或 "FTP" (如果加密有问题),如果使用 FTP,确保在 "被动模式" 选项卡中勾选 "使用被动模式"。

如果连接成功,并且可以上传下载文件,那么恭喜你,FTP 服务器已经成功开启!


常见问题排查

如果连接失败,请检查以下几点:

  1. 用户密码错误? 确认用户名和密码正确。
  2. 防火墙问题? 运行 sudo service iptables stop 临时关闭防火墙,看是否能连接,如果能,说明是防火墙规则问题,请重新检查第四步。
  3. SELinux 问题? 运行 sudo setenforce 0 临时禁用 SELinux,看是否能连接,如果能,说明是 SELinux 策略问题,请重新检查

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