第一步:安装 vsftpd
我们需要通过 yum 包管理器来安装 vsftpd。

- 打开终端,以 root 用户或具有
sudo权限的用户身份登录。 - 更新软件包列表(这是一个好习惯):
sudo yum check-update
- 安装 vsftpd:
sudo yum install vsftpd -y
- 验证安装:
vsftpd -v
你会看到类似
vsftpd: version 3.0.2的输出,表示安装成功。
第二步:启动并设置开机自启
安装完成后,我们需要启动 vsftpd 服务,并设置它为开机自启,这样服务器重启后 FTP 服务也会自动运行。
- 启动 vsftpd 服务:
sudo systemctl start vsftpd
- 设置开机自启:
sudo systemctl enable vsftpd
- 检查服务状态:
sudo systemctl status vsftpd
如果看到绿色的
active (running)字样,说明服务已成功启动。
第三步:配置防火墙
CentOS 7 默认使用 firewalld 防火墙,FTP 服务需要使用两个端口:21 (控制端口) 和 20 (数据端口),以及一个用于被动模式的端口范围,我们需要在防火墙中开放这些端口。

- 永久开放 FTP 服务:
这是最简单的方法,
firewalld会自动开放 FTP 所需的端口。sudo firewall-cmd --permanent --add-service=ftp
- 重新加载防火墙配置,使更改生效:
sudo firewall-cmd --reload
- 验证规则是否添加成功:
sudo firewall-cmd --list-all
你应该在输出的 "services" 列表中看到
ftp。
第四步:配置 SELinux (Security-Enhanced Linux)
这是最关键的一步,也是最容易被忽略的一步。 如果不正确配置 SELinux,即使 FTP 服务启动了,你也可能无法连接。
-
检查 SELinux 状态:
sestatus
如果返回
SELinux status: enabled,说明 SELinux 已启用,我们强烈建议保持启用状态,因为它提供了重要的系统安全保护。
(图片来源网络,侵删) -
为 FTP 配置 SELinux 策略: 运行以下命令,它会自动为
vsftpd设置正确的布尔值,允许它读写用户主目录和公共目录。sudo setsebool -P ftpd_full_access on
-P选项表示永久修改,重启后依然有效。
第五步:配置 vsftpd
现在我们来编辑 vsftpd 的核心配置文件 /etc/vsftpd/vsftpd.conf,建议先备份原始配置文件。
-
备份原始配置文件:
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
-
编辑配置文件: 使用你喜欢的文本编辑器,
vi或nano: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
-
保存并退出文件。
- 在
vi中,按ESC,然后输入wq,回车。
- 在
第六步:创建 FTP 用户
你需要一个系统用户来登录 FTP 服务器。
-
创建新用户 (
ftpuser):sudo useradd -m -s /sbin/nologin ftpuser
-m: 自动创建用户的主目录/home/ftpuser。-s /sbin/nologin: 禁止此用户通过 SSH 或控制台登录系统,提高安全性。
-
为新用户设置密码:
sudo passwd ftpuser
根据提示输入两次密码。
-
(可选)将用户添加到允许登录列表:
vsftpd.conf中我们配置了userlist_deny=NO,这意味着只有/etc/vsftpd/user_list文件中的用户才能登录,请确保ftpuser在这个列表中。# 编辑 user_list 文件 sudo vi /etc/vsftpd/user_list # 添加一行,内容为你的用户名 ftpuser # 保存并退出
第七步:设置目录权限
为了让 FTP 用户能够上传文件,需要正确设置其主目录的权限。
-
设置主目录所有者:
sudo chown -R ftpuser:ftpuser /home/ftpuser
-
设置目录权限:
755是标准的目录权限:所有者有读写执行权限,组用户和其他用户有读和执行权限。sudo chmod -R 755 /home/ftpuser
第八步:重启 vsftpd 服务并测试
所有配置都完成后,重启 vsftpd 服务使所有更改生效。
-
重启服务:
sudo systemctl restart vsftpd
-
进行测试:
- 使用 FileZilla 或其他 FTP 客户端:
- 主机: 你的服务器 IP 地址
- 用户名:
ftpuser - 密码: 你设置的密码
- 端口:
21 - 加密: 使用 "要求使用显式 FTP over TLS" 或 "普通,不加密"(仅用于测试)。
- 成功登录后,你应该能看到
/home/ftpuser目录下的文件,并且可以上传、下载、删除文件。
- 使用 FileZilla 或其他 FTP 客户端:
常见问题排查
如果无法连接,请按以下顺序检查:
- 服务状态:
sudo systemctl status vsftpd,确保服务正在运行。 - 防火墙:
sudo firewall-cmd --list-all,确保ftp服务已被允许。 - SELinux:确认你已经执行了
sudo setsebool -P ftpd_full_access on。 - 用户权限:确认用户密码正确,且存在于
/etc/vsftpd/user_list文件中。 - 目录权限:确认
/home/ftpuser目录的所有者是ftpuser,权限是755。 - 客户端连接模式:如果连接被动模式失败,请检查你的客户端是否启用了被动模式,以及服务器防火墙
