在Linux服务器上查看有哪些用户,最直接的方法是读取 /etc/passwd 文件,或者使用 getent passwd 命令,配合 last 和 who 可以掌握用户的登录情况。
很多新手刚拿到服务器权限,第一反应就是翻目录、装环境,却忽略了“这台机器上到底住着谁”这个基本问题,搞清楚用户列表,不仅是安全审计的第一步,也是排查异常登录、管理权限的基础,下面我把常用的查看方法、命令细节和判断技巧拆开揉碎讲清楚。
查看linux服务器用户列表,最直接的方法是什么
linux查看服务器有哪些用户?从/etc/passwd开始
/etc/passwd 是Linux系统存储用户账户信息的核心文件,每一行代表一个用户,字段之间用冒号分隔,你可以直接使用 cat 命令查看:
cat /etc/passwd
大致长这样:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
yourname:x:1000:1000:Your Name,,,:/home/yourname:/bin/bash
每一行有7个字段,含义分别是:
- 用户名
- 密码占位符(实际密码存在
/etc/shadow里) - UID(用户ID)
- GID(主组ID)
- 描述信息(GECOS)
- 主目录
- 登录Shell
如果觉得输出太乱,可以只提取用户名和UID,用 awk 处理:
awk -F: '{print $1, $3}' /etc/passwd
这样就能得到一份简洁的“用户名+UID”清单。UID是区分用户身份的关键数字,后面判断系统用户就会用到它。
为什么推荐用getent而不用cat
cat /etc/passwd 只能读取本地文件,如果服务器接入了LDAP、NIS等远程认证方式,有些用户不会出现在这个文件里。getent passwd 会从系统配置的数据库源(包括本地、NIS、LDAP)统一查询,结果更完整。
getent passwd
两者输出的格式完全一致,日常排查时,我习惯直接用 getent passwd,覆盖更全面,也不会漏掉远程域用户。行业共识认为,getent 是比 cat
更符合运维实践的做法。
一行命令列出所有“可登录”用户
/etc/passwd 里大部分用户(daemon、bin、sys)都是系统服务用的,根本不能登录,想只看能登录的实体用户,可以基于Shell字段过滤:
grep -E "bash|sh$" /etc/passwd
这个命令会把拥有 /bin/bash、/bin/sh 等登录Shell的用户列出来,但也可能漏掉用 zsh 或 fish 的用户,更稳妥的做法是用 getent 加 awk:
getent passwd | awk -F: '$7 != "/usr/sbin/nologin" && $7 != "/bin/false" {print $1}'
这样能排除常见的“禁止登录”Shell,保留真正能进入系统的账户。
怎么在linux服务器上查看所有用户?用UID和shell区分身份
区分系统用户和普通用户,核心看UID
Linux系统安装时会自动创建一大批内部用户,root、daemon、nobody,这些用户不是真人,而是给服务进程分配权限用的。判断标准很简单:看UID大小。
- UID为
0的是超级用户root - UID在
1-999(多数发行版)通常是系统用户 - UID在
1000及以上(部分发行版从500开始)才是普通用户
你可以用一条命令把普通用户筛出来:
awk -F: '$3 >= 1000 {print $1, $3}' /etc/passwd
输出结果就是这台服务器上所有“真实用户”的清单,注意不同发行版的阈值可能不同,CentOS 7 以下从500开始,Ubuntu和CentOS 8+从1000开始,具体看发行版文档。
查看某个具体用户的完整信息
如果要确认一个用户是否存在,或者想查看他的UID、主组、主目录和登录Shell,用 id 命令最快:
id username
输出示例:
uid=1001(test) gid=1001(test) groups=1001(test),27(sudo)
如果提示 no such user,说明这个用户不存在。id 命令是检查用户是否存在的标准方法,比翻文件更直观。
系统用户不一定是“无关紧要”的角色
虽然系统用户不能拿来登录,但它们各自对应着服务权限。www-data 运行着Nginx或Apache,mysql 运行着数据库,如果你在 /etc/passwd 里看到不认识的新增系统用户,比如突然冒出一个 postgres,但服务器根本没装PostgreSQL,那就得警觉了,建议结合下面几步继续排查。
查看linux服务器用户的登录痕迹:who、w和last
当前谁在线?用who和w
想立刻知道现在有哪些用户登录了服务器,用 who:
who
输出示例:
root pts/0 2026-03-20 14:22 (203.0.113.5)
zhangsan pts/1 2026-03-20 15:01 (192.168.1.10)
w 命令提供更多信息,包括登录时间、空闲时间、当前运行命令等:
w
这两条命令适合“实时查看”,如果你只是需要确认自己有没有被挤掉线,用 who 就够了。
最近谁登录过?用last和lastlog
last 命令从 /var/log/wtmp 读取登录记录:
last
它能显示最近一段时间内所有用户的登录历史,包括来源IP、登录时间、退出时间,如果发现某个IP反复尝试登录,或者某个用户在你根本不该在线的时间登录过,那就得查一下安全策略了。
lastlog 则展示每个用户最近一次登录时间:
lastlog
输出中如果某个用户显示 Never logged in,说明他创建后从未登录过,很可能是系统自动生成的账户,或者有人创建后还没启用。
登录失败记录也不能放过
排查安全问题时,lastb 命令可以查看失败登录记录(需要root权限):
lastb
它读取 /var/log/btmp,所有暴力破解尝试都会留在这里。业内专家指出,看用户列表不只是看“有哪些人”,更要看“哪些人在尝试进来”。
实战:5分钟摸清一台Linux服务器上的所有用户
把上面这些命令串起来,形成一个简单排查流程:
- 用
getent passwd获取完整用户列表 - 用
awk -F: '$3 >= 1000'筛选出UID大于等于1000的普通用户 - 用
lastlog检查每个普通用户的最近登录记录 - 用
who查看当前活动会话 - 用
lastb检查有没有可疑的失败登录
如果发现某个普通用户长期不登录,却拥有sudo权限,建议及时处理,查看用户权限可以用:
sudo -l -U username
这条命令能列出指定用户的sudo权限,是判断账户重要程度的关键依据。
我该多久检查一次用户列表
这个没有固定频率,但有几个场景必须查:
- 服务器刚交付或接手时,先摸清默认账户
- 安装过不明脚本后,检查是否被偷偷添加了用户
- 收到安全告警或发现异常进程时,立即查看用户和登录记录
日常巡检建议每月一次,用 lastlog 扫一眼就够了,如果管理的是核心业务服务器,可以写个简单脚本,把UID大于1000的用户列表发到监控群,自动对比变化。
Linux查看用户常见问题解答
linux查看服务器有哪些用户用哪条命令?
最基础的是 cat /etc/passwd,更推荐 getent passwd,想筛选出真实用户,用 awk -F: '$3 >= 1000 {print $1}' /etc/passwd。
为什么/etc/passwd里有那么多用户?
因为操作系统会为每个服务创建独立的系统账户,www-data、mysql、daemon 等,它们的UID通常小于1000,不能登录,是服务运行时用来隔离权限的。
普通用户和系统用户有什么区别?
普通用户是管理员手动创建的,有独立主目录和登录Shell,可以正常登录,系统用户是软件安装时自动生成的,一般没有登录Shell,主目录也常为 /nonexistent,判断标准就是UID大小,以及Shell是否为 /usr/sbin/nologin。
搞清楚Linux服务器上有哪些用户,是运维和安全管理的地基,从 /etc/passwd 到 getent,从UID到登录痕迹,方法并不复杂,关键是要养成定期看的习惯,你每次连上服务器,花两分钟扫一眼用户列表和登录记录,很多潜在问题都能早早发现。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/699072.html





