在CentOS服务器上配置FTP服务并为特定业务或用户创建独立的FTP账户,是系统管理中一项常见且重要的任务,这不仅便于文件传输,还能通过权限隔离有效提升服务器的安全性,本文将详细介绍如何在CentOS系统中,通过主流的vsftpd(Very Secure FTP Daemon)服务,安全地新增一个FTP用户。

准备工作:安装与启动vsftpd
在新增用户之前,我们需要确保系统已经安装并正确运行了vsftpd服务。
检查vsftpd是否已安装,在终端中执行以下命令:
rpm -qa | grep vsftpd
如果没有任何输出,则表示未安装,对于CentOS 7及以下版本,使用yum安装;对于CentOS 8及以上版本,则使用dnf。
# For CentOS 7 sudo yum install vsftpd # For CentOS 8/9/Stream sudo dnf install vsftpd
安装完成后,启动服务并设置其开机自启:
sudo systemctl start vsftpd sudo systemctl enable vsftpd
配置防火墙以允许FTP流量,FTP使用20(数据端口)和21(控制端口)两个端口,为了支持被动模式,建议开放一个端口范围。
sudo firewall-cmd --permanent --add-port=20-21/tcp sudo firewall-cmd --permanent --add-port=30000-31000/tcp sudo firewall-cmd --reload
我们将在后续配置中指定这个被动模式的端口范围。
核心步骤:新增FTP专用用户
我们将创建一个专门用于FTP登录的用户,并对其进行安全限制。
创建系统用户
我们将创建一个名为ftpuser的示例用户,关键在于使用-s /sbin/nologin参数,这会禁止该用户通过SSH等方式登录服务器shell,仅允许FTP服务访问,从而增强安全性,使用-d参数为其指定一个专属的主目录。

sudo useradd -d /var/ftp/ftpuser -s /sbin/nologin ftpuser
这里,/var/ftp/ftpuser将是该用户登录后看到的根目录。
为用户设置密码
为新创建的用户设置一个强密码。
sudo passwd ftpuser
系统会提示您输入并确认新密码。
创建并配置用户主目录
如果指定的主目录不存在,需要手动创建,并设置正确的所有权和权限。
# 创建主目录 sudo mkdir -p /var/ftp/ftpuser # 将目录所有者更改为新用户 sudo chown -R ftpuser:ftpuser /var/ftp/ftpuser # 设置目录权限,确保用户有读写执行权限 sudo chmod 755 /var/ftp/ftpuser
优化配置:限制用户活动范围
默认情况下,FTP用户可能会浏览到其主目录之外的系统文件,这存在安全风险,我们需要通过修改vsftpd的配置文件,将用户“囚禁”在其主目录内。
编辑vsftpd的主配置文件:
sudo vi /etc/vsftpd/vsftpd.conf
确保以下配置项被正确设置或取消注释:

| 配置项 | 值 | 说明 |
|---|---|---|
anonymous_enable | NO | 禁止匿名用户登录 |
local_enable | YES | 允许本地用户登录 |
write_enable | YES | 允许用户上传文件 |
chroot_local_user | YES | 将所有本地用户限制在其主目录内 |
allow_writeable_chroot | YES | 允许在chroot环境下对主目录有写权限(重要) |
pasv_min_port | 30000 | 被动模式最小端口 |
pasv_max_port | 31000 | 被动模式最大端口 |
userlist_enable | YES | 启用用户列表 |
userlist_file | /etc/vsftpd/user_list | 指定用户列表文件路径 |
userlist_deny | NO | 设置为NO,表示仅允许user_list中的用户登录 |
注意: allow_writeable_chroot=YES 是一个非常关键的配置,在高版本的vsftpd中,出于安全考虑,如果用户的根目录具有写权限,连接会被拒绝,添加此配置可以解决这个问题。
将我们创建的ftpuser添加到允许登录的用户列表中:
echo "ftpuser" | sudo tee -a /etc/vsftpd/user_list
所有配置完成后,重启vsftpd服务使更改生效:
sudo systemctl restart vsftpd
至此,一个名为ftpuser、被限制在/var/ftp/ftpuser目录内、无法通过SSH登录的FTP专用用户就已成功创建,您可以使用任何FTP客户端(如FileZilla)通过服务器的IP地址、用户名ftpuser及其密码进行连接测试。
相关问答FAQs
为什么FTP客户端连接后提示“530 Login incorrect”?
解答: 这个错误提示登录不正确,但原因可能多种多样,请确认您输入的用户名和密码完全无误,如果确认无误,请检查以下几点:
- 用户列表配置: 检查
/etc/vsftpd/vsftpd.conf中userlist_deny的值,如果设置为YES,则user_list文件中的用户是禁止登录的;如果设置为NO,则只有user_list中的用户才允许登录,确保您的用户在正确的“允许”或“禁止”列表中。 - SELinux限制: CentOS的SELinux安全模块可能会阻止FTP用户访问其主目录,可以临时关闭SELinux测试(
setenforce 0),如果问题解决,则需要设置正确的SELinux布尔值,执行sudo setsebool -P ftpd_full_access on可以允许FTP服务完全访问用户目录。 - PAM模块问题: 检查
/etc/pam.d/vsftpd文件,确保没有不合理的认证限制。
如何允许FTP用户上传文件到主目录,但禁止其删除文件?
解答: 这可以通过精细的目录权限控制来实现,标准的Linux权限(读、写、执行)无法直接区分“创建”和“删除”权限,因为它们都属于“写”权限,可以利用目录的“粘滞位”(Sticky Bit)来实现类似效果。
- 确保用户主目录的所有者是
ftpuser,并且用户组也是ftpuser。sudo chown ftpuser:ftpuser /var/ftp/ftpuser
- 给目录设置
755或775权限,并添加粘滞位。755意味着所有者有读写执行权限,组和其他用户只有读和执行权限。775则给组用户也增加了写权限,粘滞位用t表示。# 允许所有者上传,组内其他用户也可以上传,但所有人(包括所有者)都不能删除别人的文件 sudo chmod 1775 /var/ftp/ftpuser
设置了粘滞位后,目录中的任何文件(即使是
ftpuser自己创建的)都只能被其所有者或root用户删除,这样,用户就可以自由上传文件,但无法删除目录中已存在的文件,除非他是该文件的所有者,这提供了一种更安全的共享目录模式。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复