在 CentOS 及其他类 Linux 系统中,用户管理是系统管理员的核心职责之一,了解如何有效地查看系统中的用户信息,对于日常维护、安全审计和故障排查至关重要,CentOS 提供了多种命令和工具,从简单地列出用户名到深入分析用户的活动状态,功能丰富且强大,本文将系统性地介绍在 CentOS 中查看用户的各种方法,涵盖基础查询与高级技巧,帮助您全面掌握用户信息的管理。
理解 Linux 用户基础
在深入探讨具体命令之前,有必要先理解 CentOS 中用户的分类,用户可以分为三类:
- root 用户:也称为超级用户,其用户 ID (UID) 为 0,拥有系统的最高权限,可以执行任何操作。
- 系统用户:用于运行系统服务或应用程序,通常不需要登录,它们的 UID 范围一般在 1 到 999 之间(在 CentOS 7 及更新版本中)。
- 普通用户:由管理员创建,用于日常操作和登录系统,它们的 UID 从 1000 开始。
这些用户信息,连同其基本属性,都记录在系统的关键配置文件中。
核心信息存储文件:/etc/passwd
系统上所有用户的基本信息都存储在 /etc/passwd
文件中,这是理解用户信息的基石,虽然可以通过直接查看此文件来获取用户列表,但更推荐使用专门为此设计的命令,因为它们通常提供更友好的格式和更广泛的信息源。
/etc/passwd
文件中的每一行代表一个用户,并由冒号(:)分隔为七个字段,其结构如下表所示:
字段顺序 | 字段名称 | 描述 |
---|---|---|
1 | 用户名 | 登录系统时使用的唯一名称。 |
2 | 密码占位符 | 已弃用的字段,真正的密码哈希值存储在 /etc/shadow 文件中,此处通常为 x 。 |
3 | 用户ID (UID) | 用户的唯一数字标识符,0 为 root,1-999 为系统用户,1000+ 为普通用户。 |
4 | 组ID (GID) | 用户所属的主组的唯一数字标识符。 |
5 | 描述信息 | 用户的注释字段,通常包含用户的全名、联系方式等。 |
6 | 主目录 | 用户登录后默认所在的目录。 |
7 | 登录Shell | 用户登录后启动的 Shell 程序,若为 /sbin/nologin 或 /bin/false ,则该用户不能登录系统。 |
查看用户的基本命令
掌握了基础知识后,我们可以开始使用各种命令来查询用户信息。
查看所有系统用户
这是最常见的需求,即获取系统中所有已定义用户的列表。
getent passwd
这是最推荐的方法。getent
命令不仅会读取本地的 /etc/passwd
文件,还会查询名称服务切换(NSS)库配置(/etc/nsswitch.conf
),这意味着它除了能显示本地用户,还能显示来自网络服务(如 LDAP、NIS)的用户,信息更全面。
getent passwd
输出格式与 /etc/passwd
文件内容完全一致,每一行代表一个用户及其详细信息。
cat /etc/passwd
这是一个更直接的方法,它只是简单地打印出 /etc/passwd
文件的内容,对于纯粹查看本地用户而言,它足够快且简单,但会遗漏网络用户。
cat /etc/passwd
查看当前登录用户
了解“谁”正在使用系统,对于多用户环境和安全监控非常重要。
who
who
命令显示当前已登录系统的用户信息,包括登录终端、登录时间和远程主机地址。
who # 输出示例: # root pts/0 2025-10-27 10:30 (192.168.1.101) # centos pts/1 2025-10-27 11:15 (192.168.1.102)
w
w
命令是 who
的增强版,它不仅显示当前登录用户,还提供了他们正在执行的进程以及资源使用情况(如 CPU 时间)。
w # 输出示例: # USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT # root pts/0 192.168.1.101 10:30 1.00s 0.12s 0.00s w # centos pts/1 192.168.1.102 11:15 2:00m 0.05s 0.05s -bash
IDLE
表示用户空闲时间,JCPU
是该终端所有进程占用的总 CPU 时间,PCPU
是当前 WHAT
字段显示的进程所占用的 CPU 时间。
users
这是最简单的命令,仅用一行列出当前所有登录用户的用户名,不提供其他细节。
users # 输出示例: # root centos
查看用户历史登录记录
审计用户的历史登录行为是安全审计的关键环节。
last
last
命令会读取 /var/log/wtmp
文件,显示用户的历史登录记录,包括登录时间、登出时间、持续时长和来源 IP。
last # 输出示例: # root pts/0 192.168.1.101 Fri Oct 27 10:30 still logged in # centos pts/1 192.168.1.102 Fri Oct 27 11:15 - 11:45 (00:30) # reboot system boot 5.4.17-2136.3. Fri Oct 27 09:00 still running
lastb
与 last
相反,lastb
用于查看失败的登录尝试,它读取的是 /var/log/btmp
文件,这是检测暴力破解攻击的重要工具。
lastb # 输出示例: # sshd:nobody Fri Oct 27 12:00 - 12:00 (00:00) # sshd:admin Fri Oct 27 11:58 - 11:58 (00:00)
深入查询特定用户信息
当您需要关注某个特定用户的详细信息时,id
命令是最佳选择。
id
id
命令可以显示指定用户的 UID、GID 以及所属的所有组。
id centos # 输出示例: # uid=1000(centos) gid=1000(centos) groups=1000(centos),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
如果不指定用户名,id
将显示当前执行命令的用户信息。
高级技巧与组合使用
在实际工作中,我们常常需要对这些命令的输出进行筛选和处理,结合 grep
、awk
等工具可以实现更强大的功能。
要快速筛选出所有 UID 大于等于 1000 的普通用户,可以使用 awk
命令:
getent passwd | awk -F: '$3 >= 1000 {print $1}' # 输出示例: # centos # testuser
这里,-F:
指定冒号为分隔符,$3 >= 1000
是筛选条件(第三个字段 UID 大于等于 1000),{print $1}
表示只打印第一个字段(用户名)。
相关问答FAQs
Q1: cat /etc/passwd
和 getent passwd
之间有什么核心区别?我应该优先使用哪个?
A: 核心区别在于它们的数据来源。cat /etc/passwd
只是简单地读取并显示本地 /etc/passwd
文件的内容,而 getent passwd
会调用系统的名称服务切换(NSS)机制,这意味着它不仅能获取本地用户,还能从配置的网络服务(如 LDAP、NIS、Active Directory 等)中获取用户信息,在现代企业环境中,用户账户常常是集中管理的。getent passwd
是更全面、更推荐的命令,它能确保您看到的是系统所“认知”的全部用户,而不仅仅是存储在本地硬盘上的用户。
Q2: 如何快速筛选出所有能够通过 shell 登录的普通用户,并排除系统用户和服务账户?
A: 要实现这个目标,需要结合两个条件:UID 在普通用户范围内(>= 1000)并且其登录 Shell 不是禁止登录的(如 /sbin/nologin
或 /bin/false
),您可以使用 awk
命令精确地完成这个筛选:
getent passwd | awk -F: '($3 >= 1000) && ($7 != "/sbin/nologin") && ($7 != "/bin/false") {print $1}'
这个命令的解释如下:
getent passwd
:获取所有用户信息。awk -F:
:设置字段分隔符为冒号。'($3 >= 1000) && ($7 != "/sbin/nologin") && ($7 != "/bin/false")'
:这是筛选条件,$3
是 UID 字段,$7
是 Shell 字段,该条件要求 UID 大于等于 1000,Shell 不是禁止登录的类型。{print $1}
:对于满足条件的行,只打印第一个字段,即用户名。
这个组合命令非常实用,可以帮您快速生成一份可用于系统登录的真实用户清单。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复