凌峰创科服务平台

CentOS如何快速配置FTP服务器?

本教程将详细讲解在 CentOS 7/8/9 上安装和配置 vsftpd 的完整步骤,包括匿名用户、本地用户和虚拟用户的配置。

CentOS如何快速配置FTP服务器?-图1
(图片来源网络,侵删)

第一步:安装 vsftpd

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

# 更新软件包缓存
sudo yum update -y
# 安装 vsftpd
sudo yum install -y vsftpd

安装完成后,启动 vsftpd 服务并设置为开机自启:

# 启动 vsftpd 服务
sudo systemctl start vsftpd
# 设置为开机自启
sudo systemctl enable vsftpd

检查一下服务状态,确保它正在运行:

sudo systemctl status vsftpd

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

CentOS如何快速配置FTP服务器?-图2
(图片来源网络,侵删)

第二步:配置防火墙和 SELinux

为了能让外部客户端访问 FTP 服务器,我们需要在防火墙中开放 FTP 端口(默认为 21),SELinux(默认启用)也需要进行相应配置。

配置防火墙

# 永久开放 FTP 服务 (这会自动开放 21 端口并处理被动模式的端口范围)
sudo firewall-cmd --permanent --add-service=ftp
# 重新加载防火墙配置使更改生效
sudo firewall-cmd --reload

配置 SELinux

这是最关键也最容易出错的一步。vsftpd 在 SELinux 下有严格的策略,我们需要为它设置正确的布尔值。

# 检查当前的 SELinux 状态
sestatus
# 临时允许 FTP 服务器写入和读取家目录(仅本次重启有效)
# 为了测试,可以先运行这个
setsebool -P ftpd_full_access on
# 如果希望永久生效,请使用 -P 参数
setsebool -P ftpd_full_access on

注意setsebool -P 会永久修改 SELinux 策略,在生产环境中,如果出于安全考虑不想完全开放,可以更精细地配置,但对于大多数用户来说,ftpd_full_access 是最简单有效的解决方案。


第三步:配置 vsftpd

vsftpd 的主配置文件是 /etc/vsftpd/vsftpd.conf,我们建议先备份原始配置文件,然后创建一个新的配置。

CentOS如何快速配置FTP服务器?-图3
(图片来源网络,侵删)
# 备份原始配置文件
sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
# 创建一个新的配置文件
sudo vim /etc/vsftpd/vsftpd.conf

粘贴到 vsftpd.conf 文件中,这个配置文件包含了最常用和最安全的设置,禁止匿名用户登录,只允许本地用户访问

# 禁止匿名用户登录
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许本地用户对 FTP 服务器文件有写权限
write_enable=YES
# 设置本地用户上传文件的 umask 值
local_umask=022
# 允许为目录配置显示信息
dirmessage_enable=YES
# 启用上传和下载的日志记录
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
# 设定用户登录后所在的目录,默认为用户的家目录
chroot_local_user=YES
# chroot_local_user=YES,则此项设为 NO,防止用户被锁定在无写权限的目录中
allow_writeable_chroot=YES
# 激活目录列表功能
ls_recurse_enable=YES
# 监听 IPv4 套接字
listen=YES
# (可选)监听 IPv6 套接字,如果系统支持 IPv4,请注释掉下面这行
# listen_ipv6=YES
# PASV 模式设置,解决客户端连接被动模式失败的问题
pasv_enable=YES
pasv_min_port=10022
pasv_max_port=10042
# 建议在防火墙中也开放这个端口范围
# sudo firewall-cmd --permanent --add-port=10022-10042/tcp
# sudo firewall-cmd --reload
# 用户黑名单
# 如果要禁止某些用户登录,将他们的用户名添加到 /etc/vsftpd/ftpusers 文件中
# userlist_enable=YES
# userlist_file=/etc/vsftpd/user_list
# userlist_deny=YES  # YES表示禁止 user_list 中的用户,NO表示只允许 user_list 中的用户

保存并退出文件(在 vim 中是 wq)。

配置完成后,重启 vsftpd 服务使新配置生效:

sudo systemctl restart vsftpd

第四步:创建 FTP 用户并设置权限

我们需要创建一个可以登录 FTP 的本地用户,假设我们要创建一个名为 ftpuser 的用户。

  1. 创建用户并设置密码

    sudo useradd -m -s /sbin/nologin ftpuser
    # -m: 创建用户的同时创建其家目录
    # -s /sbin/nologin: 禁止此用户通过 SSH 或控制台登录系统,提高安全性
    sudo passwd ftpuser
    # 为 ftpuser 设置密码
  2. 设置用户家目录的权限 为了让 ftpuser 能够上传文件,其家目录的权限必须正确设置。

    # 设置 ftpuser 家目录的所有者为 ftpuser
    sudo chown -R ftpuser:ftpuser /home/ftpuser
    # 设置家目录的权限为 755 (所有者可读写执行,组和其他用户可读和执行)
    sudo chmod -R 755 /home/ftpuser

    重要提示chroot 功能要求用户的主目录不能有写权限(所有者),否则 vsftpd 会出于安全拒绝登录,这就是为什么我们设置 allow_writeable_chroot=YES 的原因,它允许用户在 chroot 环境内有写权限。


第五步:测试 FTP 连接

你可以使用 FTP 客户端(如 FileZilla、WinSCP)或命令行来测试连接了。

连接信息:

  • 主机/服务器: 你的 CentOS 服务器 IP 地址
  • 用户名: ftpuser
  • 密码: 你刚才设置的密码
  • 端口: 21

使用命令行测试 (在 Linux/macOS 上):

# 格式: ftp <服务器IP>
ftp <你的服务器IP>
# 然后输入用户名和密码

使用 FileZilla 测试:

  1. 打开 FileZilla。
  2. 在主机栏输入你的服务器 IP。
  3. 在用户名和密码栏输入 ftpuser 和密码。
  4. 端口保持 21。
  5. 点击“快速连接”。

如果连接成功,你应该能看到 ftpuser 的家目录 /home/ftpuser 下的文件。


高级配置:创建虚拟用户(更安全)

在生产环境中,直接使用系统本地用户登录 FTP 存在安全风险(密码泄露可能导致整个系统被入侵),创建虚拟用户是更安全、更灵活的方案,虚拟用户映射到一个专用的、非系统用户上。

安装依赖

我们需要 db4 工具来创建用户数据库。

sudo yum install -y db4-utils

创建虚拟用户名和密码文件

创建一个名为 login.txt 的文件,奇数行是用户名,偶数行是对应的密码。

sudo vim /etc/vsftpd/login.txt

示例:

virtual_user1
password1
virtual_user2
password2

生成数据库文件

使用 db_load 命令将文本文件转换为 db 数据库文件。

sudo db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db

设置数据库文件的权限:

sudo chmod 600 /etc/vsftpd/vsftpd_login.db

创建 PAM 文件

PAM (Pluggable Authentication Modules) 用于认证,我们需要创建一个 PAM 配置文件来使用我们的虚拟用户数据库。

sudo vim /etc/pam.d/vsftpd.virtual
#%PAM-1.0
auth    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
account required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login

创建映射的系统用户

这个

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