Linux 中的 UID 是什么?如何查找用户的UID?Linux 中的 UID 是什么?如何查找用户的UID?Linux 中的 UID 是什么?如何查找用户的UID?Linux 中的 UID 是什么?如何查找用户的UID?
  • 业务
  • 目标
  • 支持
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容

Linux 中的 UID 是什么?如何查找用户的UID?

发表 admin at 2025年2月28日
类别
  • 未分类
标签

本 Linux 基础知识指南向您介绍与 Linux 中 UID 相关的所有重要内容。

Linux 中的 UID 是什么?

UID 代表用户标识符。 UID 是分配给每个 Linux 用户的编号。它是用户在 Linux 内核中的表示。 UID用于识别系统内的用户并确定用户可以访问哪些系统资源。这就是为什么用户 ID 应该是唯一的。

您可以在 /etc/passwd 文件中找到存储的 UID。该文件可用于列出 Linux 系统中的所有用户。

使用 Linux 命令查看文本文件,您将看到有关系统上存在的用户的各种信息。

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
johndoe:x:1000:1000:John Doe,,,:/home/helder:/bin/bash
davmail:x:127:65534::/var/lib/davmail:/usr/sbin/nologin
statd:x:128:65534::/var/lib/nfs:/usr/sbin/nologin

这里的第三个字段代表用户ID或UID。

请注意,在大多数 Linux 发行版中,UID 1-500 通常保留给系统用户。在Ubuntu和Fedora中,新用户的UID从1000开始。

例如,如果使用adduser或useradd命令创建一个新用户,它将获取1000之后的下一个可用数字作为其UID。

在Linux中,UID 0和GID 0是为root用户保留的。

如何在Linux中查找用户的UID?

您始终可以依靠 /etc/passwd 文件来获取用户的 UID。这不是在 Linux 中获取 UID 信息的唯一方法。

Linux 中的 id 命令将显示当前用户所属的 UID、GID 和组:

id
uid=1000(abhishek) gid=1000(abhishek) groups=1000(abhishek),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),126(sambashare),127(kvm)

您还可以使用 id 命令指定用户名来获取任何 Linux 用户的 UID:

id standard
uid=1001(standard) gid=1001(standard) groups=1001(standard)

如何在Linux中更改用户的UID?

假设您的 Linux 系统上有多个用户。您必须删除用户,因为他/她离开了组织。现在您希望系统上已有的另一个用户获取其 UID。

您可以通过使用 usermod 命令修改用户来更改 UID,如下所示:

usermod -u 1004 user_2

您需要具有超级用户权限才能执行上述命令。

您还记得 Linux 中的文件权限和所有权概念吗?文件的所有权由所有者用户的 UID 确定。

当您更新用户的 UID 时,该用户拥有的文件会发生什么情况?虽然 user_2 主目录中的所有文件都会更改其关联的 UID,但您必须手动更新外部其他文件的关联 UID主目录。

您可以做的是手动更新与 user_2 的旧 UID 关联的文件的所有权。

find / -user old_uid_of_user_2 -exec chown -h user_2 {} \;

UID如何与不同的系统资源关联? [对于高级用户]

UID 彼此唯一,因此它们还可用于识别不同系统资源(例如文件和进程)的所有权。

UID 和文件

我希望您熟悉 Linux 中的文件权限概念。当您创建文件时,您就是该文件的所有者。现在您可以决定谁可以对该文件执行什么操作。这是 Linux DAC 机制的一部分,其中每个文件都由其所有者自行决定。

您可以使用 ls 或 stat 命令读取文件的所有权。让我们使用流行的 ls 命令来完成此操作,并检查二进制文件 sleep 或 passwd 的所有权。

如您所见,文件 /usr/bin/sleep 属于 root:

ls -l $(which sleep)
-rwxr-xr-x 1 root root 39048 Mar  6  2020 /usr/bin/sleep

让我们强制它使用 UID 而不是用户名来映射所有权:

ls -lhn $(which sleep)
-rwxr-xr-x 1 0 0 39K Mar  6  2020 /usr/bin/sleep

这里有有趣的信息。您的操作系统不理解“用户名”。每当程序需要使用用户名或需要打印用户名时,它都会引用 /etc/passwd 文件来提取信息。

你不必相信我的话。亲自使用 strace 程序查看它,该程序打印程序发出的所有系统调用。

strace ls -lhn $(which sleep) 2>&1 | grep passwd

您想要查看的是 ls 命令是否正在尝试读取 /etc/passwd 文件。

strace ls -lh $(which sleep) 2>&1 | grep passwd
openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 6

到目前为止,一切都很好。

UID 和进程

进程也有所有者,就像文件一样。只有进程的所有者(或根用户)才能向其发送进程信号。这就是 UID 发挥作用的地方。

如果普通用户尝试终止另一个用户拥有的进程,则会导致错误:

kill 3708
bash: kill: (3708) - Operation not permitted

只有进程的所有者或根才能执行此操作。

必须规范一个过程。监管是因为您需要有一种方法来限制或知道允许进程执行多少操作。这是由其 UID 决定的。

与进程关联的 UID 分为三种类型。

  1. 真实 UID:真实 UID 是进程从其父进程采用的 UID。简单来说,无论谁启动了一个进程,该用户的UID就是该进程的真实UID。这有助于识别进程真正属于谁。这一点非常重要,尤其是当有效 UID 与我接下来要讨论的真实 UID 不同时。

  2. 有效UID:这主要决定了某个进程真正拥有的权限。虽然用户可以启动该进程,但它可以使用不同用户的可用权限运行。命令 passwd 就是这样的一个例子。该程序编辑文件/etc/shadow,该文件属于root。因此,普通用户不应该能够运行此命令或更改他/她的密码。幸运的是,该二进制文件以有效 UID 0(即 root)运行,这使其能够拥有足够的权限来编辑 /etc/shadow 文件。除了启用 SUID 位的二进制文件之外,实际 UID 和有效 UID 大多相同。

  3. 已保存的 UID:可供进程使用的 UID。这个通常不被使用,但仍然存在,以防进程知道它不会执行任何特权工作,因此它可以将其有效 UID 更改为非特权的东西。这减少了无意的不当行为的表面。

就是这样。我希望您现在对 Linux 中的 UID 有更好的了解。如果有任何问题,请随时提出。

作为一名专业的 Linux 用户,如果您认为我错过了一些有关 UID 的重要概念,请在评论部分告诉我。

©2015-2025 Norria support@norria.com