当多个用户具有相同的 UID 时,$HOME/.ssh 目录和 $HOME/.ssh/authorized_keys 文件权限如何工作?

当多个用户具有相同的 UID 时,$HOME/.ssh 目录和 $HOME/.ssh/authorized_keys 文件权限如何工作?

我可以访问一个系统,其中两个用户的 UID 为 0:

host:~ # cat -n /etc/passwd | grep -E "root|testuser"
     1  root:x:0:0:root:/root:/bin/bash
    31  testuser:x:0:0:testuser:/root/testuser:/bin/bash
host:~ #

例如,这通常会导致我使用用户名通过 SSH(基于密钥的身份验证)进入该系统testuser,并且我被标识为root

host:~ # id
uid=0(root) gid=0(root) groups=0(root)
host:~ # ls -ld /root/testuser
drwxr-xr-x 3 root root 352 Jan 25 01:02 /root/testuser
host:~ #
host:~ # ls -ld /root/testuser/.ssh/
drwx------ 2 root root 80 Nov 18 15:38 /root/testuser/.ssh/
host:~ # 

但是,在登录会话中间,我有时会被识别为testuser

host:~ # ls -ld /root/testuser
drwxr-xr-x 3 testuser root 352 Dec 16 18:39 /root/testuser
host:~ #

这并不困扰我,但我很困惑我怎么可能总是可以通过 SSH 连接到这台机器,因为testuser这样重复的 UID 设置也会弄乱/root/testuser/.ssh/目录和/root/testuser/.ssh/authorized_keys文件的所有权。

答案1

不存在“多个用户具有相同 UID”的情况。 UID 标识用户。相同的 UID,相同的用户。

您创建的是同一用户登录的两种不同方式。用户是 UID 0。UID 0 可以以名称 登录root,密码在root的条目中定义/etc/shadow,使用这些凭据时,HOME环境变量为设置为/root并且程序/bin/bash运行。 UID 0 还可以使用名称 登录testuser,密码testuser在 的条目中定义/etc/shadow,当使用这些凭据时,HOME环境变量将设置为/root/testuser并运行程序/bin/bash

内核只知道用户 ID,不知道用户名。文件系统只存储用户ID,不存储用户名。用户名不用于对系统对象(例如文件和进程)的访问控制。大多数程序在需要显示涉及用户的信息时将用户 ID 转换为用户名,而在需要实现某些涉及用户的策略时将用户名转换为用户 ID。

您查看的文件属于用户0。当您运行时ls,它会收到文件所有者为0的信息,并检索有关用户0的信息,以便以更友好的方式显示它。这通常会返回 中的第一个条目/etc/passwd,我无法解释为什么您testuser偶尔会看到。

许多工具隐含地假设用户名和用户 ID 之间存在一对一的对应关系,因此用户具有多个名称时的行为并不总是最佳的。你其实不应该这样做;它大部分都会起作用,但你需要准备好应对偶尔出现的奇怪情况。

相关内容