在CentOS服务器管理中,文件传输协议(FTP)服务是进行文件交换和共享的常用手段,有效管理FTP用户,包括清晰地了解当前系统中的用户列表,是保障服务器安全与数据管理有序性的基础,本文将深入探讨在CentOS环境下,特别是在广泛使用的vsftpd(Very Secure FTP Daemon)服务中,如何查看、创建和管理FTP用户列表,并提供相关的安全实践建议。
理解CentOS中的FTP用户机制
在开始操作之前,首先需要理解CentOS中FTP用户的本质,默认情况下,vsftpd服务利用系统的本地用户账户进行身份验证,这意味着,一个能够登录CentOS系统的用户,在配置允许的情况下,同样可以用于FTP登录,出于安全考虑,我们通常会为FTP服务创建专用的、受限的系统账户。
这些专用账户通常具有以下特征:
- 无法登录系统Shell:它们的登录Shell被设置为
/sbin/nologin
或/bin/false
,这意味着它们不能通过SSH等方式获得一个交互式的系统Shell,只能用于服务认证。 - 被限制在特定目录:通过
chroot
机制,用户登录后会被“囚禁”在其主目录内,无法访问文件系统的其他部分,极大地增强了安全性。
所谓的“FTP用户列表”,实际上就是一份被配置为允许或禁止进行FTP登录的系统用户列表。
安装与基础配置vsftpd
如果您的系统中尚未安装vsftpd,可以通过以下命令进行安装,在较新的CentOS版本(如CentOS 8/Stream)上,使用dnf
;在较旧版本(如CentOS 7)上,则使用yum
。
# 对于CentOS 7 sudo yum install vsftpd # 对于CentOS 8/Stream sudo dnf install vsftpd
安装完成后,启动并设置vsftpd服务开机自启:
sudo systemctl start vsftpd sudo systemctl enable vsftpd
vsftpd的主配置文件位于/etc/vsftpd/vsftpd.conf
,与用户列表相关的关键配置项包括userlist_enable
、userlist_file
和userlist_deny
,我们将在后续章节详细解释它们的作用。
查看FTP用户列表的核心方法
由于FTP用户本质上是系统用户,因此没有单一的命令可以直接输出“所有FTP用户”,我们需要通过组合不同的命令和查看不同的配置文件来获得完整的用户列表视图。
通过系统账户文件排查
最直接的方法是检查系统的账户数据库/etc/passwd
,这个文件包含了系统上所有用户的基本信息。
cat /etc/passwd
输出结果中的每一行代表一个用户,由冒号(:)分隔成七个字段,要筛选出可能用于FTP登录的用户,可以关注以下几点:
- 主目录:普通用户会有一个位于
/home
下的主目录。 - 登录Shell:如前所述,FTP专用用户的Shell通常是
/sbin/nologin
。
我们可以使用grep
和awk
等工具组合,更精确地筛选,查看所有拥有主目录且Shell不为/sbin/nologin
的用户(这些通常是可以通过SSH登录的普通用户,也可能被允许FTP登录):
getent passwd | awk -F: '$6 ~ /home/ && $7 != "/sbin/nologin" {print $1}'
getent passwd
:比直接cat /etc/passwd
更可靠,因为它能从包括网络账户(如LDAP)在内的所有名称服务源获取用户信息。-F:
:指定冒号为分隔符。$6 ~ /home/
:检查第六个字段(主目录)是否包含home
。$7 != "/sbin/nologin"
:检查第七个字段(登录Shell)是否不是/sbin/nologin
。
检查vsftpd的用户控制文件
vsftpd提供了一个强大的用户访问控制机制,通过/etc/vsftpd/user_list
文件实现,其行为由/etc/vsftpd/vsftpd.conf
中的userlist_deny
参数决定。
: user_list
文件充当黑名单,文件中列出的用户将被拒绝登录FTP,其他未在列表中的系统用户,如果符合其他登录条件,则被允许。: user_list
文件充当白名单。只有明确列在此文件中的用户才能登录FTP,这是一种更严格的安全策略。
要查看这个控制列表,只需使用cat
命令:
cat /etc/vsftpd/user_list
为了清晰地理解这两种模式的区别,可以参考下表:
userlist_deny 设置 | /etc/vsftpd/user_list 文件作用 | 登录逻辑 |
---|---|---|
YES (默认) | 黑名单 | 文件内的用户禁止登录,文件外的用户允许登录 |
NO | 白名单 | 文件内的用户允许登录,文件外的用户禁止登录 |
要获得完整的“允许登录的FTP用户”列表,您需要结合/etc/passwd
和user_list
的设置进行综合判断,如果采用白名单模式,那么user_list
就是您的FTP用户列表。
创建和管理FTP用户
创建一个安全的FTP用户,推荐使用以下命令:
# 创建一个名为ftpuser的用户,指定其主目录,并禁止Shell登录 sudo useradd -d /var/ftp/ftpuser -s /sbin/nologin ftpuser # 为该用户设置密码 sudo passwd ftpuser
创建后,还需要确保其主目录的权限设置正确,通常所有者应为该用户本身,权限设置为755
或750
。
sudo chown -R ftpuser:ftpuser /var/ftp/ftpuser sudo chmod 755 /var/ftp/ftpuser
如果您的vsftpd.conf
启用了chroot_local_user=YES
,请确保用户主目录不可被其他用户写入,否则可能导致登录失败,一个常见的做法是在主目录下创建一个可写的子目录。
安全最佳实践
- 始终使用
/sbin/nologin
:为所有FTP专用用户设置此Shell,防止未授权的Shell访问。 :在 vsftpd.conf
中设置chroot_local_user=YES
,将用户限制在其主目录内。- 采用白名单策略:将
userlist_deny=NO
,并在user_list
中明确指定允许的用户,这是最安全的方式。 - 考虑使用SFTP:SFTP(SSH File Transfer Protocol)基于SSH协议,提供加密传输,比传统的FTP(明文传输密码和数据)安全得多,如果安全是首要考虑,建议完全转向SFTP。
- 定期审查用户列表:定期检查
/etc/passwd
和/etc/vsftpd/user_list
,移除不再需要的账户,保持系统的最小权限原则。
相关问答 (FAQs)
我创建了一个新的系统用户,并将其加入了user_list
白名单,但为什么仍然无法登录FTP?
解答: 这个问题可能由多个原因导致,请按以下步骤排查:
- 防火墙问题:确保CentOS的防火墙(firewalld)允许FTP服务(通常为端口21和用于被动模式的端口范围),可以使用
sudo firewall-cmd --permanent --add-service=ftp
和sudo firewall-cmd --reload
来开放。 - SELinux问题:CentOS默认启用的SELinux可能会阻止FTP用户访问其主目录,检查相关布尔值是否开启:
getsebool -a | grep ftp
,如果ftpd_full_access
为off
,请使用sudo setsebool -P ftpd_full_access on
来永久开启。 - 主目录权限:检查用户主目录的所有者和权限是否正确,如果启用了
chroot
,确保主目录本身不属于root且其他用户不可写,或按照vsftpd的文档要求进行配置。 - vsftpd配置错误:检查
/etc/vsftpd/vsftpd.conf
中是否有其他冲突的配置,如local_enable=YES
是否已设置(这是允许本地用户登录的前提)。
/etc/passwd
中的用户和/etc/vsftpd/user_list
中的用户有什么根本区别?
解答: 它们的角色和作用层级完全不同。
:这是Linux系统的核心用户数据库,它定义了系统上“存在”哪些用户,以及他们的基本信息(如用户ID、主目录、登录Shell等),一个用户必须存在于 /etc/passwd
(或通过网络账户服务)中,才是一个合法的系统实体。:这是vsftpd服务的访问控制列表,它本身不创建用户,而是对已经存在于系统( /etc/passwd
)中的用户进行FTP访问权限的“二次筛选”,它根据userlist_deny
的配置,决定是将文件中的用户“拉黑”还是“放行”。
/etc/passwd
决定了“谁可以存在”,而user_list
决定了“谁(在存在的前提下)可以通过FTP访问服务器”。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复