首页 > 运维 > linux运维 > 正文

Linux查看所有用户和用户组的方法

P粉602998670
发布: 2025-09-14 11:11:01
原创
833人浏览过
答案:Linux通过/etc/passwd、/etc/group等文件管理用户和组,结合getent、id、compgen等命令可高效查询信息,系统账户用于服务权限隔离。

linux查看所有用户和用户组的方法

在Linux系统里,要查看所有的用户和用户组,最直接的方式就是查看核心配置文件

/etc/passwd
登录后复制
/etc/group
登录后复制
。当然,我们也可以借助
getent
登录后复制
id
登录后复制
cat
登录后复制
等命令来更灵活、更全面地获取这些信息。

解决方案

要查看Linux系统中的所有用户和用户组,我们可以采取以下几种方法,每种都有其适用场景和优势。

查看所有用户:

  1. 使用

    cat /etc/passwd
    登录后复制
    这是最基础、最直接的方式。
    /etc/passwd
    登录后复制
    文件包含了系统上所有用户账户的基本信息,每行代表一个用户,字段之间用冒号
    :
    登录后复制
    分隔。

    cat /etc/passwd
    登录后复制

    输出示例:

    root:x:0:0:root:/root:/bin/bash
    登录后复制
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    登录后复制
    myuser:x:1000:1000:My User,,,:/home/myuser:/bin/bash
    登录后复制
    这里包含了用户名、密码占位符(通常是
    x
    登录后复制
    ,实际密码在
    /etc/shadow
    登录后复制
    )、用户ID(UID)、主组ID(GID)、用户描述、家目录和登录Shell。

  2. 使用

    getent passwd
    登录后复制
    getent
    登录后复制
    命令比直接
    cat
    登录后复制
    文件更强大,它会查询Name Service Switch (NSS) 配置中定义的所有来源(例如,不仅仅是本地文件,还可能包括LDAP、NIS等)。这在企业环境中尤其有用。

    getent passwd
    登录后复制

    输出格式与

    cat /etc/passwd
    登录后复制
    类似,但结果可能更全面。

  3. 使用

    compgen -u
    登录后复制
    (Bash Shell): 如果你在使用Bash Shell,
    compgen -u
    登录后复制
    是一个非常简洁的命令,它会列出所有可用的用户名。

    compgen -u
    登录后复制

    这只会输出用户名列表,不包含其他详细信息。

查看所有用户组:

  1. 使用

    cat /etc/group
    登录后复制
    类似于
    /etc/passwd
    登录后复制
    /etc/group
    登录后复制
    文件包含了系统上所有用户组的信息。每行代表一个用户组,字段之间也用冒号
    :
    登录后复制
    分隔。

    cat /etc/group
    登录后复制

    输出示例:

    root:x:0:
    登录后复制
    daemon:x:1:
    登录后复制
    myuser:x:1000:
    登录后复制
    sudo:x:27:myuser
    登录后复制
    这里包含了组名、密码占位符(通常是
    x
    登录后复制
    )、组ID(GID)以及该组的成员列表(如果用户不是该组的主组,则会列在这里)。

  2. 使用

    getent group
    登录后复制
    getent passwd
    登录后复制
    类似,
    getent group
    登录后复制
    会查询所有配置的NSS来源,以获取用户组信息。

    getent group
    登录后复制

    输出格式与

    cat /etc/group
    登录后复制
    类似。

  3. 使用

    compgen -g
    登录后复制
    (Bash Shell): 在Bash Shell中,
    compgen -g
    登录后复制
    可以快速列出所有用户组的名称。

    compgen -g
    登录后复制

    这只会输出组名列表。

  4. 查看特定用户的所属组: 如果你想知道某个特定用户属于哪些组,可以使用

    id
    登录后复制
    groups
    登录后复制
    命令。

    id myuser
    groups myuser
    登录后复制

    id
    登录后复制
    会显示用户的UID、GID和所有所属的附加组。
    groups
    登录后复制
    则只列出所属的组名。

