Linux 如何辨識使用者?
我的意思是,如果兩個使用者具有相同的名稱,那麼系統在強制執行文件權限時如何知道他們實際上是不同的使用者?
當我考慮
/home/old-arch
在重新安裝系統之前重命名我的家時,我想到了這個疑問(我有/home
自己的分區,我沒有格式化它),這樣我就可以擁有一個新的、原始的/home/arch
. 我想知道新系統是否會給我文件的舊權限,或者它是否會將我辨識為不同的arch
.
在 Unix 中,使用者由他們的 ID (uid) 標識,該 ID 必須是唯一的(在本地系統範圍內)。因此,即使可以創建 2 個具有相同名稱的不同使用者(我的系統上的 adduser 拒絕這樣做,請參閱此問題以獲取更多資訊,不同的 unix 帳戶可以共享一個使用者名但有不同的密碼嗎?),他們需要得到不同的uid。雖然您可能能夠操作包含使用者資訊的文件以匹配您的標準,但每個程序都基於 uid 在系統上是唯一的假設,因此此類使用者將是相同的。
編輯:另一個答案展示了一個情況,即同一個 uid 有 2 個不同的使用者名 - 就係統而言,這就像同一個使用者有兩個不同的名稱,所以如果可能的話,應該避免這樣的結構,除非您特別想為系統上的使用者創建別名(有關技術細節的更多資訊,請參閱 serverfault 上的unix 使用者別名問題)。
系統使用這些 uid 來強制執行文件權限。文件所屬使用者的uid和gid(組id)寫入文件的元數據。如果您將磁碟帶到另一台隨機共享相同 uid 的不同使用者的電腦上,該文件將突然屬於該系統上的該使用者。知道 uid 在 unix 系統上通常不超過 16 位整數,這表明 uid 並不意味著全域唯一,僅在本地系統範圍內唯一。
如果您強制存在多個具有相同使用者名的使用者,那麼將有多個
/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
請注意,對於 username
a
和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)
a
和都是b
uid1001
並且可以訪問 uid 可用的資源1001
。