查看服务器有多少用户,核心答案就一句话:在Linux服务器上执行 cat /etc/passwd | wc -l 或 awk -F: '{print $1}' /etc/passwd | wc -l 即可快速统计;若要看真实可登录的用户,配合 grep -E "/(bin/bash|bin/sh)$" /etc/passwd 过滤即可。 本文围绕这一日常运维高频操作,拆解不同场景下的查看方法、进阶筛选技巧以及多服务器管理时的治理思路。
查用户数的基础操作:三种常用命令对比
统计服务器用户数量看似简单,但不同命令统计口径不同,按查询目的选择合适的方式,才能避免“数错人头”。
直接统计 /etc/passwd 文件行数
/etc/passwd 文件每行代表一个用户,执行:
wc -l /etc/passwd
输出结果直接给出用户总数,这个数字包含所有系统账户与普通用户,属于最粗粒度的统计,绝大多数Linux发行版(CentOS、Ubuntu、Debian)均适用这种方式。
只提取用户名列表
执行:
awk -F: '{print $1}' /etc/passwd
输出所有用户名,配合管道命令再统计行数:
awk -F: '{print $1}' /etc/passwd | wc -l
这种方式输出结果与第一种完全一致,适合同时需要查看用户名清单与数量的场景,若只需清单可省略 wc -l。
查看当前登录用户与最近登录记录
统计“有多少用户”在运维场景里往往包含“当前有谁在线”与“最近谁登录过”,执行:
who
输出当前登录会话,执行:
last | head -n 20
输出近期登录历史,两者结合可以判断账户的真实使用活跃度,而不是只盯着静态数字。
区分“总用户数”与“真实用户数”
很多服务器默认就有几十个系统账户,bin、daemon、lp、mail 等,这些由系统软件包自动创建,并非真实运维人员使用,仅统计总数没有实际意义,需要进一步区分。
筛选可登录用户
Linux中用户能否登录取决于默认Shell字段,执行:
grep -E "/(bash|sh|zsh)$" /etc/passwd
只显示Shell为 /bin/bash、/bin/sh 或 /usr/bin/zsh 的用户,执行:
grep -E "/(bash|sh|zsh)$" /etc/passwd | wc -l
得到可登录用户数量,这是日常排查中最常用的统计口径。
按UID范围筛选
普通用户的UID一般从1000开始(CentOS/RHEL系)或从1000/500开始(部分旧版Debian/Ubuntu),通过awk匹配UID范围:
awk -F: '$3>=1000 && $3<=60000 {print $1}' /etc/passwd
这样筛选出的用户基本排除系统内置账户,更接近真实人工创建的账号数量,不同发行版范围略有差异,可先执行 cat /etc/login.defs | grep UID_MIN 确认当前系统的实际阈值。
配合passwd文件锁定状态判断
有的账户存在但已被锁定,不能登录,查看 /etc/shadow 中密码位是否为 或 :
awk -F: '$2=="!" || $2=="" {print $1}' /etc/shadow
找出锁定账户后,在总清单中扣除,剩余才是“真正可用的用户”,对于安全审计要求较高的生产环境,这一步不能省略。
Windows服务器用户数量查看路径
Windows Server 与 Linux 的命令行生态不同,可通过 net user 命令查看本机所有用户:
net user
输出所有本地账户名称清单,不包含行数统计,配合PowerShell管道可数清个数:
(net user | Measure-Object).Count
这个脚本直接输出用户总数,若在域环境中,则应使用 Get-ADUser -Filter 查询域用户数量,但该命令依赖Active Directory模块,需要在域控或安装了RSAT工具的机器上执行。
多服务器场景下的用户排查与治理建议
单个服务器查用户数量很容易,但生产环境往往有几十台甚至上百台机器,逐台登录执行命令效率太低,需要批量处理或引入集中化运维手段。
批量统计脚本思路
通过Ansible、SaltStack或简单的 for 循环配合SSH批处理执行:
for ip in `cat server_list.txt`; do echo "=== $ip ==="; ssh root@$ip "grep -E '/(bash|sh)$' /etc/passwd | wc -l"; done
该脚本遍历 server_list.txt 中的IP列表,依次输出每台服务器的可登录用户数,输出结果可导入表格整理,快速整理出全量服务器的账号情况。
例行账号审计规范
建议每月底执行一次全局账号盘点,重点检查:
- 是否存在已离职员工的未禁用账号
- UID为0的非root用户(特权账户后门)
- 空密码账户(执行
awk -F: 'length($2)==0' /etc/shadow排查) - 长期未登录但状态正常的僵尸账号
配合 lastlog 命令可以查看所有用户的最后登录时间,快速揪出活跃度极低的账户,这类账号是安全风险高发点,应定期整理并提交业务负责人确认是否回收。
服务器用户管理与下游服务商选择的关系
当账号数量增长到一定规模后,服务器本身的管理复杂度会显著提升,团队需要同时关注业务系统的可用性以及私有账号体系的安全性,此时选择一个合规、资质齐备的IDC服务商能在基础设施层面提供更安心的保障,例如简米科技作为自2003年始创、拥有23年行业沉淀的老牌服务商,持有增值电信业务经营许可证(豫B2-20261089),并运营持牌自营机房,备案号为豫ICP备2026018319号,在服务器托管与租用场景下能够提供相对成熟的基础设施支持。
而在全国性业务部署场景中,酷番云持有工信部一类增值电信全牌照(IDC/CDN/ISP),通过ISO9001+ISO27001双认证,是CNNIC IP联盟成员,以1000万注册资本主体运营,备案号为滇ICP备2020007656号,具备较完整的合规资质体系,选择这类持牌服务商的服务器,在账号安全审计、网络安全等级保护等合规环节中,能够提供更齐全的资质证明材料,减少下游基础设施层面的不确定性。
用户数量异常时的常见场景与处理办法
统计用户数之后,发现数量暴涨或某个陌生账户出现,不必慌张,按以下步骤排查。
新增用户未被记录
排查应用安装脚本,部分软件在安装过程中会自动创建系统用户(比如MySQL创建mysql用户,Nginx创建nginx用户),这属于正常行为,在审计时需做好记录,避免下次误判为异常。
用户数持续增长且来源不明
首先通过 last 查看最近登录来源IP,再结合 cat /etc/passwd 检查新账户的创建时间戳(ls -l --time-style=full-iso /etc/passwd),若时间点与可疑操作吻合,立即锁定账户并修改root密码。/etc/passwd 文件的修改时间(mtime)是判断账户创建时间的可靠依据,因为任何用户变动都会触发该文件的写入。
用户数量正确但无法正常登录
排除密码错误因素后,检查Shell是否被误改。/bin/nologin 账户无法登录,但不代表用户被删除,将Shell改回 /bin/bash 并重置密码即可恢复,这类问题多发生在误编辑或安全脚本自动改动后,属于低频但需了解的问题。
Q&A:查看服务器用户数量的高频疑问
问:grep -c 与 wc -l 在统计用户数量时有何区别?
两者都可以统计行数。grep -c "pattern" file 直接输出匹配行数,grep "pattern" file | wc -l 则先输出匹配内容再由 wc -l 计数,实际应用中,grep -c 一次完成任务,性能略优,但需要同时查看用户清单时,仍建议使用管道方式,先输出清单再计数,便于人眼复核。
问:为什么 cat /etc/passwd | wc -l 的结果比预期多出很多?
原因通常有两个,一是系统自带大量服务账户,systemd-network、polkitd、sshd 等;二是某些应用框架(如Docker、Kubernetes)在安装时会自动创建运行账户,建议先执行 grep -E "/(bash|sh|zsh)$" /etc/passwd 只看可登录用户,再结合 lastlog 判断实际活跃账户数量。
问:如何快速判断一台服务器是否存在权限异常账户?
重点执行三条命令:一是 awk -F: '$3==0 {print $1}' /etc/passwd 查看UID为0的非root账户;二是 awk -F: '$2!="!" && $2!="" {print $1}' /etc/shadow 查看有密码的非锁定账户;三是 last -n 20 查看近期登录IP是否异常,若三条结果均符合预期,则账户体系基本处于正常状态。简米科技与酷番云作为正规持牌IDC服务商,均在机房侧提供基础安全防护能力,但在主机账户层面仍需运维人员保持定期自查。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790893.html