Linux用户和用户组管理的核心文件结构是怎样的?

当我们谈论Linux的用户和用户组管理,实际上我们是在和几个关键文件打交道。它们不仅仅是存储数据的地方,更是系统安全和权限控制的基石。理解它们各自的职责和内部结构,能帮助我们更深入地掌握用户管理。

  • /etc/passwd
    登录后复制
    :用户账户信息文件 这个文件是我们查看用户列表时最常接触的。它存储了系统中所有用户的基本信息,但不包含密码。每行代表一个用户,由七个字段组成,用冒号
    :
    登录后复制
    分隔:

    1. 用户名 (username):用户的登录名,例如
      root
      登录后复制
      myuser
      登录后复制
    2. 密码占位符 (password placeholder):通常是一个
      x
      登录后复制
      ,表示实际的加密密码存储在
      /etc/shadow
      登录后复制
      文件中。
    3. 用户ID (UID):一个唯一的数字标识符,用于区分不同的用户。UID为0通常是root用户。
    4. 主组ID (GID):用户所属的主组的ID。
    5. 用户描述信息 (comment/GECOS):通常用于存储用户的全名、电话号码等可选信息。
    6. 家目录 (home directory):用户登录后默认的工作目录,例如
      /home/myuser
      登录后复制
    7. 登录Shell (login shell):用户登录后使用的命令行解释器,例如
      /bin/bash
      登录后复制
      /bin/sh
      登录后复制
      ,或者
      /usr/sbin/nologin
      登录后复制
      表示用户不能登录交互式Shell。
  • /etc/shadow
    登录后复制
    :用户密码信息文件 这是一个高度敏感的文件,只有root用户才有读权限。它存储了用户的加密密码和其他与密码相关的安全信息。它的存在是为了将加密密码与
    /etc/passwd
    登录后复制
    分离,提高安全性。每行也由多个字段组成,用冒号
    :
    登录后复制
    分隔,但字段数量更多,包含:

    1. 用户名:与
      /etc/passwd
      登录后复制
      中的用户名对应。
    2. 加密密码:实际的加密密码字符串。
    3. 上次修改密码的日期:自1970年1月1日以来的天数。
    4. 密码最短有效期:两次修改密码之间必须间隔的天数。
    5. 密码最长有效期:密码过期前必须修改的天数。
    6. 密码过期前警告天数:在密码过期前多少天开始警告用户。
    7. 密码过期后宽限期:密码过期后,用户仍能登录的天数。
    8. 账户失效日期:自1970年1月1日以来的天数,此日期后账户将无法登录。
    9. 保留字段:目前未使用的字段。
  • /etc/group
    登录后复制
    :用户组信息文件 这个文件存储了系统上所有用户组的名称、GID以及该组的成员列表。每行代表一个用户组,由四个字段组成,用冒号
    :
    登录后复制
    分隔:

    1. 组名 (group name):用户组的名称,例如
      sudo
      登录后复制
      users
      登录后复制
    2. 组密码占位符 (group password placeholder):通常是
      x
      登录后复制
      ,表示组密码(如果存在)存储在
      /etc/gshadow
      登录后复制
      文件中。
    3. 组ID (GID):一个唯一的数字标识符,用于区分不同的用户组。
    4. 组成员列表 (members):属于该组的用户列表,用逗号
      ,
      登录后复制
      分隔。这里列出的用户是该组的“附加成员”,而不是“主组”成员(主组信息在
      /etc/passwd
      登录后复制
      中)。
  • /etc/gshadow
    登录后复制
    :用户组密码信息文件 类似于
    /etc/shadow
    登录后复制
    /etc/gshadow
    登录后复制
    存储了用户组的加密密码(如果设置了组密码)和组管理员信息。它也只有root用户有读权限。

这些文件共同构成了Linux用户和组管理的基础框架,它们相互协作,确保了用户身份的认证和权限的正确分配。任何对用户或组的修改,最终都会反映在这些文件中。

