在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
  • 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 命令
    这是最经典的方法之一,通过cut命令提取每行的第一个字段(用户名)。

    $ cat /etc/passwd | cut -d: -f1
    root
    bin
    daemon
    ...
    john

    这里,-d: 指定冒号为分隔符,-f1 表示提取第一个字段。

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

  • 使用 getent 命令(推荐)
    getent(get entries)是一个更现代、更可靠的工具,它不仅会查询/etc/passwd等本地文件,还会从网络信息服务(如NIS、LDAP)中获取用户信息,因此在复杂的网络环境中更为通用。

    $ getent passwd | cut -d: -f1

    其输出与直接cat /etc/passwd相似,但适用范围更广。

筛选普通用户与系统用户

在实际管理中,我们通常更关心可交互登录的普通用户,可以通过UID来区分它们,在CentOS 7及以后版本中,普通用户的UID通常从1000开始。

  • 使用 awk 命令筛选普通用户
    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)可能会以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.”的消息并拒绝登录,这样做的好处是:

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

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

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

赞 (0)
爱国的头像爱国
ARM证书到底有用吗?对职场发展帮助大吗?
上一篇 2025-10-20 22:50
CentOS7下Keepalived主备切换不生效如何排查?
下一篇 2025-10-20 22:51

相关推荐

  • 仿制网站收费模式,如何确定价格策略?

    摘要:本文主要探讨了仿网站收费的机制和策略。介绍了仿网站的运营成本和收益来源。详细分析了不同的收费模式,如订阅制、广告赞助和一次性购买等。讨论了如何根据目标用户群体和市场定位来制定合理的收费标准。

    2024-08-07
    0016
  • CentOS系统下如何快速搭建一个完整的服务平台?

    CentOS,作为以其稳定性、安全性和开源特性而闻名的企业级Linux发行版,在全球服务器市场中占据着重要地位,默认安装的CentOS系统往往以通用性和稳定性为首要目标,而非极致性能,要将一台CentOS服务器打造成一个响应迅速、处理高效的“快平台”,需要从系统内核、文件系统、网络配置到服务管理等多个层面进行细……

    2025-10-06
    0013
  • 美国主机空间适合建站吗

    选对合适的主机对建站成败影响很大,美国主机空间适合不少场景下的建站需求,要不要选它得结合你的实际情况来判断。

    2026-09-26
    003
  • CentOS下如何实现SVN提交后自动同步更新Web目录?

    在 CentOS 系统中,利用 Subversion (SVN) 实现代码仓库与 Web 目录的同步更新,是持续集成和自动化部署的基础环节,这种机制可以确保开发人员每次提交代码后,测试服务器或生产服务器能够自动获取最新版本,极大地提升了开发与部署效率,本文将详细介绍如何在 CentOS 环境下配置 SVN 的自……

    2025-10-10
    0030

发表回复

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

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

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

关注微信