方法1:查看/etc/passwd
文件(最基础)
命令:
cat /etc/passwd
原理与输出解析:
Linux将所有用户信息存储在/etc/passwd
文件中,每行代表一个用户,格式为:用户名:密码占位符(x):用户ID(UID):组ID(GID):描述信息:家目录:默认Shell
john:x:1001:1001:John Doe:/home/john:/bin/bash
- UID说明:
0
:root用户(超级管理员)1-999
:系统服务账户(如www-data
)1000+
:普通用户
适用场景:
- 查看所有本地用户(包括系统账户和普通用户)
- 需分析UID/GID等详细信息时
方法2:使用getent
命令(推荐)
命令:
getent passwd
原理:getent
从系统数据库(包括passwd
、group
等)获取条目,兼容本地账户和网络账户(如LDAP/NIS)。
优势:
- 自动识别所有配置的用户源
- 输出格式与
/etc/passwd
一致
适用场景:
- 企业环境中集中账户管理(LDAP等)
- 需要兼容性更强的标准化操作
方法3:列出登录用户
命令:
who # 显示当前登录用户及终端信息 w # 显示登录用户及正在运行的进程 users # 仅显示已登录用户名(去重后)
原理:
这些命令读取/var/run/utmp
文件(记录当前会话)。
输出示例:
$ who root tty1 2025-10-01 09:30 alice pts/0 2025-10-01 10:15 (192.168.1.5)
适用场景:
- 实时监控系统活跃用户
- 排查异常登录行为
方法4:过滤有效用户账户
命令:
getent passwd | awk -F: '$3 >= 1000 && $3 < 65534 {print $1}'
原理:
通过awk
筛选UID范围(通常1000-65534
为普通用户),排除系统账户。
关键参数:
-F:
:以冒号分隔字段$3 >= 1000
:过滤UID≥1000的用户
适用场景:
- 快速获取可登录的普通用户列表
- 忽略系统服务账户(如
mysql
、nginx
)
方法5:检查用户家目录
命令:
ls /home # 查看/home下的用户目录
注意:
- 仅适用于默认家目录配置
- 可能遗漏自定义路径的用户(如
/var/www
)
总结与建议
场景 | 推荐方法 |
---|---|
查看所有本地账户详情 | cat /etc/passwd |
兼容本地+网络账户 | getent passwd |
监控实时登录用户 | who 或 w |
仅提取普通用户名 | getent passwd + awk 过滤 |
安全提示:
- 定期审计用户列表(尤其UID=0的非root账户)
- 禁用无用账户:
sudo usermod -L 用户名
- 验证用户来源:
grep "用户名" /etc/passwd /etc/shadow
引用说明基于Linux Foundation官方文档、
man passwd
手册页及Red Hat系统管理指南,关键文件格式遵循POSIX标准,命令兼容主流发行版(Ubuntu/CentOS等)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7733.html