如何通过命令行高效查询特定用户或用户组信息?

在日常管理中,我们往往不需要查看所有用户或用户组,而是希望快速定位到某个特定的用户或组,或者根据某些条件进行筛选。这时,结合一些文本处理工具,命令行就能展现出其强大的效率。

查询特定用户信息:

  1. 查找单个用户详细信息:

    grep
    登录后复制
    getent
    登录后复制
    如果你知道用户名,想快速获取其在
    /etc/passwd
    登录后复制
    中的详细记录,
    grep
    登录后复制
    是个不错的选择。

    grep "^myuser:" /etc/passwd
    登录后复制

    这里使用

    ^
    登录后复制
    来确保匹配的是行首的用户名,避免匹配到用户描述或家目录中包含“myuser”的字符串。 更推荐的方式是使用
    getent passwd
    登录后复制
    ,它不仅查询本地文件,还能查询NSS配置的其他来源:

    getent passwd myuser
    登录后复制

    这会直接输出

    myuser
    登录后复制
    的完整
    passwd
    登录后复制
    记录。

  2. 查看特定用户的UID、GID及所属组:

    id
    登录后复制
    命令
    id
    登录后复制
    命令是查询用户身份信息最便捷的方式。

    AppMall应用商店
    AppMall应用商店

    AI应用商店,提供即时交付、按需付费的人工智能应用服务

    AppMall应用商店 56
    查看详情 AppMall应用商店
    id myuser
    登录后复制

    输出会包含

    uid
    登录后复制
    gid
    登录后复制
    以及
    groups
    登录后复制
    (附加组)。

  3. 查找使用特定Shell的用户:

    grep
    登录后复制
    假设你想知道哪些用户使用
    /bin/zsh
    登录后复制
    作为他们的登录Shell:

    grep "/bin/zsh$" /etc/passwd
    登录后复制

    这里的

    $
    登录后复制
    确保匹配的是行尾的Shell路径。

  4. 查找UID在某个范围内的用户:

    awk
    登录后复制
    如果你想找出所有UID大于1000的普通用户:

    awk -F: '$3 >= 1000 {print $1, $3}' /etc/passwd
    登录后复制

    这会以冒号为分隔符,打印出UID大于等于1000的用户的用户名和UID。

查询特定用户组信息:

  1. 查找单个用户组详细信息:

    grep
    登录后复制
    getent
    登录后复制
    要查找名为
    sudo
    登录后复制
    的组的详细信息:

    grep "^sudo:" /etc/group
    登录后复制

    或者更通用的

    getent
    登录后复制

    getent group sudo
    登录后复制
  2. 查找某个用户所属的所有组:

    groups
    登录后复制
    命令 想知道
    myuser
    登录后复制
    用户属于哪些组?

    groups myuser
    登录后复制

    或者,如果你想看当前登录用户所属的组,直接输入

    groups
    登录后复制
    即可。

  3. 查找某个组的所有成员:

    grep
    登录后复制
    如果你想知道
    sudo
    登录后复制
    组里有哪些用户:

    grep "^sudo:" /etc/group | awk -F: '{print $4}'
    登录后复制

    这会提取出

    sudo
    登录后复制
    组记录中的第四个字段(成员列表)。

  4. 查找包含特定用户的组:

    grep
    登录后复制
    想知道
    myuser
    登录后复制
    除了其主组外,还作为附加成员属于哪些组?

    grep "myuser" /etc/group
    登录后复制

    这会列出所有

    myuser
    登录后复制
    作为成员出现的组。当然,这也会匹配到
    myuser
    登录后复制
    作为主组的记录。如果需要更精确,可以结合
    awk
    登录后复制
    处理。

这些命令的组合使用,能让我们在海量的用户和组信息中,像外科手术般精准地提取所需数据,大大提高了管理效率。

为什么有些用户和用户组看起来很奇怪,它们有什么作用?

