在CentOS上如何查看所有用户?有哪些命令可以查看登录用户?

在CentOS这类企业级Linux服务器操作系统中,用户管理是系统安全和日常运维的核心环节,无论是排查安全问题、分配资源权限,还是进行系统审计,管理员都需要熟练掌握查看系统用户信息的各种方法,本文将系统性地介绍在CentOS上查看用户信息的多种途径,从基础命令到深层文件解析,帮助您全面理解用户管理的机制。

在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
  • wwho命令的增强版,除了显示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 表示提取第一个字段。

    在CentOS上如何查看所有用户?有哪些命令可以查看登录用户?


  • 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、空闲时间、邮件状态以及最近登录记录。


审计与安全:查看用户登录历史

了解谁在何时登录过系统,对于安全审计至关重要。

在CentOS上如何查看所有用户?有哪些命令可以查看登录用户?

  • 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)可能会以nginxapache用户身份运行,数据库服务(如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.”的消息并拒绝登录,这样做的好处是:

  1. 该用户的所有文件和配置都保持不变,UID和GID也保留。
  2. 如果将来需要重新启用该账户,只需将其Shell改回 /bin/bash 即可。
  3. 任何以该用户身份运行的系统服务(如果存在)不会受到影响。

这是一种非常常用且推荐的账户管理实践。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-20 22:50
下一篇 2025-10-20 22:51

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信