您好,登錄后才能下訂單哦!
本篇內容主要講解“linux系統帳號文件是怎么組成的”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“linux系統帳號文件是怎么組成的”吧!
帳號文件由5個部分組成:1、“/etc/passwd”,系統用戶配置文件,存儲了系統中所有用戶的基本信息;2、“/etc/shadow”,存儲了系統中用戶的密碼信息;3、“/ect/group”,用戶組配置文件,存儲了用戶組的所有信息等等。
本教程操作環境:linux5.9.8系統、Dell G3電腦。
linux系統的帳號文件有5個組成部分:
/etc/passwd 文件
/etc/shadow 文件
/ect/group 文件
/etc/gshadow文件
/etc/login.defs 文件
1、/etc/passwd 文件
/etc/passwd 文件,是系統用戶配置文件,存儲了系統中所有用戶的基本信息,并且所有用戶都可以對此文件執行讀操作。
首先我們來打開這個文件,看看到底包含哪些內容,執行命令如下:
[root@localhost ~]# vi /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 adm:x:3:4:adm:/var/adm:/sbin/nologin ...省略部分輸出...
可以看到,/etc/passwd 文件中的內容非常規律,每行記錄對應一個用戶。
讀者可能會問,Linux 系統中默認怎么會有這么多的用戶?這些用戶中的絕大多數是系統或服務正常運行所必需的用戶,這種用戶通常稱為系統用戶或偽用戶。系統用戶無法用來登錄系統,但也不能刪除,因為一旦刪除,依賴這些用戶運行的服務或程序就不能正常執行,會導致系統問題。
不僅如此,每行用戶信息都以 ":" 作為分隔符,劃分為 7 個字段,每個字段所表示的含義如下:
用戶名:密碼:UID(用戶ID):GID(組ID):描述性信息:主目錄:默認Shell
接下來,給大家逐個介紹這些字段。
用戶名
用戶名,就是一串代表用戶身份的字符串。
前面講過,用戶名僅是為了方便用戶記憶,Linux 系統是通過 UID 來識別用戶身份,分配用戶權限的。/etc/passwd 文件中就定義了用戶名和 UID 之間的對應關系。
密碼
"x" 表示此用戶設有密碼,但不是真正的密碼,真正的密碼保存在 /etc/shadow 文件中(下一節做詳細介紹)。
在早期的 UNIX 中,這里保存的就是真正的加密密碼串,但由于所有程序都能讀取此文件,非常容易造成用戶數據被竊取。
雖然密碼是加密的,但是采用暴力破解的方式也是能夠進行破解的。
因此,現在 Linux 系統把真正的加密密碼串放置在 /etc/shadow 文件中,此文件只有 root 用戶可以瀏覽和操作,這樣就最大限度地保證了密碼的安全。
需要注意的是,雖然 "x" 并不表示真正的密碼,但也不能刪除,如果刪除了 "x",那么系統會認為這個用戶沒有密碼,從而導致只輸入用戶名而不用輸入密碼就可以登陸(只能在使用無密碼登錄,遠程是不可以的),除非特殊情況(如破解用戶密碼),這當然是不可行的。
UID
UID,也就是用戶 ID。每個用戶都有唯一的一個 UID,Linux 系統通過 UID 來識別不同的用戶。
實際上,UID 就是一個 0~65535 之間的數,不同范圍的數字表示不同的用戶身份。
GID
全稱“Group ID”,簡稱“組ID”,表示用戶初始組的組 ID 號。這里需要解釋一下初始組和附加組的概念。
初始組,指用戶登陸時就擁有這個用戶組的相關權限。每個用戶的初始組只能有一個,通常就是將和此用戶的用戶名相同的組名作為該用戶的初始組。比如說,我們手工添加用戶 lamp,在建立用戶 lamp 的同時,就會建立 lamp 組作為 lamp 用戶的初始組。
附加組,指用戶可以加入多個其他的用戶組,并擁有這些組的權限。每個用戶只能有一個初始組,除初始組外,用戶再加入其他的用戶組,這些用戶組就是這個用戶的附加組。附加組可以有多個,而且用戶可以有這些附加組的權限。
舉例來說,剛剛的 lamp 用戶除屬于初始組 lamp 外,我又把它加入了 users 組,那么 lamp 用戶同時屬于 lamp 組和 users 組,其中 lamp 是初始組,users 是附加組。
當然,初始組和附加組的身份是可以修改的,但是我們在工作中不修改初始組,只修改附加組,因為修改了初始組有時會讓管理員邏輯混亂。
需要注意的是,在 /etc/passwd 文件的第四個字段中看到的 ID 是這個用戶的初始組。
描述性信息
這個字段并沒有什么重要的用途,只是用來解釋這個用戶的意義而已。
主目錄
也就是用戶登錄后有操作權限的訪問目錄,通常稱為用戶的主目錄。
例如,root 超級管理員賬戶的主目錄為 /root,普通用戶的主目錄為 /home/yourIDname,即在 /home/ 目錄下建立和用戶名相同的目錄作為主目錄,如 lamp 用戶的主目錄就是 /home/lamp/ 目錄。
默認的Shell
Shell 就是 Linux 的命令解釋器,是用戶和 Linux 內核之間溝通的橋梁。
我們知道,用戶登陸 Linux 系統后,通過使用 Linux 命令完成操作任務,但系統只認識類似 0101 的機器語言,這里就需要使用命令解釋器。也就是說,Shell 命令解釋器的功能就是將用戶輸入的命令轉換成系統可以識別的機器語言。
通常情況下,Linux 系統默認使用的命令解釋器是 bash(/bin/bash),當然還有其他命令解釋器,例如 sh、csh 等。
2、/etc/shadow 文件
/etc/shadow 文件,用于存儲 Linux 系統中用戶的密碼信息,又稱為“影子文件”。
前面介紹了 /etc/passwd 文件,由于該文件允許所有用戶讀取,易導致用戶密碼泄露,因此 Linux 系統將用戶的密碼信息從 /etc/passwd 文件中分離出來,并單獨放到了此文件中。
/etc/shadow 文件只有 root 用戶擁有讀權限,其他用戶沒有任何權限,這樣就保證了用戶密碼的安全性。
注意,如果這個文件的權限發生了改變,則需要注意是否是惡意攻擊。
介紹此文件之前,我們先打開看看,執行如下命令:
[root@localhost ~]#vim /etc/shadow root: $6$9w5Td6lg $bgpsy3olsq9WwWvS5Sst2W3ZiJpuCGDY.4w4MRk3ob/i85fl38RH15wzVoom ff9isV1 PzdcXmixzhnMVhMxbvO:15775:0:99999:7::: bin:*:15513:0:99999:7::: daemon:*:15513:0:99999:7::: …省略部分輸出…
同 /etc/passwd 文件一樣,文件中每行代表一個用戶,同樣使用 ":" 作為分隔符,不同之處在于,每行用戶信息被劃分為 9 個字段。每個字段的含義如下:
用戶名:加密密碼:最后一次修改時間:最小修改時間間隔:密碼有效期:密碼需要變更前的警告天數:密碼過期后的寬限時間:賬號失效時間:保留字段
接下來,給大家分別介紹這 9 個字段。
用戶名
同 /etc/passwd 文件的用戶名有相同的含義。
加密密碼
這里保存的是真正加密的密碼。目前 Linux 的密碼采用的是 SHA512 散列加密算法,原來采用的是 MD5 或 DES 加密算法。SHA512 散列加密算法的加密等級更高,也更加安全。
注意,這串密碼產生的亂碼不能手工修改,如果手工修改,系統將無法識別密碼,導致密碼失效。很多軟件透過這個功能,在密碼串前加上 "!"、"*" 或 "x" 使密碼暫時失效。
所有偽用戶的密碼都是 "!!" 或 "*",代表沒有密碼是不能登錄的。當然,新創建的用戶如果不設定密碼,那么它的密碼項也是 "!!",代表這個用戶沒有密碼,不能登錄。
最后一次修改時間
此字段表示最后一次修改密碼的時間,可是,為什么 root 用戶顯示的是 15775 呢?
這是因為,Linux 計算日期的時間是以 1970 年 1 月 1 日作為 1 不斷累加得到的時間,到 1971 年 1 月 1 日,則為 366 天。這里顯示 15775 天,也就是說,此 root 賬號在 1970 年 1 月 1 日之后的第 15775 天修改的 root 用戶密碼。
那么,到底 15775 代表的是哪一天呢?可以使用如下命令進行換算:
[root@localhost ~]# date -d "1970-01-01 15775 days" 2013年03月11日 星期一 00:00:00 CST
可以看到,通過以上命令,即可將其換算為我們習慣的系統日期。
最小修改時間間隔
最小修改間隔時間,也就是說,該字段規定了從第 3 字段(最后一次修改密碼的日期)起,多長時間之內不能修改密碼。如果是 0,則密碼可以隨時修改;如果是 10,則代表密碼修改后 10 天之內不能再次修改密碼。
此字段是為了針對某些人頻繁更改賬戶密碼而設計的。
密碼有效期
經常變更密碼是個好習慣,為了強制要求用戶變更密碼,這個字段可以指定距離第 3 字段(最后一次更改密碼)多長時間內需要再次變更密碼,否則該賬戶密碼進行過期階段。
該字段的默認值為 99999,也就是 273 年,可認為是永久生效。如果改為 90,則表示密碼被修改 90 天之后必須再次修改,否則該用戶即將過期。管理服務器時,通過這個字段強制用戶定期修改密碼。
密碼需要變更前的警告天數
與第 5 字段相比較,當賬戶密碼有效期快到時,系統會發出警告信息給此賬戶,提醒用戶 "再過 n 天你的密碼就要過期了,請盡快重新設置你的密碼!"。
該字段的默認值是 7,也就是說,距離密碼有效期的第 7 天開始,每次登錄系統都會向該賬戶發出 "修改密碼" 的警告信息。
密碼過期后的寬限天數
也稱為“口令失效日”,簡單理解就是,在密碼過期后,用戶如果還是沒有修改密碼,則在此字段規定的寬限天數內,用戶還是可以登錄系統的;如果過了寬限天數,系統將不再讓此賬戶登陸,也不會提示賬戶過期,是完全禁用。
比如說,此字段規定的寬限天數是 10,則代表密碼過期 10 天后失效;如果是 0,則代表密碼過期后立即失效;如果是 -1,則代表密碼永遠不會失效。
賬號失效時間
同第 3 個字段一樣,使用自 1970 年 1 月 1 日以來的總天數作為賬戶的失效時間。該字段表示,賬號在此字段規定的時間之外,不論你的密碼是否過期,都將無法使用!
該字段通常被使用在具有收費服務的系統中。
保留
這個字段目前沒有使用,等待新功能的加入。
3、/ect/group 文件
/ect/group 文件是用戶組配置文件,即用戶組的所有信息都存放在此文件中。
此文件是記錄組 ID(GID)和組名相對應的文件。前面講過,etc/passwd 文件中每行用戶信息的第四個字段記錄的是用戶的初始組 ID,那么,此 GID 的組名到底是什么呢?就要從 /etc/group 文件中查找。
/etc/group 文件的內容可以通過 Vim 看到:
[root@localhost ~]#vim /etc/group root:x:0: bin:x:1:bin,daemon daemon:x:2:bin,daemon …省略部分輸出… lamp:x:502:
可以看到,此文件中每一行各代表一個用戶組。在前面章節中,我們曾創建 lamp 用戶,系統默認生成一個 lamp 用戶組,在此可以看到,此用戶組的 GID 為 502,目前它僅作為 lamp 用戶的初始組。
各用戶組中,還是以 ":" 作為字段之間的分隔符,分為 4 個字段,每個字段對應的含義為:
組名:密碼:GID:該用戶組中的用戶列表
接下來,分別介紹各個字段具體的含義。
組名
也就是是用戶組的名稱,有字母或數字構成。同 /etc/passwd 中的用戶名一樣,組名也不能重復。
組密碼
和 /etc/passwd 文件一樣,這里的 "x" 僅僅是密碼標識,真正加密后的組密碼默認保存在 /etc/gshadow 文件中。
不過,用戶設置密碼是為了驗證用戶的身份,那用戶組設置密碼是用來做什么的呢?用戶組密碼主要是用來指定組管理員的,由于系統中的賬號可能會非常多,root 用戶可能沒有時間進行用戶的組調整,這時可以給用戶組指定組管理員,如果有用戶需要加入或退出某用戶組,可以由該組的組管理員替代 root 進行管理。但是這項功能目前很少使用,我們也很少設置組密碼。如果需要賦予某用戶調整某個用戶組的權限,則可以使用 sudo 命令代替。
組ID (GID)
就是群組的 ID 號,Linux 系統就是通過 GID 來區分用戶組的,同用戶名一樣,組名也只是為了便于管理員記憶。
這里的組 GID 與 /etc/passwd 文件中第 4 個字段的 GID 相對應,實際上,/etc/passwd 文件中使用 GID 對應的群組名,就是通過此文件對應得到的。
組中的用戶
此字段列出每個群組包含的所有用戶。需要注意的是,如果該用戶組是這個用戶的初始組,則該用戶不會寫入這個字段,可以這么理解,該字段顯示的用戶都是這個用戶組的附加用戶。
舉個例子,lamp 組的組信息為 "lamp:x:502:",可以看到,第四個字段沒有寫入 lamp 用戶,因為 lamp 組是 lamp 用戶的初始組。如果要查詢這些用戶的初始組,則需要先到 /etc/passwd 文件中查看 GID(第四個字段),然后到 /etc/group 文件中比對組名。
每個用戶都可以加入多個附加組,但是只能屬于一個初始組。所以我們在實際工作中,如果需要把用戶加入其他組,則需要以附加組的形式添加。例如,我們想讓 lamp 也加入 root 這個群組,那么只需要在第一行的最后一個字段加入 lamp,即 root:x:0:lamp 就可以了。
一般情況下,用戶的初始組就是在建立用戶的同時建立的和用戶名相同的組。
4、/etc/gshadow文件
組用戶信息存儲在 /etc/group 文件中,而將組用戶的密碼信息存儲在 /etc/gshadow 文件中。
首先,我們借助 Vim 命令查看一下此文件中的內容:
[root@localhost ~]#vim /etc/gshadow root::: bin:::bin, daemon daemon:::bin, daemon ...省略部分輸出... lamp:!::
文件中,每行代表一個組用戶的密碼信息,各行信息用 ":" 作為分隔符分為 4 個字段,每個字段的含義如下:
組名:加密密碼:組管理員:組附加用戶列表
組名
同 /etc/group 文件中的組名相對應。
組密碼
對于大多數用戶來說,通常不設置組密碼,因此該字段常為空,但有時為 "!",指的是該群組沒有組密碼,也不設有群組管理員。
組管理員
從系統管理員的角度來說,該文件最大的功能就是創建群組管理員。那么,什么是群組管理員呢?
考慮到 Linux 系統中賬號太多,而超級管理員 root 可能比較忙碌,因此當有用戶想要加入某群組時,root 或許不能及時作出回應。這種情況下,如果有群組管理員,那么他就能將用戶加入自己管理的群組中,也就免去麻煩 root 了。
不過,由于目前有 sudo 之類的工具,因此群組管理員的這個功能已經很少使用了。
組中的附加用戶
該字段顯示這個用戶組中有哪些附加用戶,和 /etc/group 文件中附加組顯示內容相同。
5、/etc/login.defs 文件
/etc/login.defs 文件用于在創建用戶時,對用戶的一些基本屬性做默認設置,例如指定用戶 UID 和 GID 的范圍,用戶的過期時間,密碼的最大長度,等等。
需要注意的是,該文件的用戶默認配置對 root 用戶無效。并且,當此文件中的配置與 /etc/passwd 和 /etc/shadow 文件中的用戶信息有沖突時,系統會以/etc/passwd 和 /etc/shadow 為準。
讀者可自行使用 vim /etc/login.defs
命令查看該文件中的內容,表 1 中對文件中的各個選項做出了具體的解釋。
設置項 | 含義 |
---|---|
MAIL_DIR /var/spool/mail | 創建用戶時,系統會在目錄 /var/spool/mail 中創建一個用戶郵箱,比如 lamp 用戶的郵箱是 /var/spool/mail/lamp。 |
PASS_MAX_DAYS 99999 | 密碼有效期,99999 是自 1970 年 1 月 1 日起密碼有效的天數,相當于 273 年,可理解為密碼始終有效。 |
PASS_MIN_DAYS 0 | 表示自上次修改密碼以來,最少隔多少天后用戶才能再次修改密碼,默認值是 0。 |
PASS_MIN_LEN 5 | 指定密碼的最小長度,默認不小于 5 位,但是現在用戶登錄時驗證已經被 PAM 模塊取代,所以這個選項并不生效。 |
PASS_WARN_AGE 7 | 指定在密碼到期前多少天,系統就開始通過用戶密碼即將到期,默認為 7 天。 |
UID_MIN 500 | 指定最小 UID 為 500,也就是說,添加用戶時,默認 UID 從 500 開始。注意,如果手工指定了一個用戶的 UID 是 550,那么下一個創建的用戶的 UID 就會從 551 開始,哪怕 500~549 之間的 UID 沒有使用。 |
UID_MAX 60000 | 指定用戶最大的 UID 為 60000。 |
GID_MIN 500 | 指定最小 GID 為 500,也就是在添加組時,組的 GID 從 500 開始。 |
GID_MAX 60000 | 用戶 GID 最大為 60000。 |
CREATE_HOME yes | 指定在創建用戶時,是否同時創建用戶主目錄,yes 表示創建,no 則不創建,默認是 yes。 |
UMASK 077 | 用戶主目錄的權限默認設置為 077。 |
USERGROUPS_ENAB yes | 指定刪除用戶的時候是否同時刪除用戶組,準備地說,這里指的是刪除用戶的初始組,此項的默認值為 yes。 |
ENCRYPT_METHOD SHA512 | 指定用戶密碼采用的加密規則,默認采用 SHA512,這是新的密碼加密模式,原先的 Linux 只能用 DES 或 MD5 加密。 |
到此,相信大家對“linux系統帳號文件是怎么組成的”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。