Arc*_*ton 9 users authentication permissions multiuser
我的意思是,如果两个用户具有相同的名称,那么系统在强制执行文件权限时如何知道他们实际上是不同的用户?
当我考虑/home/old-arch
在重新安装系统之前重命名我的家时,这个疑问出现在我的脑海中(我有/home
自己的分区,我没有格式化它),这样我就可以拥有一个新的、原始的/home/arch
. 我想知道新系统是否会给我对我的文件的旧权限,或者它是否会将我识别为不同的arch
.
And*_*ton 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:::
Run Code Online (Sandbox Code Playgroud)
如果您尝试以该用户身份登录,您将作为第一个匹配项登录。
$ ssh a@<host>
Password:
$ id
uid=1001(a) gid=1002(a) groups=1002(a)
$ pwd
/home/a
Run Code Online (Sandbox Code Playgroud)
将无法以相同名称的第二个用户身份登录。
请注意,Linux 通过用户名而不是用户名来跟踪用户。
但是,可能有两个不同的用户名是相同的用户 ID。考虑不同版本的/etc/passwd
:
$ cat /etc/passwd
...
a:x:1001:1002::/home/a:/bin/bash
b:x:1001:1002::/home/b:/bin/bash
Run Code Online (Sandbox Code Playgroud)
请注意,对于 usernamesa
和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)
Run Code Online (Sandbox Code Playgroud)
这两个a
和b
的UID 1001
,将有机会获得可用的UID资源1001
。
Lol*_*lan 11
在 Unix 中,用户通过他们的 ID (uid) 来标识,该 ID 必须是唯一的(在本地系统范围内)。因此,即使可以创建 2 个具有相同名称的不同用户(我系统上的 adduser 拒绝这样做,请参阅此问题以获取更多信息Can separate unix account share a username but have different passwords?),他们也需要得到不同的uid。虽然您可以操作包含用户信息的文件以符合您的条件,但每个程序都基于 uid 在系统上是唯一的假设,因此这些用户将是相同的。
编辑:另一个答案演示了这样一种情况,即您对同一个 uid 有 2 个不同的用户名-尽管就系统而言,这就像为同一用户使用两个不同的名称一样,因此应尽可能避免这样的构造,除非您特别想为系统上的用户创建别名(有关技术细节的更多信息,请参阅serverfault 上的unix 用户别名问题)。
系统使用这些 uid 来强制执行文件权限。文件所属用户的uid和gid(组id)写入文件的元数据中。如果您将磁盘携带到另一台计算机,该计算机具有随机共享相同 uid 的不同用户,则该文件将突然属于该系统上的该用户。知道 uid 在 unix 系统上通常不超过 16 位整数,这表明 uid 并不意味着全局唯一,仅在本地系统范围内唯一。
归档时间: |
|
查看次数: |
3643 次 |
最近记录: |