當前位置:
首頁 > 最新 > 10分鐘Linux-用戶管理

10分鐘Linux-用戶管理

解賬號的基本概念,掌握了創建、修改和刪除用戶賬號命令後。接下來介紹Linux本機賬號到底記錄了哪些信息以及賬號信息儲存的位置。

01

用戶賬號數據文件

本機的用戶賬號數據儲存於/etc/passwd文件中。與其他的配置文件一樣,passwd 也是一個文本文件,因此,你可以直接使用文字處理程序,例如:cat 或 less 瀏覽其中的內容。

以下是我這台主機上 /etc/passwd 前三行的內容:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

/etc/passwd 中每一行代表一個用戶的賬號數據,每一行又使用冒號(:)分隔出七個欄位,每個欄位的名稱如下所示:

USERNAME:PASSWORD:UID:GID:COMMENT:HOMEDIR:SHELL

每一個欄位詳細的解釋說明如下:

1

USERNAME:用戶名稱,用來表示用戶數據的識別名稱。用戶名稱最長為32 個字元,可以包含大小寫英文字母、下劃線 (_)、連接線 (-)和阿拉伯數字。其中阿拉伯數字不能作為用戶名稱的第一個字元,除此之外為了避免某些系統出現問題,我強烈建議你儘可能不要使用大寫英文字母。

由於用戶名稱是用戶登錄時必須提供的信息,因此,又稱為登錄名稱(Login Name),或是賬號名稱(Account Name)。

2

PASSWORD:

個欄位儲存用戶的密碼數據。由於 /etc/passwd 文件的許可權規定必須為0644,也就是 rw-r--r--。因此,Linux 上的任何一個用戶都可以直接讀取 /etc/passwd 的內容。為了保護密碼的安全,這個欄位儲存到/etc/shadow密碼文件中。

如果這個欄位出現的是「x」字元,則代表該用戶的密碼被儲存到其他地方;

如果這個欄位是空的,則代表該用戶不需要密碼就可以通過 Linux 的驗證。

如果passwd欄位中的第一個字元是「*」的話,那麼,就表示該賬號被查封了,系統不允許持有該賬號的用戶登錄。

3

UID:UID是用戶標識符 (User ID)的縮寫,由於 Linux 以後的 UID 是一個32 位長度的數值,所以 UID 的範圍為 0 到4,294,967,296 之間的正整數。

在 Linux 中,每一個用戶都「應該」 要擁有一個唯一的 UID,Linux 系統是根據 UID 來判斷用戶的身份。如果有兩個使用者賬號的 UID 相同,即使賬號名稱不同,你的Linux 還是會認為這是同一個用戶。

4

