
引言
在Linux系統中,我們常常會看到目錄或檔案的所屬關系:
其中
root root
就是檔案擁有者和群組,root是超管賬号,接下來我們來詳細學習這些賬号相關的概念以及相關指令使用。
歸屬
檔案擁有者
User:Linux是一個多使用者多任務的系統,一個實體機或者虛拟機往往會有很多人同時使用,每個使用者在各自的家目錄進行操作(如部署自己的應用、存儲檔案等),這個時候就需要将這些使用者進行隔離,權限分開。使用者A無權讀寫使用者B的相關目錄,使用者B無權讀寫使用者A的目錄,保證每個人各自的隐私。
群組
Group:多個使用者需要共享相同的東西,歸屬于同一個群組,舉例來說,一個開發團隊,在代碼倉庫中會屬于同一個倉庫位址下,這樣一個團隊的成員可以共享這個倉庫位址下的代碼進行讀寫,而其他開發團隊的成員無權讀寫這個團隊的代碼倉庫。
其他人
Others:其他人這個概念比較好了解,相對于本群組而言,跟其無關的都是其他人。
關系
三種屬性關系
- 管家相當于root使用者,所有幢都可以通路;
- 1幢101、1幢201、1幢301都是User,是使用者,都有各自單獨的家(家目錄);
- 1幢和2幢都是Group,裡面的1幢101、1幢201、1幢301等相當于使用者,在一幢可以共享電梯的使用;
- 對于1幢而言,2幢就是Others,用不了1幢的電梯;
賬号管理
賬号識别碼
對于計算機而言,計算機不會認識賬号昵稱之類的别名,隻會識别二進制(0和1),在Linux中也是同樣的,主機對于賬号隻是識别ID。
登入賬号一般有兩個ID,一個是
使用者ID
(UDI, User ID),存放在
/etc/passwd
中;一個是
群組ID
(GID, Group ID) ,存放在
/etc/group
中。我們可以通過
id user_name
的方式來檢視UID和GID。
檔案或者目錄檢視屬性時,首先會根據
/etc/passwd和/etc/group
的内容,利用UID和GID顯示對應賬号和群組名稱,進而判斷自己的擁有者和群組。
使用者賬号
賬号登入流程
- 在Linux系統中輸入主機ip,賬号和密碼;
- 系統從
中尋找輸入的賬号,若沒有找到,則退出;否則,從/etc/passwd
以及/etc/passwd
将該賬号對應的UID與GID讀取出來,同時也會讀取使用者家目錄及shell設定;/etc/group
- 系統進入
中找到對應賬号與UID,核對輸入密碼;/etc/shadow
- 若賬号和密碼都核對無誤,則進入shell。
/etc/passwd詳解
/etc/passwd是系統使用者配置檔案,這個檔案中存儲了系統中所有使用者的基本資訊。
該檔案是對所有使用者都可讀的:
檔案結構詳解如下:
一共7個字段,每一行中的字段由
:
隔開。第一個一般都是
root
系統管理者賬戶資訊。
- 賬号名稱:登入賬号的名稱,與UID對應。
- 密碼:早期Unix系統密碼放置在改字段中,後因安全問題,放置密碼資料被竊取,改放到
中,是以這邊顯示為/etc/shadow
。x
- UID:賬号的使用者識别碼。
id範圍 | id對應使用者的特性 |
---|---|
0 (系統管理者) | UID=0時,表示該賬号為root權限(系統管理者),普通賬戶的UID改為0即擁有root權限,但不建議修改。 |
1~999(系統賬号) | UID=1~999時,即為系統保留的系統賬号,用于更小的權限去作業系統中的服務。 |
1000~60000(可登陸賬号) | UID=1000~60000時,表示一般使用者的賬号。 |
- GID:該資訊與
相關聯,下面會闡述該目錄内容的結構。/etc/group
- 使用者資訊說明欄:解釋說明作用,一般配合
使用。finger
- 主檔案夾:使用者家目錄,一般
後,會自動為useradd userA
使用者建立userA
使用者家目錄,rott的使用者家目錄在/root下。/home/userA
- shell:使用者登入系統後會取得一個shell與系統核心聯系,進而在系統上進行操作。
/etc/shadow檔案結構
/etc/shadow是用于存儲 Linux 系統中所有使用者對應的密碼資訊,我們也稱為“影子檔案”。
除了root使用者,其他使用者沒有權限通路該檔案。
檔案結構詳解如下:
- 賬号名稱:與
對應,賬号名稱。/etc/passwd
- 密碼:存放加密的密碼。
- 最近更改密碼的累積天數:該字段記錄的是變更密碼的那天日期,從1970年1月1日作為1開始累積,這個累積的天數可以通過代碼進行計算。
其中,
86400
是一天的秒數,
+1
是為了補齊1970年1月1日那天。
- 密碼不可被更改的天數:該字段限制了密碼從最後一次變更後,需要經過多少天才可以進行變更。若為 ,則表示無限制,可以随時更改密碼。
- 密碼需要重新更改的天數:該字段限制了密碼從最後一次變更後,需要經過多少天就應該再次變更。若為
,表示273年,也就是無限制。99999
- 密碼需要更改前警告提示的天數:賬号密碼有效期快到的時候,會提前進行提示警告。
- 密碼失效時間:密碼更新時間(第3字段)+重新變更時間(第5字段)為有效期,過期後,還沒有更新密碼,密碼就會過期。
- 賬号失效日期:類似于第三個字段進行累計失效日期計算,過期後,賬号無法使用。
- 保留:保留字段。
群組
我們在上述的
/etc/passwd
賬号配置檔案中發現有GID字段, 而這個字段是在
/etc/group
相關聯。
/etc/group檔案結構
/etc/group檔案存儲群組相關配置資訊。
- 群組名稱:群組的名稱,與GID對應。
- 群組密碼:群組的密碼,通常給群組管理者使用,一般不設定,密碼不會在此顯示,會在
中顯示,在此隻會顯示/etc/gshadow
。x
- GID:群組的ID,也就是
第四個字段的GID。/etc/passwd
- 群組支援的其他賬号名稱:一個賬号可以加入多個群組,當其他賬戶加入該群組後,會填入到該字段中,逗号隔開。
/etc/gshadow
/etc/gshadow是存放群組的密碼等資訊;
- 群組名稱:對應賬戶的群組名稱;
- 群組密碼:群組的密碼;若開頭為
則表示無合法密碼,無群組管理者;!
- 群組管理者賬号:群組管理者的賬号名稱
- 有加入該群組支援的所屬賬号:群組下所支援的賬号,與
中的保持一緻。/etc/group
cat指令詳解_Linux | 賬号管理及指令使用詳解引言歸屬賬号管理賬号指令
三檔案的關系:/etc/passwd、/etc/shadow、/etc/group
群組分類
群組分為
初始群組
和
有效群組
,初始群組就是
/etc/passwd
中的第四個字段中GID對應的群組;有效群組就是某個使用者userA可以加入到其他群組userB中,這個群組userB對于這個使用者userA來說就是有效群組。
舉例:假設通過
useadd
指令建立了t1和t2使用者,然後通過
usermod
指令将t1使用者加入到t2群組内。
其中
-G
是指定有效群組。
- 我們可以在
中看到t1使用者已加入到t2群組的第四個字段中。/etc/group
- 我們也可以登入t1賬号後,通過
指令檢視所支援的群組groups
第一個t1是有效群組,檢視到建立的檔案的使用者是t1,所屬群組也是t1。
- 我們可以通過
來切換有效群組newgrp
我們可以看到檔案使用者是t1,所屬群組是t2。
賬号指令
useradd
概述
useradd
指令是建立賬号指令。
文法格式
useradd [-u UID] [-g 初始群組] [-G 次要群組] [-mM] [-c 說明欄] [-d 主目錄的絕對路徑] [-s shell] 使用者賬号名
參數詳解
預設配置
-
:建立賬号的初始群組使用GID為100(群組為GROUP=100
);但是CentOS是users
,是以系統會建立一個與賬号一樣的群組給使用者作為初始群組,該系統不會參考100數值。隻有遵守私有群組機制
的系統才會參考該數值。公有群組機制
-
:使用者主檔案夾的基準目錄(basedir,使用者家目錄),使用者的主檔案夾通常就是與賬号同名的目錄,目錄将會拼接在該設定值的目錄後,是以一般使用者家目錄為HOME=/home
格式。/home/user_name
-
:密碼過期後是否會失效,INACTIVE=-1
代表密碼永遠不會失效,若為其他數值-1
,則表示過期n
天後失效。該值對應在n
中的第7個字段。/etc/shadow
-
:賬号失效日期,對應EXPIRE=
中的第8個字段,可以設定賬号在某個日期後是失效,而不管密碼是否失效。預設不設定。/etc/shadow
-
:預設使用的SHELL=/bin/bash
。shell程式檔案名
-
:使用者主檔案夾參考基準目錄,一個建立的賬号對應的使用者家目錄,如SKEL=/etc/skel
這個目錄的各個資料都是從/home/userA
中複制過去,如果在該目錄下建立了/etc/skel
,則後續新增使用者時,主檔案夾中會包含test檔案。如下示例:/etc/skel/test
-
:建立使用者的mailbox,檢視路徑等資訊,可以通過CREATE_MAIL_SPOOL=yes
檢視路徑。如下示例檢視:cat /etc/login.defs
示例
示例1
無參建立:
說明:
- 在
中建立一行與賬号相關的資料,包含了UID、GID、使用者家目錄等資訊;/etc/passwd
- 在
中建立一行與賬号密碼相關的資料,如果沒有指定密碼,則無密碼填入;若需要指定密碼,則需要使用/etc/shadow
指令來指定密碼;passwd user_name
- 在
中建立一行與賬号群組相關的資料,加入一個與賬号名稱一樣的群組名稱;/etc/group
- 在
中建立一行與賬号群組密碼相關的資料,包含群組名稱、群組管理密碼等資訊;/etc/gshadow
- 在
下建立一個與賬号名稱相同的使用者家目錄,用于使用者主檔案夾,且權限為/home
,700(drwx------)
示例2
加參建立:
說明:
-
是指定了賬号的UID,我們可以看到-u
中的第3欄的UID是我們指定的1009;/etc/passwd
-
是指定了初始群組,我們可以看到-g
中的第4欄的GID是群組/etc/passwd
對應的100;因為指定了初始群組,users
中就不會主動建立與賬号同名的群組,是以在/etc/group
和/etc/group
中沒有檢視到u2相關的資料。/etc/gshadow
示例3
系統賬号:
說明:
-
參數代表建立一個系統賬号;-r
-
中的第3欄看到數字為996,符合規定,1000及以後的号為一般賬号,1000之前的号為系統賬号;/etc/passwd
- 由于系統賬号主要用于進行運作系統所需服務的權限設定,是以系統賬号預設沒有建立使用者家目錄。
useradd指令總結
useradd指令執行後,會涉及到以下檔案或目錄的變動:
- 使用者賬号和密碼相關檔案:
。/etc/passwd,/etc/shadow
- 使用者群組和密碼相關檔案:
。/etc/group,/etc/gshadow
- 使用者的主檔案夾(使用者家目錄):
。/home/賬号名稱
passwd指令
概述
passwd
指令是修改賬号密碼的指令。
文法格式
- root或者賬号自己使用:
passwd [--stdin] [賬号名稱]
- root賬号使用:
passwd [-l] [-u] [--stdin] [-S] [-n 天數] [-x 天數] [-w 天數] [-i 日期] 賬号
參數詳解
密碼一般要求
- 密碼不能和賬号同名;
- 密碼盡量不要選字典中的字元;
- 密碼需要超過8個字元;
- 密碼不要使用個人資訊(身份證、手機号、生日等);
- 密碼不要使用簡單的關系式,如1+2=3;
- 密碼計量使用
、大小寫字元
、特殊字元(數字
,$
,_
等)組合。-
示例
示例1
無參更改
我們可以看到,不管是過短、還是過于簡單都會有提示,一直更改到符合密碼規範才會生效。在
/etc/login.defs
中我們可以看到對于密碼的一些要求。
示例2
有參更改,通過
--stdin
參數,從标準輸入讀取令牌(隻有根使用者才能進行此操作)。
示例3
查詢密碼狀态,通過
-S
參數,報告已命名帳号的密碼狀态(隻有根使用者才能進行此操作)
示例4
加解鎖密碼,通過
-l
鎖定,加鎖時,檢視狀态,會出現
LK
狀态,檢視
/etc/shadow
中的第2個密碼欄會發現多了
!!
兩個字元;
-u
解鎖,解鎖後恢複
PS
狀态,且
/etc/shadow
中的第2個密碼欄會去掉
!!
。
chage指令
概念
chage
指令用于展示更詳細的密碼參數資訊。
文法格式
chage [-ldEImMW] 賬号名稱
參數詳解
示例
說明:
-l
參數可以展示出賬号密碼相關的時間資訊。
usermod指令
概念
usermod
指令用于修改賬号相關配置。
文法格式
usermod [-cdegGlsuLU] 賬号名稱
參數詳解
示例
說明:通過
-c
參數添加說明資訊後,我們可以看到
/etc/passwd
中更新說明生效。
userdel指令
概念
userdel
指令用于删除使用者賬号相關資料。主要涉及如下方面:
- 使用者賬号/密碼相關資料:
,/etc/passwd
;/etc/shadow
- 使用者群組相關資料:
,/etc/group
;/etc/gshadow
- 使用者個人檔案資料:
,/home/user_name
等。/var/spool/mail/user_name
該指令要慎用,真的确認要删除賬号及所有資料的時候才使用該指令,否則可以去
/etc/shadow
賬号中的
第8個字段
進行設定為
,就可以使賬号失效,但資料還在。
文法格式
userdel [-r] 賬号名稱
參數詳解
示例
示例1
不删除使用者家目錄
示例2
删除使用者家目錄,使用
-r
參數
groupadd指令
概念
groupadd
指令用于添加群組。
文法格式
groupadd [-g GID] [-r] 群組名稱
參數詳解
示例
說明:要注意的是,不帶
-g
時,群組的GID會從1000以上
最大的GID+1
來建立。
groupmod指令
概念
groupmod
指令類似于
usermod
指令,用于修改群組group的相關配置參數。
文法格式
groupmod [-g 新GID] [-n 新群組名稱] 舊群組名稱
參數詳解
示例
說明:我們可以看到
/etc/group
和
/etc/group
中已經不存在g1了。
groupdel指令
概念
groupdel
指令用于删除群組。需要注意的是,在
/etc/passwd
中被使用為
有效群組
的群組不能被删除。如:
文法格式
groupdel [groupname]
參數詳解
示例
參考
《鳥哥的Linux私房菜》
[每篇微語]
有些人活了一天是一天,有些人活了一天是一瞬間。時間不在于你擁有多少,隻在于你怎樣使用。