Linux如何识别用户?


9

我的意思是,如果两个用户具有相同的名称,那么系统在强制执行文件权限时如何知道他们实际上是不同的用户?

在考虑/home/old-arch重新安装系统之前要重命名我的家时,这个疑问浮现在脑海(我拥有/home自己的分区,并且不格式化它),这样我便可以拥有一个全新的原始文件/home/arch。我想知道新系统是否会向我授予文件的旧权限,或者它是否会将我识别为其他人arch


12
简单的答案是“没有”,因为您不应让多个用户使用相同的用户名。
伊格纳西奥·巴斯克斯

6
UID与用户名不同,但通常与用户名相关联,它们是如何跟踪此类事件的。请参阅的输出ls -n
DopeGhoti

5
“发送”过于模糊,无法回答问题。权限仅适用于单个系统(任意大小)。
伊格纳西奥·巴斯克斯

1
@ IgnacioVazquez-Abrams当我考虑/home/old-arch在重新安装系统之前重命名我的家时,实际上想到了这个问题(我/home在其自己的分区上,但不格式化),这样我便可以拥有一个全新的原始文件/home/arch。我想知道我是否将对文件保留相同的权限,或者系统是否会将我识别为不同的arch
斯坦顿拱门[

1
我认为您在评论中提到的情况很有趣,涉及两个用户名相同但在同一台计算机上安装的不同系统上的两个用户访问共享分区上的相同文件。也许您可以将其添加到问题中?
Time4Tea

Answers:


10

在Unix中,用户由其ID(uid)标识,该ID必须唯一(在本地系统范围内)。因此,即使有可能将创建2级不同的用户使用相同的名称(我的系统上adduser的拒绝要做到这一点,更多信息见这个问题能独立的Unix帐户共享一个用户名,但有不同的密码?),他们需要得到不同的uid。尽管您可以操纵包含用户信息的文件以符合您的条件,但是每个程序都基于uid在系统上是唯一的假设,因此这些用户将是相同的。

编辑:另一个答案演示了一个情况,您为同一个uid使用2个不同的用户名-就系统而言,这就像为同一用户使用了两个不同的名称,因此,如果可能,应避免这样的构造,除非您特别想为系统上的用户创建别名(有关技术的更多信息,请参阅serverfault上的unix用户别名问题)。

系统使用这些uid强制执行文件权限。文件所属的用户的uid和gid(组ID)被写入文件的元数据中。如果将磁盘与另一位用户随机共享同一uid的另一台计算机一起携带,则该文件将突然属于该系统上的该用户。知道uid在unix系统上通常不超过16位整数,这表明uid并不意味着全局唯一,而仅在本地系统范围内唯一。


22

如果您强制存在多个具有相同用户名的用户,则将存在多个/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

请注意,对于用户名ab,第三列均为1001-这是uid /用户ID。现在,如果用户a或用户b登录(即使使用不同的密码),它们都将是“用户1001”,并a从OS的角度显示为用户。同样,第一个匹配的条目也是返回的条目(在大多数情况下):

$ 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)

这两个ab的UID 1001,将有机会获得可用的UID资源1001


为什么在创建新用户名时不检查重复的用户名?
phuclv

9
请注意,useradd如果您尝试添加现有用户,我认为即使是最基本的基准也将很合适,因此在这里“强制”使用Andy的意思是“手动编辑/etc/passwd/etc/shadow这非常不要在家里尝试使用”。
Shadur

“将无法以相同的名称作为第二个用户登录。” 您还不能setuid使用第二个UID 打电话吗?甚至sudo -u '#<uid>' bash
jazzpi

1
@jazzpi这可能取决于一个人对“登录”的定义。但是,我当然可以看到图形化登录管理器允许这种情况……
CVn

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,仍有一些空间可以使用。通常,这并没有太多用处。系统管理员应该知道他们将哪些磁盘连接到系统并相应地调整文件所有权,或者使其他用户无法访问挂载点。)


1

Unix是一个非常古老的系统,在这个时代存储容量非常小,并且所有内容(包括用户的文件)都由数字标识。在存储量有所增加之后名称才出现了。

该系统的一个优点名称仅是挂在真实句柄上的标签:数字ID。因此,您可以为一个用户使用多个名称(直接在/ etc / passwd中进行编辑),以及为一个文件使用多个名称(仅用于存储一次文件,但可以在多个位置查看该文件)。

限制是用户的系统和文件的分区。

我说这只是为了澄清,解释为什么事物就是它们

我必须承认,我从未尝试过相反的方法-使用不同ID的相同名称-我一直认为这是不可能的。是吗?不是错误吗?


1
那么,您是说其他文件系统(例如NTFS或CIFS)使用用户名而不是字母数字SIDS来存储文件所有权和权限吗?
doneal24 '18

不能确定,但​​是我相信是这样,因为创建Windows时不存在字母数字
SIDS-

1
@ DougO'Neal:NT SID具有两种格式:文本表示形式和12字节二进制形式。AFAIK,NTFS在内部使用后者,因此它仍然使用数字来标识用户-只是很大的数字。:)
cHao

3
@ypouplard创建Windows时,它是一个单用户操作系统。坐在键盘上的人统治了一切,因此无需设置文件权限。
donal24 '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.