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