HCRM博客

CentOS如何查看所有用户,CentOS查看用户列表命令是什么?

在 CentOS 系统运维与服务器管理过程中,高效准确地查询用户信息是保障系统安全与权限控制的基础,无论是为了排查登录故障、审计系统操作行为,还是进行精细化的权限分配,管理员都需要掌握从基础属性查询到动态状态监控的全套方法,核心上文归纳在于:CentOS 查询用户主要通过读取 /etc/passwd/etc/shadow 等关键系统文件,并结合 idwlast 等内置命令来实现,根据查询目的的不同,应区分“静态属性查询”(如用户是否存在、UID、归属组)与“动态行为查询”(如当前登录会话、历史登录记录),选择对应的工具能够显著提升运维效率与准确性。

基础静态用户信息查询

在 CentOS 中,所有本地用户的基本信息都存储在 /etc/passwd 文件中,这是查询用户静态属性最直接的数据源,该文件每一行代表一个用户,包含用户名、密码占位符、UID(用户ID)、GID(组ID)、家目录和默认 Shell 等字段。

查看系统中所有用户列表 最简单的方法是直接查看该文件,结合 cut 命令可以只提取用户名,使输出更加整洁。

cat /etc/passwd | cut d: f1

使用 compgen 命令(属于 bash 内置功能)可以更快速地列出所有用户名,这在编写脚本时尤为实用。

compgen u

验证特定用户是否存在 当需要确认某个用户("nginx")是否已创建时,id 命令是最权威的工具,它不仅会告诉用户是否存在,还会显示其 UID 和主组。

id nginx

如果用户存在,系统将返回 uid=1006(nginx) gid=1006(nginx) groups=1006(nginx);如果不存在,则返回 无此用户,这是脚本中进行用户存在性检查的最佳实践,因为它直接返回明确的退出状态码。

使用 getent 命令进行更规范的查询getent 命令能够从 Name Service Switch (NSS) 库中获取条目,这意味着它不仅能查询本地 /etc/passwd 文件,如果系统配置了 LDAP 或 NIS 等集中认证服务,getent 也能同样工作,这比直接读取文件更具通用性和兼容性。

getent passwd username

区分系统用户与普通用户

在专业的系统管理中,区分系统用户(由系统或软件包创建,用于运行服务)和普通人类用户(用于登录交互)至关重要,CentOS (RHEL 系) 约定 UID 小于 1000 的为系统用户,1000 及以上的为普通用户。

筛选普通登录用户 利用 awk 工具对 /etc/passwd 进行过滤,可以快速列出所有具备登录权限的普通用户,这有助于管理员快速掌握实际使用服务器的人员清单。

awk F: '$3 >= 1000 {print $1}' /etc/passwd

检查用户 Shell 环境 有些用户虽然 UID 大于 1000,但可能被设置为禁止登录(如 /sbin/nologin/bin/false),为了查询出真正可以登录 Shell 的用户,可以结合 Shell 字段进行过滤:

awk F: '$7 ~ /(\/bin\/bash|\/bin\/sh)$/ && $3 >= 1000 {print $1}' /etc/passwd

这个命令展示了专业运维的深度:它不仅看 UID,还验证了用户是否拥有一个有效的交互式 Shell。

动态用户活动与状态查询

静态信息只能告诉我们“谁被定义了”,而动态信息则告诉我们“谁正在做什么”,这对于安全审计和故障排查更为关键。

查询当前登录用户w 命令是查看当前系统活动用户的最佳工具,它不仅显示谁登录了,还显示他们在做什么、CPU 负载以及登录来源 IP。

w

如果只需要简单的登录列表,who 命令提供了更精简的输出,包含登录用户名、使用的终端、登录时间和远程主机。

查询用户登录历史 若要追溯过去的登录行为,last 命令不可或缺,它读取 /var/log/wtmp 文件,显示用户的历史登录记录、持续时间以及 IP 地址。

last username

通过分析 last 的输出,管理员可以发现异常的登录时间或陌生的 IP 地址,这是服务器安全加固的重要手段,与之相对,lastb 命令用于查看登录失败的记录,是排查暴力破解攻击的首选命令。

用户组与权限归属查询

用户在 Linux 中从来不是孤立存在的,他们属于不同的组,这决定了资源的访问权限。

查询用户所属组groups 命令可以快速列出指定用户所属的所有组名。

groups username

更详细的信息可以使用 id Gn,它以数字 ID 或名称形式显示组 ID,在排查权限不足(Permission Denied)问题时,确认用户是否在正确的附加组中是解决问题的第一步。

查询组成员列表 有时需求是反向的:查看某个组下有哪些用户,虽然可以通过解析 /etc/group 实现,但使用 getent group groupname 更为标准。

getent passwd | grep $(getent group groupname | cut d: f3)

或者更简单的 lid 命令(如果安装了 shadowutils 包):

lid g groupname

专业解决方案与最佳实践建议

在实际的生产环境维护中,单纯的命令堆砌不足以应对复杂的场景,以下是基于 EEAT 原则归纳的专业建议:

  1. 审计与监控自动化:不要依赖人工记忆去定期检查用户,建议编写 Cron 任务,定期比对当前 /etc/passwd 的快照与备份版本,一旦检测到 UID 变动或新增用户,立即发送邮件警报,这是防止“后门”账户被添加的有效手段。
  2. 清理僵尸用户:长期未登录且拥有 Shell 权限的普通用户是安全隐患,结合 lastlog 命令(显示最后一次登录时间),可以识别出从未登录或长期闲置的账户,并对其进行锁定或删除。
    lastlog | grep "**Never logged in**"
  3. 理解 NSS 机制:在企业环境中,CentOS 往往接入 AD 域或 LDAP,此时单纯查看 /etc/passwd 是不够的,务必养成使用 getent 的习惯,确保查询覆盖了所有认证源。

CentOS 查询用户不仅仅是运行几个命令,更是一个理解 Linux 用户认证体系(/etc/passwd/etc/shadow、NSS)、掌握系统状态监控(wlast)以及具备安全审计思维的过程。

相关问答

Q1:在 CentOS 中如何查看某个用户是否被锁定或密码是否过期?A: 可以使用 passwd 命令结合 S 参数来查看账户状态信息,执行 passwd S username,输出结果通常包含七个字段,分别代表用户名、状态(L=锁定,P=有密码)、最后一次修改时间、最小间隔、最大间隔、警告时间和过期时间,检查 /etc/shadow 文件中该用户密码字段的第一位是否为 或 也可以判断账户是否被锁定。

Q2:如何找出系统中所有 UID 为 0(即拥有 Root 权限)的用户?A: 这是一个关键的安全检查步骤,UID 0 代表超级用户权限,除了默认的 root 用户外,不应存在其他 UID 为 0 的账户,可以使用以下命令精确查找:awk F: '$3 == 0 {print $1}' /etc/passwd,如果输出中出现了除 root 以外的用户名,必须立即进行审查和删除,以防止权限提升风险。 能帮助您更好地管理 CentOS 系统用户,如果您在具体操作中遇到问题,欢迎在评论区留言探讨。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/93197.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~