linux用戶的ID分2種:用戶ID(User ID,簡稱UID)和組ID(Group ID,簡稱GID),這與文件有擁有者和擁有群組兩種屬性相對應。每個文件都有自己的擁有者ID和群組ID,當顯示文件屬性時,系統會根據“/etc/passwd”和“/etc/group”文件中的內容,分別找到UID和GID對應的用戶名和群組名,然后顯示出來。
本教程操作環境:linux7.3系統、Dell G3電腦。
登陸 Linux 系統時,雖然輸入的是自己的用戶名和密碼,但其實 Linux 并不認識你的用戶名稱,它只認識用戶名對應的 ID 號(也就是一串數字)。Linux 系統將所有用戶的名稱與 ID 的對應關系都存儲在 /etc/passwd 文件中。
說白了,用戶名并無實際作用,僅是為了方便用戶的記憶而已。
要論證 “Linux系統不認識用戶名” 也很簡單,在前面章節,我們曾經在網絡上下載過 “.tar.gz” 或 “.tar.bz2” 格式的文件,在解壓縮之后的文件中,你會發現文件擁有者的屬性顯示的是一串數字,這很正常,就是因為系統只認識代表你身份的 ID,這串數字就是用戶的 ID(UID)號。
Linux 系統中,每個用戶的 ID 細分為 2 種,分別是用戶 ID(User ID,簡稱 UID)和組 ID(Group ID,簡稱 GID),這與文件有擁有者和擁有群組兩種屬性相對應(如圖 1 所示)。
圖 1 文件的擁有者和群組屬性
從圖 1 中可以看到,該文件的擁有者是超級管理員 root,擁有群組也是 root。有人可能會問,既然 Linux 系統不認識用戶名,文件是如何判別它的擁有者名稱和群組名稱的呢?
每個文件都有自己的擁有者 ID 和群組 ID,當顯示文件屬性時,系統會根據 /etc/passwd 和 /etc/group 文件中的內容,分別找到 UID 和 GID 對應的用戶名和群組名,然后顯示出來。
/etc/passwd 文件和 /etc/group 文件,后續文章會做詳細講解,這里只需要知道,在 /etc/passwd 文件中,利用 UID 可以找到對應的用戶名;在 /etc/group 文件中,利用 GID 可以找到對應的群組名。
做個小實驗,筆者所用的 Linux 系統中,常用的有兩個賬戶,分別為 root 超級管理員賬戶和 c.biancheng.net 普通賬戶,我們先使用 root 賬號登陸并 vim /etc/passwd,在該文件中找到 c.biancheng.net 賬戶并將其 UID 隨意改一個數字,這時當你查看普通賬戶擁有的文件時,你會發現所有文件的擁有者不再是 c.biancheng.net,而是數字。
具體執行過程如下所示:
#查看系統中是否存在c.biancheng.net這個用戶 [root@livecd?~]#grep?'c.biancheng.net'?/etc/passwd c.biancheng.net:x:500:500:c.biancheng.net:/home/centoslive:/bin/bash [root@livecd?~]#ll?-d?/home/centoslive drwx------.?23?c.biancheng.net?centoslive?4096?Apr?9?09:37?/home/centoslive [root@livecd?~]#vim?/etc.passwd #修改c.biancheng.net賬戶中的UID(第一個?500)為?2000 [root@livecd?~]#ll?-d?/home/centoslive drwx------.?23?500?centoslive?4096?Apr?9?09:37?/home/centoslive #可以看到,之前的?c.biancheng.net?變為了?500,因為修改了UID,導致?500?找不到對應的賬號,因此顯示數字 #記得最后將其再手動改正過來 [root@livecd?~]#vim?/etc.passwd #修改c.biancheng.net賬戶中的UID從?2000?改為?500
由于 c.biancheng.net 賬戶的 UID 已經改為 2000,但其 home 目錄卻記錄的是 500,會導致此用戶再次登錄時無法進入自己的home目錄。
注意,本節為了說明 ID 和用戶名的對應關系,所以才將 /etc/passwd 文件中用戶的 UID 做了更改。此操作很可能會導致某些程序無法進行,因此 /etc/passwd 文件不能隨意修改。
相關推薦:《Linux視頻教程》