我的意思是,如果两个用户具有相同的名称,系统在强制执行文件权限时如何知道他们实际上是不同的用户?
当我考虑在/home/old-arch
重新安装系统之前重命名我的家时(我有/home
自己的分区并且我没有格式化它),这样我就可以拥有一个新的、原始的/home/arch
.我想知道新系统是否会给我文件的旧权限,或者它是否会将我识别为不同的arch
.
答案1
如果强制存在多个具有相同用户名的用户,那么将会有多个/etc/{shadow,passwd}
具有相同名称的条目:
$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
a:x:1002:1003::/home/b:/bin/bash
# cat /etc/shadow
a:...:17702:0:99999:7:::
a:...:17702:0:99999:7:::
如果您尝试以该用户身份登录,您将以第一个匹配的用户身份登录。
$ ssh a@<host>
Password:
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ pwd
/home/a
将无法以同名的第二个用户身份登录。
请注意,Linux 通过用户的 uid 来跟踪用户,而不是通过用户名。
然而,两个不同的用户名可能是同一个用户 ID。考虑一个不同的版本/etc/passwd
:
$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
b:x:1001:1002::/home/b:/bin/bash
请注意,对于 usernamea
和b
,第三列都是 1001 —— 这是 uid/用户 ID。现在,如果一个a
或多个用户b
登录(即使使用不同的密码),他们都将是“用户 1001”,并a
从操作系统的角度显示为用户。在这里,第一个匹配条目也是返回的条目(在大多数情况下):
$ ssh a@host
Password: <a's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ ssh b@host
Password: <b's password>
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
和都是 uid a
,并且可以访问 uid 可用的资源。b
1001
1001
答案2
在 Unix 中,用户通过其 ID (uid) 进行标识,该 ID 必须是唯一的(在本地系统范围内)。因此,即使可以创建 2 个具有相同名称的不同用户(我的系统上的 adduser 拒绝这样做,请参阅此问题以获取更多信息不同的 UNIX 帐户可以共享用户名但拥有单独的密码吗?),他们需要获得不同的 uid。虽然您可以操作包含用户信息的文件来匹配您的条件,但每个程序都基于 uid 在系统上唯一的假设,因此此类用户将是相同的。
编辑:另一个答案演示了同一个 uid 有 2 个不同的用户名的情况 - 但就系统而言,这就像同一个用户有两个不同的名称,所以如果可能的话应该避免这样的构造,除非您特别想为系统上的用户创建别名(请参阅unix 用户别名关于服务器故障的问题以获取有关技术细节的更多信息)。
系统使用这些 uid 来强制执行文件权限。文件所属用户的uid和gid(组id)被写入文件的元数据中。如果您将该磁盘带到另一台具有随机共享相同 uid 的不同用户的计算机上,该文件将突然属于该系统上的该用户。知道 uid 在 unix 系统上通常不超过 16 位整数,这表明 uid 并不意味着全局唯一,而只是在本地系统范围内唯一。
答案3
我正在考虑
/home/old-arch
在重装系统之前重命名我的家。我想知道新系统是否会给我文件的旧权限,或者它是否会将我识别为不同的架构。
如果您有一个单用户系统并使用相同或相似的发行版进行重新安装,则您的用户帐户很可能具有相同的用户 ID,因此从内核的角度来看是相同的用户。例如,据我所知,在安装过程中创建的用户在 Debian 系统上的 UID 是 1000。其他系统可能会使用其他数字,但很可能是每次安装时都相同的小整数。
这同样适用于其他用户(如果有的话),因为 UID 通常是按顺序分配的。创建的第三个用户可能与在另一个系统上创建的第三个用户具有相同的 UID。您需要事先采取措施以确保 UID 不会在两个系统上重复使用。
出于类似的原因,任何使用 NFS 的东西都需要有一个共享的用户数据库。
但在这种情况下,由于这是您的个人系统,chown newuser. -R /home/olduser
即使 UID 不同,您也可以以 root 身份登录并运行。
(Windows 系统不同,它们生成更随机的较长 ID 字符串。在那里,如果您将磁盘移动到另一台计算机,这些文件将被视为由未知用户拥有,并且如果不使用管理员权限,您将无法访问。
另外,我在上面说了很多“可能”。无法判断某些发行版的行为是否有所不同。现代 Linux 还支持 32 位 UID,因此虽然它不像 Windows SID 那么长,但如果想要拥有例如随机 UID,仍然有一些空间可以使用。但通常情况下,这没有多大用处。系统管理员应该知道他们将哪些磁盘连接到系统并相应地调整文件所有权,或者使其他用户无法访问安装点。)
答案4
Unix 是一个非常古老的系统,在那个时代,存储容量非常小,所有东西——包括文件和用户——通过数字来识别。名字后来才出现,在存储量增长了一点之后。
A凭借这个系统就是它名字只是标签连接到真实的句柄:数字 ID。因此,您可以为一个用户拥有多个名称(直接编辑 /etc/passwd),也可以为一个文件拥有多个名称(对于仅存储该文件一次很有用,但可以在多个位置查看它)。
限制是用户的系统和文件的分区。
我这么说只是为了澄清、解释事物为何如此。
我必须承认我从来没有尝试过相反的方式——同名不同ID——我一直认为这是不可能的。是吗?不是一个错误吗?