5154

Good Luck To You!

CentOS 7.4搭建FTP服务器的详细步骤有哪些?

在 CentOS 7.4 系统上搭建一个稳定、安全的 FTP(文件传输协议)服务器是企业或个人进行文件共享、备份和管理的常见需求,本文将详细介绍如何使用业界广泛推荐的 vsftpd(Very Secure FTP Daemon)软件包来构建一个功能完善的 FTP 服务,整个过程涵盖安装、配置、防火墙设置以及用户管理,旨在提供一份清晰、可操作的实践指南。

CentOS 7.4搭建FTP服务器的详细步骤有哪些?

第一步:安装 vsftpd 服务

在开始之前,请确保您拥有具有 sudo 权限的用户账户或直接使用 root 用户进行操作,CentOS 7.4 的官方软件源中已经包含了 vsftpd,因此安装过程非常简便。

打开终端,执行以下命令来安装 vsftpd

sudo yum install vsftpd -y

安装完成后,需要启动 vsftpd 服务,并将其设置为开机自启,以确保服务器重启后 FTP 服务能自动运行。

sudo systemctl start vsftpd
sudo systemctl enable vsftpd

您可以使用 sudo systemctl status vsftpd 命令来检查服务是否已经成功启动并正在运行。

第二步:配置防火墙

CentOS 7.4 默认使用 firewalld 作为防火墙管理工具,为了允许外部客户端访问 FTP 服务,必须在防火墙中开放相应的端口,FTP 使用两个端口:21(命令端口)和 20(数据端口,用于主动模式),为了更好地兼容各种网络环境(尤其是客户端位于 NAT 之后),我们强烈建议启用并配置被动模式(Passive Mode)。

开放 FTP 服务,firewalld 会自动处理标准端口 21:

sudo firewall-cmd --permanent --add-service=ftp

为了支持被动模式,我们需要开放一个端口范围,这个范围将在稍后的 vsftpd 配置文件中定义,这里我们以 10000-10100 为例:

sudo firewall-cmd --permanent --add-port=10000-10100/tcp

完成规则添加后,重新加载防火墙配置使其生效:

sudo firewall-cmd --reload

第三步:配置 vsftpd 服务

vsftpd 的核心配置文件位于 /etc/vsftpd/vsftpd.conf,在进行任何修改之前,建议先备份原始配置文件:

CentOS 7.4搭建FTP服务器的详细步骤有哪些?

sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak

使用您喜欢的文本编辑器(如 vinano)打开配置文件:

sudo vi /etc/vsftpd/vsftpd.conf

以下是一些关键配置项的推荐设置和说明,您可以根据需求进行调整。

配置项 推荐值 说明
anonymous_enable=NO NO 禁止匿名用户登录,这是提升安全性的首要步骤。
local_enable=YES YES 允许本地系统用户登录 FTP 服务器。
write_enable=YES YES 允许登录用户进行写入操作(上传、删除、创建目录等)。
chroot_local_user=YES YES 将所有本地用户限制在其主目录内,防止用户访问系统其他目录。
allow_writeable_chroot=YES YES 当启用 chroot 时,如果用户主目录可写,某些版本的 vsftpd 会拒绝登录,此选项允许该行为。
pasv_enable=YES YES 启用被动模式。
pasv_min_port=10000 10000 设置被动模式使用的最小端口,需与防火墙开放的端口范围一致。
pasv_max_port=10100 10100 设置被动模式使用的最大端口。
userlist_enable=YES YES 启用用户列表控制。
userlist_file=/etc/vsftpd/user_list /etc/vsftpd/user_list 指定用户列表文件的路径。
userlist_deny=NO NO 设置为 NO 时,user_list 文件仅作为允许登录的用户白名单。

关于用户列表的特别说明userlist_deny=NO 是一个推荐的安全实践,这意味着只有在 /etc/vsftpd/user_list 文件中明确列出的用户才能登录 FTP,默认情况下,这个文件可能不存在或包含一些系统用户,您可以清空该文件,然后手动添加允许 FTP 访问的用户名,每行一个。

第四步:创建 FTP 专用用户

为了安全起见,不建议直接使用 root 或其他重要系统用户进行 FTP 操作,我们可以创建一个专用的 FTP 用户。

创建一个名为 ftpuser 的用户,并为其指定一个主目录(如 /var/ftp/ftpuser):

sudo mkdir -p /var/ftp/ftpuser
sudo useradd -d /var/ftp/ftpuser -s /sbin/nologin ftpuser
  • -d /var/ftp/ftpuser:指定用户的主目录。
  • -s /sbin/nologin:禁止该用户通过 SSH 登录系统,仅允许其用于 FTP 服务,增强安全性。

为新用户设置密码:

sudo passwd ftpuser

将新创建的用户添加到 user_list 白名单中:

echo "ftpuser" | sudo tee -a /etc/vsftpd/user_list

确保该用户对其主目录拥有适当的权限:

sudo chown -R ftpuser:ftpuser /var/ftp/ftpuser
sudo chmod -R 755 /var/ftp/ftpuser

第五步:重启服务并测试

所有配置完成后,重启 vsftpd 服务以应用更改:

CentOS 7.4搭建FTP服务器的详细步骤有哪些?

sudo systemctl restart vsftpd

您可以使用 FTP 客户端(如 FileZilla、WinSCP 或命令行 ftp 工具)进行连接测试,在客户端中输入服务器的 IP 地址、用户名(ftpuser)和刚刚设置的密码,如果一切顺利,您应该能够成功登录并看到用户主目录下的内容。


相关问答FAQs

连接 FTP 服务器时,提示 “500 OOPS: vsftpd: refusing to run with writable root inside chroot()” 错误,是什么原因?

解答:这是一个非常常见的安全限制,当您在 vsftpd.conf 中设置了 chroot_local_user=YES,将用户限制在其主目录时,vsftpd 默认不允许该主目录具有写入权限,以防用户利用权限提升漏洞,要解决这个问题,有两种方法:

  1. 推荐方法:在 vsftpd.conf 中添加或修改 allow_writeable_chroot=YES,然后重启服务,这明确告诉 vsftpd 允许 chroot 目录可写。
  2. 传统方法:保持用户主目录不可写,然后在其内部创建一个可写的子目录用于文件上传。
    sudo chmod a-w /var/ftp/ftpuser
    sudo mkdir /var/ftp/ftpuser/uploads
    sudo chown ftpuser:ftpuser /var/ftp/ftpuser/uploads

    这样用户登录后根目录不可写,但可以在 uploads 目录中进行所有写操作。

在 FileZilla 等客户端中,可以成功登录 FTP 服务器,但无法列出目录内容,连接最终超时,这是怎么回事?

解答:这个问题通常与被动模式的配置有关,客户端在登录后,会尝试与服务器建立一个被动模式的数据连接来获取文件列表,如果这个过程失败,就会出现上述症状,请检查以下几点:

  1. 防火墙配置:确认您已经在 firewalld 中开放了 pasv_min_portpasv_max_port 指定的整个端口范围(10000-10100),并且已经执行了 firewall-cmd --reload
  2. vsftpd.conf 配置:确认 pasv_enable=YES 已启用,pasv_min_portpasv_max_port 的值与防火墙开放的端口范围完全一致。
  3. 网络设备:如果您的服务器位于物理防火墙或云服务商的安全组之后,请确保这些外部设备也开放了相应的被动模式端口,这通常是容易被忽略的一环。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.