初次接触Linux的用户列表时,很多人都会疑惑,为什么除了我们自己创建的用户(比如

myuser
登录后复制
)和
root
登录后复制
用户之外,还有一大堆诸如
daemon
登录后复制
bin
登录后复制
sys
登录后复制
lp
登录后复制
www-data
登录后复制
mysql
登录后复制
等等“奇怪”的用户和对应的组。这些账户并非供人类登录使用,它们是系统中的服务账户(Service Accounts)系统账户(System Accounts),对于系统的正常运行和安全性至关重要。

系统账户的特点:

  1. 低UID/GID: 这些系统账户通常拥有较低的UID和GID(通常小于1000,在一些发行版中甚至小于500或200)。例如,
    root
    登录后复制
    的UID是0,
    bin
    登录后复制
    是1,
    daemon
    登录后复制
    是2。普通用户创建时,UID和GID通常从1000开始(或更高,取决于发行版配置)。
  2. 无交互式Shell: 你会发现这些账户的登录Shell通常设置为
    /usr/sbin/nologin
    登录后复制
    /bin/false
    登录后复制
    。这意味着它们无法用于交互式登录,你不能通过SSH或控制台以这些用户身份直接登录系统。
  3. 无家目录或特殊家目录: 它们的家目录可能设置为
    /
    登录后复制
    /var/empty
    登录后复制
    /dev/null
    登录后复制
    或服务自身的安装目录,而不是标准的
    /home/username
    登录后复制

系统账户的作用:

这些账户的主要目的是隔离和限制系统服务的权限。想象一下,如果所有的系统服务都以

root
登录后复制
权限运行,一旦某个服务出现漏洞被攻击,攻击者就能获得整个系统的最高权限。通过为每个服务创建专门的用户和组,我们可以:

  • 最小权限原则: 每个服务只被授予其正常运行所需的最小权限。例如,
    nginx
    登录后复制
    服务可能以
    www-data
    登录后复制
    用户身份运行,它只需要对网站文件有读权限,对其他系统文件则没有访问权限。这样,即使
    nginx
    登录后复制
    被攻破,攻击者也只能在
    www-data
    登录后复制
    的权限范围内活动,无法轻易破坏整个系统。
  • 资源隔离: 不同的服务运行在不同的用户和组下,可以更好地隔离它们所访问的资源,避免相互干扰。
  • 审计和追踪: 通过查看进程列表,我们可以清楚地看到哪个服务是由哪个用户运行的,方便问题排查和安全审计。

一些常见的系统账户及其用途:

  • daemon
    登录后复制
    守护进程通常使用的用户,用于运行一些后台服务。
  • bin
    登录后复制
    拥有系统二进制文件所有权的用户。
  • sys
    登录后复制
    拥有系统文件和目录所有权的用户。
  • lp
    登录后复制
    打印服务(Line Printer Daemon)的用户。
  • mail
    登录后复制
    邮件服务相关的用户。
  • www-data
    登录后复制
    (Debian/Ubuntu) /
    apache
    登录后复制
    (CentOS/RHEL):
    Web服务器(如Apache, Nginx)运行的用户,用于访问网站文件。
  • mysql
    登录后复制
    /
    postgres
    登录后复制
    数据库服务运行的用户,用于管理数据库文件。
  • sshd
    登录后复制
    SSH守护进程的用户,通常用于文件权限隔离。
  • nobody
    登录后复制
    /
    nogroup
    登录后复制
    这些是特殊的低权限用户和组,通常用于那些不需要任何特定权限的进程,或者作为文件所有者的默认占位符,表示不属于任何特定用户或组。它们几乎没有任何权限,是安全性最高的选择。

因此,当我们看到这些“奇怪”的用户和用户组时,不应该感到困惑或尝试删除它们。它们是Linux系统设计中不可或缺的一部分,旨在通过精细的权限控制来增强系统的稳定性和安全性。理解它们的存在和作用,是深入理解Linux权限管理的关键一步。

以上就是Linux查看所有用户和用户组的方法的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号