凌峰创科服务平台

CentOS7如何配置FTP服务器?

第一步:安装 vsftpd

我们需要通过 yum 包管理器来安装 vsftpd

CentOS7如何配置FTP服务器?-图1
(图片来源网络,侵删)
  1. 打开终端,以 root 用户或具有 sudo 权限的用户身份登录。
  2. 更新软件包列表(这是一个好习惯):
    sudo yum check-update
  3. 安装 vsftpd
    sudo yum install vsftpd -y
  4. 验证安装
    vsftpd -v

    你会看到类似 vsftpd: version 3.0.2 的输出,表示安装成功。


第二步:启动并设置开机自启

安装完成后,我们需要启动 vsftpd 服务,并设置它为开机自启,这样服务器重启后 FTP 服务也会自动运行。

  1. 启动 vsftpd 服务
    sudo systemctl start vsftpd
  2. 设置开机自启
    sudo systemctl enable vsftpd
  3. 检查服务状态
    sudo systemctl status vsftpd

    如果看到绿色的 active (running) 字样,说明服务已成功启动。


第三步:配置防火墙

CentOS 7 默认使用 firewalld 防火墙,FTP 服务需要使用两个端口:21 (控制端口)20 (数据端口),以及一个用于被动模式的端口范围,我们需要在防火墙中开放这些端口。

CentOS7如何配置FTP服务器?-图2
(图片来源网络,侵删)
  1. 永久开放 FTP 服务: 这是最简单的方法,firewalld 会自动开放 FTP 所需的端口。
    sudo firewall-cmd --permanent --add-service=ftp
  2. 重新加载防火墙配置,使更改生效:
    sudo firewall-cmd --reload
  3. 验证规则是否添加成功
    sudo firewall-cmd --list-all

    你应该在输出的 "services" 列表中看到 ftp


第四步:配置 SELinux (Security-Enhanced Linux)

这是最关键的一步,也是最容易被忽略的一步。 如果不正确配置 SELinux,即使 FTP 服务启动了,你也可能无法连接。

  1. 检查 SELinux 状态

    sestatus

    如果返回 SELinux status: enabled,说明 SELinux 已启用,我们强烈建议保持启用状态,因为它提供了重要的系统安全保护。

    CentOS7如何配置FTP服务器?-图3
    (图片来源网络,侵删)
  2. 为 FTP 配置 SELinux 策略: 运行以下命令,它会自动为 vsftpd 设置正确的布尔值,允许它读写用户主目录和公共目录。

    sudo setsebool -P ftpd_full_access on
    • -P 选项表示永久修改,重启后依然有效。

第五步:配置 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

    以下是推荐的配置,你可以根据需要修改,我们将注释掉或修改一些默认行,并添加新的行。

    # 禁止匿名用户登录
    anonymous_enable=NO
    # 允许本地用户登录
    local_enable=YES
    # 允许本地用户有写权限(上传、创建目录等)
    write_enable=YES
    # 设置本地用户上传文件的文件掩码,022 会使上传的文件权限为 755
    local_umask=022
    # 允许为目录列出文件
    dirmessage_enable=YES
    # 启用上传和下载的日志记录
    xferlog_enable=YES
    xferlog_std_format=YES
    xferlog_file=/var/log/xferlog
    # 保持数据连接
    connect_from_port_20=YES
    # 用户被限制在其主目录下 (非常重要!)
    chroot_local_user=YES
    # 启用用户列表文件,并指定文件路径
    userlist_enable=YES
    userlist_file=/etc/vsftpd/user_list
    userlist_deny=NO  # NO 表示允许 user_list 文件中的用户登录
    # 启用被动模式 (强烈推荐,因为大多数客户端都在防火墙后)
    # 我们指定一个端口范围,便于防火墙配置
    pasv_enable=YES
    pasv_min_port=10020
    pasv_max_port=10220
    # 关闭 ASCII 模式的下载
    ascii_upload_enable=YES
    ascii_download_enable=YES
    # 设置欢迎信息
    ftpd_banner=Welcome to my FTP service.
    # 其他安全设置
    # 禁止匿名用户上传和创建目录
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    # 禁止切换根目录
    allow_writeable_chroot=YES
  3. 保存并退出文件

    • vi 中,按 ESC,然后输入 wq,回车。

第六步:创建 FTP 用户

你需要一个系统用户来登录 FTP 服务器。

  1. 创建新用户 (ftpuser):

    sudo useradd -m -s /sbin/nologin ftpuser
    • -m: 自动创建用户的主目录 /home/ftpuser
    • -s /sbin/nologin: 禁止此用户通过 SSH 或控制台登录系统,提高安全性。
  2. 为新用户设置密码

    sudo passwd ftpuser

    根据提示输入两次密码。

  3. (可选)将用户添加到允许登录列表vsftpd.conf 中我们配置了 userlist_deny=NO,这意味着只有 /etc/vsftpd/user_list 文件中的用户才能登录,请确保 ftpuser 在这个列表中。

    # 编辑 user_list 文件
    sudo vi /etc/vsftpd/user_list
    # 添加一行,内容为你的用户名
    ftpuser
    # 保存并退出

第七步:设置目录权限

为了让 FTP 用户能够上传文件,需要正确设置其主目录的权限。

  1. 设置主目录所有者

    sudo chown -R ftpuser:ftpuser /home/ftpuser
  2. 设置目录权限

    • 755 是标准的目录权限:所有者有读写执行权限,组用户和其他用户有读和执行权限。
      sudo chmod -R 755 /home/ftpuser

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

所有配置都完成后,重启 vsftpd 服务使所有更改生效。

  1. 重启服务

    sudo systemctl restart vsftpd
  2. 进行测试

    • 使用 FileZilla 或其他 FTP 客户端
      • 主机: 你的服务器 IP 地址
      • 用户名: ftpuser
      • 密码: 你设置的密码
      • 端口: 21
      • 加密: 使用 "要求使用显式 FTP over TLS" 或 "普通,不加密"(仅用于测试)。
    • 成功登录后,你应该能看到 /home/ftpuser 目录下的文件,并且可以上传、下载、删除文件。

常见问题排查

如果无法连接,请按以下顺序检查:

  1. 服务状态sudo systemctl status vsftpd,确保服务正在运行。
  2. 防火墙sudo firewall-cmd --list-all,确保 ftp 服务已被允许。
  3. SELinux:确认你已经执行了 sudo setsebool -P ftpd_full_access on
  4. 用户权限:确认用户密码正确,且存在于 /etc/vsftpd/user_list 文件中。
  5. 目录权限:确认 /home/ftpuser 目录的所有者是 ftpuser,权限是 755
  6. 客户端连接模式:如果连接被动模式失败,请检查你的客户端是否启用了被动模式,以及服务器防火墙
分享:
扫描分享到社交APP
上一篇
下一篇