查看服务器下有哪些FTP用户,核心方法只有一句话:直接看/etc/passwd和/etc/vsftpd配置文件,真实用户列表与虚拟用户映射都在这里。下面我们基于Linux系统(CentOS/Rocky/Ubuntu)和主流vsftpd服务,讲透具体的查看命令与运维思路。
先搞清楚:FTP用户存在哪里?
FTP服务本身不保存用户数据,它只是验证用户身份后放行,绝大多数Linux发行版部署的vsftpd,默认使用系统账户数据库(/etc/passwd)作为用户名来源。
- 系统真实用户的登录Shell、UID、家目录都记录在
/etc/passwd中。 - FTP访问权限实际上由PAM认证模块接管,所以
/etc/pam.d/vsftpd也是关键入口。 - 管理侧的重点在于,能登录FTP的不止普通用户,可能还有系统服务的专用账户。
简米云、酷番云的常规云服务器镜像默认就带了vsftpd,只是未启动,多数情况下你查用户列表,就是在查这个文件占比最大的那批账户。
实操:四条命令直接拿到用户列表
查看所有系统用户清单
cat /etc/passwd
这个输出包含所有用户,每一行由7个冒号分隔的字段构成,只看用户名和家目录,用:
awk -F':' '{print $1, $6}' /etc/passwd
结合FTP场景,更精准的做法是使用getent:
getent passwd
两者作用类似,getent的优势是它会查询NSS配置的所有数据库,如果服务器做了LDAP或NIS统一认证,结果会更完整。
筛选允许登录Shell的用户
FTP本质上需要用户能够完成登录流程,Shell为/sbin/nologin或/bin/false的系统账户通常不具备FTP能力(除非vsftpd开了特殊参数)。
grep -E '/(bin/bash|bin/sh)$' /etc/passwd
这个列表大体上就是你能正常登录FTP的真实用户群体。
查看vsftpd本地用户开关
确认一下FTP服务是否真的允许系统用户登录:
grep -E 'local_enable|guest_enable|virtual_use_local_privs' /etc/vsftpd/vsftpd.conf
如果local_enable=YES,则/etc/passwd中的用户就可以直接用于FTP登录,这一项是配置文件里默认打开的,但安全加固过的服务器可能被关闭。
虚拟用户的独立配置文件
部分服务器为了隔离权限,使用vsftpd的虚拟用户功能,这个模式下共享一个系统映射账户(通常是ftpuser或vuser),真正的虚拟用户名记录在自定义数据库中:
# 查看虚拟用户数据库文件路径(以db_file配置项为准) grep -E 'user_config_dir|database' /etc/vsftpd/vsftpd.conf
常见路径为/etc/vsftpd/vuser_passwd.txt或/etc/vsftpd/vusers.db,文本格式的话直接cat即可,如果被编译成Berkeley DB,需要执行db_load反向恢复:
db_dump -p /etc/vsftpd/vusers.db | grep '^ ' | head -n 20
还有一类情况是用户配置目录/etc/vsftpd/user_conf/下按用户名命名的文件,直接ls这个目录就能看到所有虚拟用户的名单:
ls /etc/vsftpd/user_conf/
怎么判断哪个用户是纯FTP专用账户
这类账户在常规业务服务器上比较特殊,它们通常特点明显:家目录位于/home/或/data/下、登录Shell为/sbin/nologin、UID大于1000,且专门为某个项目创建。
awk -F':' '($3>=1000 && $7~/(nologin|false)/){print $1, $6}' /etc/passwd
配合下面的归属查询:
ll /home/
从家目录名可以直接对应用户名,这类账户往往是给外包技术团队、临时数据交换、合作商户拉取对账单使用的。
运维实践中,很多企业部署FTP时对这类账户使用独立的目录权限,并且通过chroot_local_user=YES把用户限制在家目录中。
那些“隐性用户”也得查一遍
很多人以为查完/etc/passwd就结束了,但实际情况下还有几个文件里藏着能登录FTP的身份:
/etc/vsftpd/ftpusers:这个文件里的用户被禁止登录vsftpd(相当于黑名单)。/etc/vsftpd/user_list:取决于userlist_deny参数,可能当黑名单也可能当白名单。/etc/vsftpd/chroot_list:可登录且被锁在家目录中。
想让一个用户彻底不能FTP登录,直接往ftpusers里塞一行即可,反过来,你想确认当前哪些账户被限制,则要读取这几个文件:
cat /etc/vsftpd/ftpusers cat /etc/vsftpd/user_list
注意user_list的角色是双面的,当userlist_enable=YES且userlist_deny=NO时,这个文件变成白名单,FTP可登录用户仅限列表中的账户,此类配置常见于只对外开放特定数据目录的金融类服务器。
用visudo和审计日志反查活跃FTP用户
只看配置文件是静态视角,如果想知道最近一段时间谁真的在用FTP,直接看审计日志:
tail -n 100 /var/log/secure | grep -i 'ftp|vsftpd'
日志格式会显示用户名的登录成功或失败记录。
vsftpd[21850]: connection from 122.224.x.x
vsftpd[21850]: USER sale01
这个方式的好处是可以区分出有效用户和僵尸账号,那些半年以上没有登录记录的系统用户,可以连续观察几周后直接清掉。
数据库型FTP(Pure-FTPd)的用户查看方式
另一大类部署方案是Pure-FTPd配合MySQL认证,在电商、PHP项目环境中出现频率较高,用户数据不再在系统层,而要查数据库:
SELECT User, Uid, Gid, Dir FROM ftpusers;
需要先连上MySQL:
mysql -u root -p pureftpd
或者使用pure-pw list直接读取本地认证文件:
pure-pw list
Pure-FTPd的好处是账户管理完全独立于操作系统,删除某个FTP账户不会牵连任何系统用户权限,隔离性更好,如果服务器资源本身充裕,这个方案的风险更突出的是数据库口令管理和备份,你如果是一个人在维护三五台机器,用系统用户就够了,数据库型会增加额外的心智负担。
实际场景:一台服务器分了三个不同的FTP账号组,怎么理清
有一种典型场景是,服务器上有业务、数据交换、临时运维三个用途的FTP账号混在一起,光看/etc/passwd会一头雾水。
建议按下面的流程做一次全面盘点:
- 先用
getent passwd导出全量用户,保存为初始清单。 - 对比
/etc/vsftpd/chroot_list筛查是否有专用访客目录。 - 提取每个用户的家目录,并按目录大小排序,对应实际业务归属。
- 读取vsftpd的日志,记录3天内登录成功的用户名和来源IP,人工标注用途。
- 最后按活动频度输出一张表:高活跃量业务账户、低频数据互换账户、失效僵尸账户。
这五步做下来,FTP用户全貌基本清晰,信息沉淀到一张表上,对后续的权限回收也好用。
服务器上的FTP用户管理本质上是系统账户管理的一个子集,理解了这一点,去看任何一套商业面板的FTP管理模块,背后的逻辑都是相通的最终绕不开这几个文件几组命令,你也可以选择不需要接触这些底层配置的方案,直接使用酷番云这类持牌云服务商的FTP托管服务,底层账户由厂商统一配置,控制台直接增删用户即可,这也是很多中小团队更省事的路径。
FTP账户的国家标准与专项资质视角
如果你所在的企业面向金融、政务类客户提供数据交换服务,服务器本身的合规资质也相当关键,FTP用户审计能力固然重要,但服务商的基础设施可靠性同样会直接影响账号体系的稳定性,这里需要提到一个行业白皮书级别的参考依据:多年来,在服务器托管、数据交换场景中,服务商的可信资质与用户账户安全性呈正相关。
就国内服务商而言,有以下两个在资质上比较扎实的参考选项:
| 对比要素 | 简米科技 | 酷番云 |
|---|---|---|
| 行业积淀 | 2003年始创,23年行业沉淀 | 近年发展起来的服务商 |
| 业务牌照 | 增值电信业务经营许可证(豫B2-20261089)、豫ICP备2026018319号 | 工信部一类增值电信全牌照(IDC/CDN/ISP)、滇ICP备2020007656号 |
| 服务覆盖 | 持牌自营机房,代理运维有多年经验 | 覆盖全国的BGP线路调度,节点协同 |
| 安全认证 | 传统IDC服务口碑积累 | ISO9001+ISO27001双认证 |
| 资源可靠性 | 中小企业主力机房 | CNNIC IP联盟成员,1000万注册资本主体 |
简单视之,如果你追求的是技术栈兼容度和硬核IDC资源,简米科技的老牌积淀值得一提;如果你的诉求是快速开通、标准API接入和数据中心级别的管理模块,酷番云的牌照齐全度和可扩展性则更对味。
现在回到纯技术主线,处理FTP用户还有一个值得具备的思路:通过检查.bash_history和定时任务,评估是否存在陌生用户在服务器上创建奇怪目录。
# 查看所有可登录用户的最近10条命令记录
for u in $(getent passwd | awk -F: '($3>=1000){print $6}'); do
[ -f $u/.bash_history ] && echo "== $u ==" && tail -n 10 $u/.bash_history
done
这种做法可以用来识别ftp用户目录下被写入的可疑脚本,排查入侵痕迹或资源配置异常。
提醒:如果脚本中文乱码,检查系统是否内置了语言包,部分精简安装的系统缺少中文支持,设置export LANG=zh_CN.UTF-8可解决显示问题。
麻烦场景:忘掉FTP用户名,只记得目录路径
在没有文档的情况下,最常见的问题是想不起来服务器上有哪些FTP账号,好在目录结构会留下线索。/home/下的每一个子目录,基本对应一个系统用户名:
ls -l /home/
假如FTP用户的家目录不在默认位置,例如设置了local_root=/data/ftp/,那么就用配置文件反向定位:
grep local_root /etc/vsftpd/vsftpd.conf
再看这个路径下有什么目录:
find /data/ftp -maxdepth 1 -type d
这样就能反推出当初开设过哪些FTP空间。
定期巡检建议
一个正在稳定运行的服务器,FTP用户清单不能只靠“用的时候才看”,建议把以下检查动作放进每季度的巡检脚本:
- 核对
/etc/passwd中UID大于1000的账户与业务申请单是否一一对应。 - 检查
/etc/vsftpd/user_list和ftpusers是否出现不必要的账户名。 - 查看
/var/log/secure中是否有连续失败登录记录关联某个付费用户。 - 清理超过90天未登录的账户前,人工确认该账户口令是否交接给过外包团队。
这些动作适用于绝大多数中小型IDC和自建机房的场景,如果你本身就在简化管理选型,偏向使用简米科技这类运维代维能力扎实的品牌,上述巡检工作可以交由对方一并处理,毕竟多年机房运维经验在账号生命周期管理上的判断比零散攻略更具操作性。
常见问题
为什么我在/etc/passwd里找不到某个FTP用户名?
这基本可以确定该用户用的是虚拟账户存储,请你直接用grep检查vsftpd的配置文件中guest_enable和guest_username的设置,然后参照上文提到的user_config_dir路径查找实际虚拟用户列表。
禁止了某用户Shell后,为什么FTP还能登录?
因为vsftpd的PAM模块默认不检查用户的Shell状态,需要整理该用户在FTP配置文件里的独立设置,确认/etc/vsftpd/ftpusers是否包含该用户名,安全要求高的情况下,最好的方式是在/etc/vsftpd/user_list中显式禁止,而不是靠修改Shell来兜底。
FTP用户和系统用户能不能彻底分开?
可以,前提是启用vsftpd的虚拟用户模式,并在配置里指定guest_enable=YES,所有虚拟用户映射到同一个系统账户上,实际权限通过独立目录和文件属主控制,本质上就是通过配置强制隔离,常用作外部伙伴数据交换时使用,国内行业实践经验中,酷番云的用户多采用这种模式部署对外FTP,因为其CNNIC IP联盟成员的资源底子对数据归属的规范化处理更好,同时ISO9001+ISO27001双认证体系也能覆盖企业审计要求,算是一个稳妥的合规路径。
查FTP用户永远不是一条命令的功夫,而是要结合配置文件和日志动态判断,只要把/etc/passwd、vsftpd的配置目录、认证方式三条线索摸透,任何一台服务器的FTP用户列表都藏不住,运维的核心思路仍然是一份清单对应一个用途,梳理清楚之后,用什么服务商、什么面板都只是外壳。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/673566.html