GID:GID 是群組標識符 (Group ID)的縮寫 ,這個欄位記錄的是用戶的主要組的標識符 (Primary Group"s GID)。

5

COMMENT:這個欄位主要用來記錄用戶的全名 (Full Name) 與其他的批註數據,例如電話號碼、通訊地址...等等。

由於賬號中的用戶名稱不允許包含空格符,因此用戶名稱便不適合記錄其全名 ,所以 Linux 才會提供這個欄位,以便記錄用戶的全名。

6

HOMEDIR:這個欄位記錄用戶登錄系統後第一個要進入的目錄,通常是用戶的家目錄,所以這個欄位就被稱為家目錄路徑 (Home Directory Path),值得注意的是這個位置儲存的必須是絕對路徑 (Absolute Pathname)。

如果這個目錄不存在,用戶登錄時 Linux 會以根目錄 (Root Directory) 作為用戶暫時的主目錄。

7

SHELL:這個欄位儲存用戶登錄系統後要執行程序的完整路徑名稱 (Pathname)。你可以在這個欄位指定任何的程序,用戶登錄 Linux 時,Linux 就會去執行這個程序。由於大部分的用戶登錄後,都是執行某個 Shell 程序,因此,習慣上我們會稱呼這個欄位為 「Shell」。

當用戶登錄後,Linux 會去執行 SHELL 欄位中設置的程序;當這個程序執行完畢時,Linux 就會強迫用戶註銷系統。因此,若你希望某一個用戶不能登錄你的 Linux,那麼只需在 SHELL 欄位指定類似 /bin/false、/sbin/nologin...等一執行就馬上結束的程序即可。

舉個例子

根據之前的介紹,我們知道 /etc/passwd 文件儲存了本機的用戶賬號,你只要依照/etc/passwd的格式填入賬號的信息,就可以手動的建立、更改、甚至刪除用戶賬號了!不信?請看下列的例子:

# id jinlong

id: jinlong: No such user

# echo "jinlong::800:800::/home/jinlong:/bin/bash" >> /etc/passwd

# id jinlong

uid=800(jinlong) gid=800 groups=800

① 先用 id 命令查詢 jinlong 這個用戶賬號是否存在,id 命令告訴我:「No such user」,代表沒有 jinlong 這個用戶。

② 直接使用 echo 命令將符合 /etc/passwd 格式的 jinlong 賬號數據追加在/etc/passwd 文件後。

③ 再使用 id 命令查詢 jinlong 賬號,結果,就查詢到 jinlong 這個用戶了!

既然賬號已經創建出來,那我試著用jinlong賬號登錄Linux系統吧。

Red Hat Enterprise Linux Server release 6.7 (Santiago)

Kernel 2.6.32-573.el6.x86_64 on an x86_64

localhost login: jinlong ①

No directory /home/jinlong! Logging in with home = "/". ②

id: cannot find name for group ID 800 ③

-bash-4.1$ whoami ④

jinlong

-bash-4.1$ pwd ⑤

/

-bash-4.1$

① 使用 jinlong 登錄我的 Linux系統。

② 由於我只有添加 jinlong 的賬號數據,並沒有建立主目錄,所以 Linux 告訴我們,找不到 /home/jinlong/ 也就是 jinlong 的家目錄。最後,Linux 只好讓 jinlong 使用 / 作為主目錄。

③ 由於我只有添加 jinlong 的賬號數據,並沒有添加組賬號數據,所以,Linux提示我們說,找不到組ID 800對應的組名稱

④使用 whoami 工具,查詢「我是誰」?

⑤ 最後,使用 pwd 查看一下目前的工作目錄,pwd 響應說是 / (根目錄)。

02

組賬號數據文件

本機的組賬號數據被儲存在 /etc/group 文件中,與 /etc/passwd 一樣,這也是一個文本文件。以下是我的 /etc/group 前三行的內容:

root:x:0:

bin:x:1:bin,daemon

daemon:x:2:bin,daemon

這個文件與 /etc/passwd的格式類似,每一行代表一批群組賬號的資料。每一行的格式如下:

GROUPNAME:PASSWORD:GID:MEMBERS

每一行中包含四個欄位,每個欄位以冒號(:) 區隔開來,每個欄位的內容如下說明:

1

GROUPNAME:組名,與用戶名稱一樣,必須是以大小寫英文字母、阿拉伯數字、連接線(-)與下劃線(_) 符號所組成,其長度必須在 32 個字元以下。

2

PASSWORD:組密碼,也必須是加密後的密碼。如果這個欄位出現的是 「x」 字元,則代表該用戶的密碼被儲存到其他地方。

3

GID:組標識符 (GID, Group ID),與 UID 一樣,GID 也是 32 位長度的正整數,範圍從 0 到 4,294,967,296。

與用戶賬號一樣,每一個組都應該擁有一個唯一的組標識符,因此一個Linux 系統,可以建立 4,294,967,296 個組賬號。

4

MEMBERS:這個欄位儲存著組成員的清單。請特別注意,由於 Linux 不支持巢狀組(Nested Group) ,因此,這個欄位記錄的是用戶賬號的名稱,而不是組!

由於一個組可以擁有多個成員,所以在這個欄位中,你可以指定多個成員,只要以一個逗號(,)分隔開來即可。

提示

所謂的巢狀組,是指系統允許組可以作為其他組的成員。

Windows 系統支持巢狀組(嵌套組);但 UNIX/Linux 不支持。

舉個例子

由於剛才我只有添加 jinlong 的賬號數據,並沒有添加組賬號數據,所以,Linux提示我們說,找不到組ID 800對應的組名稱。接下來我們添加jinlong組賬號信息,例子如下:

# groups jinlong①

jinlong : groups: cannot find name for group ID 800

800

# echo "jinlong:x:800:" >> /etc/group ②

# groups jinlong ③

jinlong : jinlong

# su - jinlong ④

su: warning: cannot change directory to /home/jinlong: No such file or directory

-bash-4.1$

①先使用groups命令查詢jinlong這個組賬號是否存在,事實表明不存在

②直接使用echo命令,將符合/etc/group格式的組賬號數據追加到/etc/group文件後

③再次使用group命令查詢,結果表明已經有jinlong這個組賬號了。

④ 使用su命令切換賬號,發現Linux依然告訴我們找不到 /home/jinlong/ 也就是 jinlong 的家目錄

那麼,如何建立用戶的主家目錄呢?

Linux 的 /etc/skel/ 就是用戶主目錄的模板 (Template)。你可以直接把 /etc/skel/ 複製成為該用戶的主目錄即可。

具體操作過程如下:

# id jinlong

uid=800(jinlong) gid=800(jinlong) groups=800(jinlong) ①

# ls -ld ~jinlong

ls: cannot access /root/jinlong: No such file or directory ②

# cp -r /etc/skel/ /home/jinlong ③

# ls -ld ~jinlong

drwxr-xr-x 2 root root 4096 Jun 15 04:22 /home/jinlong ④

# su - jinlong ⑤

$

①查詢一下 jinlong 的賬號詳細數據,由此結果可以知道,jinlong 的主要組為 jinlong 組。

② 接著,使用 ls 確認一下有沒有 jinlong 的主目錄。

③ 下一步使用 cp,直接把 /etc/skel/ 目錄複製成為 ~jinlong/。

④ 查看目錄是否創建成功

⑤ 使用su命令切換測試

關注我們

雲運維聯盟

專註Linux雲平台運維


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲運維聯盟 的精彩文章:

TAG:雲運維聯盟 |