在CentOS这类企业级Linux服务器操作系统中,用户管理是系统安全和日常运维的核心环节,无论是排查安全问题、分配资源权限,还是进行系统审计,管理员都需要熟练掌握查看系统用户信息的各种方法,本文将系统性地介绍在CentOS上查看用户信息的多种途径,从基础命令到深层文件解析,帮助您全面理解用户管理的机制。
理解CentOS的用户存储机制
在直接使用命令之前,理解CentOS是如何存储用户信息的至关重要,这不仅能帮助您更好地使用命令,还能在出现问题时进行深层次的排查,用户信息主要存储在以下几个关键文件中。
/etc/passwd
文件
这是系统中最核心的用户信息文件,每一行代表一个用户账号,无论该用户能否登录,它是一个文本文件,任何用户都可以读取,其格式通过冒号(:)分为七个字段,具体结构如下表所示:
字段顺序 | 字段名称 | 描述 | 示例 |
---|---|---|---|
1 | 用户名 | 登录系统时使用的名称,唯一。 | john |
2 | 密码占位符 | 早期用于存放加密密码,现在统一存放在/etc/shadow 文件中,此处通常用x 表示。 | x |
3 | 用户ID (UID) | 用户的唯一数字标识符,root用户的UID为0,系统用户UID通常小于1000,普通用户UID大于等于1000。 | 1000 |
4 | 组ID (GID) | 用户默认所属组的唯一标识符。 | 1000 |
5 | 注释信息 | 通常用于存储用户的全名、联系方式等描述性信息。 | John Doe, Room 101 |
6 | 主目录 | 用户登录后默认所在的目录。 | /home/john |
7 | 登录Shell | 用户登录后启动的Shell程序,若设置为/sbin/nologin ,则该用户无法通过Shell登录系统。 | /bin/bash |
/etc/shadow
文件
此文件用于存储用户的加密密码和密码策略信息,只有root
用户有读取权限,极大地增强了系统的安全性,其字段同样由冒号分隔,包含登录名、加密密码、上次修改日期、最小密码间隔、最大密码有效期、警告时间、账户禁用时间等信息。
/etc/group
文件
该文件用于管理用户组信息,记录了组名、组密码(通常为空)、GID以及组成员列表。
实用命令:查看用户信息
掌握了底层文件结构后,我们可以使用各种命令来高效地获取用户信息。
基础命令:查看当前登录用户
如果您只想知道当前有哪些用户登录到了服务器,可以使用以下命令:
who
:显示当前登录的用户名、登录终端、登录时间以及来源IP地址。$ who john pts/0 2025-10-27 10:15 (192.168.1.100) root tty1 2025-10-27 09:00
w
:who
命令的增强版,除了显示who
的信息外,还会显示用户正在执行的命令、系统负载、空闲时间等更详细的信息。$ w 10:20:01 up 1 day, 1:15, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT john pts/0 192.168.1.100 10:15 4.00s 0.10s 0.01s -bash root tty1 09:00 1:20m 0.04s 0.04s -bash
users
:一个非常简洁的命令,仅列出当前所有登录用户的用户名,用空格隔开。$ users john root
核心方法:列出所有系统用户
要查看系统中存在的所有用户(包括无法登录的系统服务用户),最直接的方法是解析/etc/passwd
文件。
这是最经典的方法之一,通过cut
命令提取每行的第一个字段(用户名)。$ cat /etc/passwd | cut -d: -f1 root bin daemon ... john
这里,
-d:
指定冒号为分隔符,-f1
表示提取第一个字段。getent
(get entries)是一个更现代、更可靠的工具,它不仅会查询/etc/passwd
等本地文件,还会从网络信息服务(如NIS、LDAP)中获取用户信息,因此在复杂的网络环境中更为通用。$ getent passwd | cut -d: -f1
其输出与直接
cat /etc/passwd
相似,但适用范围更广。
筛选普通用户与系统用户
在实际管理中,我们通常更关心可交互登录的普通用户,可以通过UID来区分它们,在CentOS 7及以后版本中,普通用户的UID通常从1000开始。
awk
是一个强大的文本处理工具,非常适合此类任务。$ getent passwd | awk -F: '$3 >= 1000 { print $1 }' john
此命令的含义是:以冒号为分隔符(
-F:
),如果第三个字段(UID)大于等于1000,则打印第一个字段(用户名)。筛选系统用户
同理,筛选UID小于1000的用户即可得到系统用户。$ getent passwd | awk -F: '$3 < 1000 { print $1 }' root bin daemon ...
检查特定用户的详细信息
当您需要关注某个特定用户时,以下命令非常有用:
id [用户名]
:显示指定用户的UID、GID以及其所属的所有组。$ id john uid=1000(john) gid=1000(john) groups=1000(john),10(wheel)
这表明用户
john
属于主组john
,并且也是wheel
组的成员。groups [用户名]
:专门用于显示用户所属的组。$ groups john john : john wheel
finger [用户名]
(可能需要安装yum install finger
):提供更丰富的用户信息,包括真实姓名、主目录、登录Shell、空闲时间、邮件状态以及最近登录记录。
审计与安全:查看用户登录历史
了解谁在何时登录过系统,对于安全审计至关重要。
last
:读取/var/log/wtmp
文件,显示用户最近的登录历史记录,包括成功登录和重启记录。$ last john pts/0 192.168.1.100 Fri Oct 27 10:15 still logged in root tty1 Fri Oct 27 09:00 still logged in reboot system boot 5.4.17-2136... Fri Oct 27 08:59 still running ...
lastb
:读取/var/log/btmp
文件,专门用于显示失败的登录尝试,这是排查暴力破解攻击的首选命令,需要root
权限执行。$ sudo lastb sshd:nobody :1 Sat Oct 28 11:20 - 11:20 (00:00) admin ssh:notty Sat Oct 28 11:15 - 11:15 (00:00) ...
通过以上命令和文件解析的结合,您可以全面地掌握CentOS系统中的用户状态、权限和活动情况,从快速查看当前在线用户,到深入分析所有账户的构成,再到追溯历史登录行为,这些工具构成了系统管理员日常工作中不可或缺的技能组合。
相关问答FAQs
Q1: 我使用 cat /etc/passwd
看到了很多不认识的用户,bin
, daemon
, nobody
等,这些是什么?它们能登录我的服务器吗?
A: 这些用户是系统用户或伪用户,它们并非供真人登录交互使用,而是为了运行特定的系统服务或守护进程(daemon)。web服务器
(如Nginx或Apache)可能会以nginx
或apache
用户身份运行,数据库服务
(如MySQL)可能会以mysql
用户身份运行,这样做是为了遵循“最小权限原则”,即使服务被攻破,攻击者也只能获得该系统用户的有限权限,而不会危及整个系统。
您可以通过查看它们的登录Shell来确认,这些用户的Shell字段被设置为/sbin/nologin
或/bin/false
,这意味着任何尝试用这些用户名登录的行为都会被立即拒绝,它们的存在是正常且安全的,是Linux系统设计的一部分。
Q2: 我发现了一个不再需要的用户账户,如何安全地禁用它而不是直接删除?
A: 直接删除用户(userdel
)可能会导致该用户拥有的文件成为“孤儿文件”(所有者UID变为一个数字),管理起来比较麻烦,一个更安全、更灵活的方法是禁用其登录权限,您可以通过修改用户的登录Shell来实现这一点。
使用 usermod
命令将用户的Shell改为 /sbin/nologin
:
sudo usermod -s /sbin/nologin username
将 username
替换为您想禁用的实际用户名。
执行此命令后,当该用户尝试通过SSH或其他方式登录时,系统会显示类似“This account is currently not available.”的消息并拒绝登录,这样做的好处是:
- 该用户的所有文件和配置都保持不变,UID和GID也保留。
- 如果将来需要重新启用该账户,只需将其Shell改回
/bin/bash
即可。 - 任何以该用户身份运行的系统服务(如果存在)不会受到影响。
这是一种非常常用且推荐的账户管理实践。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复