寫在前面
作爲一個運維工程師來講,系統下的賬號管理是工作中很重要的一個環節,所以瞭解系統的賬號管理還是非常有必要的。
首先,我們要知道對於Linux系統而言,它並不知道你是誰,它僅識別用戶的ID號,而用戶想要登錄Linux系統,必須取得兩個ID號(uid,gid),用戶的名稱與uid的映射關係就保存在/etc/passwd。用戶想要登錄Linux系統,需要兩種id,UID和GID(組id),在登錄界面,用戶輸入登錄名後一系統首先會判斷passwd文件中是否有該用戶,沒有就跳出,如果有的話就會取出用戶的uid,gid等信息,其中最重要的取出用戶的shell,判斷該shell是否要登錄,若可登錄再去匹配用戶密碼,相匹配成功纔會登錄成功。一個簡單登錄操作背後有着很繁雜的過程。在用戶管理主要有四個配置文件/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow。詳細瞭解這四個文件的配置以及各字段的含義是深入瞭解Linux賬號管理的前提條件。下面筆者寫下自己的瞭解,也許筆者瞭解的並不完善,可使用 man 5 [config_file]命令查看文檔。
/etc/passwd 文件詳解
passwd配置文件每行爲一個賬號記錄使用“:”作爲分隔符分爲七個字段,每個一字段含義分別爲【account:password:UID:GID:GECOS:directory:shell】
account 賬戶名稱。
密碼,在Linux系統發展初期,密碼放在該字段,由於該文件每個用戶都可讀,出於安全方面的考慮,把加密後的密碼存在shadow中。在該使用X作爲密碼佔位符。(可以使用pwunconv/pwconv兩個命令在兩種密碼存儲方式之間進行切換,做完實驗後恢復到當前狀態)。
用戶在系統下的標識符,在Linux系統下用戶可分爲三種:管理員,系統用戶,一般用戶.
通過uid判斷,uid=0時爲管理員:
CentOS6和以前版本,uid在1-500之間,爲系統用戶;CentOS7版本中,uid在1-1000之間,爲系統用戶。 CentOS6和以前版本,uid大於等於500,爲一般用戶;CentOS7版本中,uid大於等於1000,爲一般用戶。
由於系統根據uid識別用戶類型,所以不要輕易改變passwd文件,尤其是管理員用戶。
用戶組id,該ID號用戶和/etc/group文件相關,對應於組名和gid。
用戶的描述信息。
用戶家目錄。
用戶使用的shell類型,當用戶shell爲/sbin/nologin時,用戶不能登錄。
/etc/shadow 文件詳解
在Linux系統早期設計中並沒有shadow文件,賬號密碼存於passwd的第二個字段,因爲很多程序運行需要讀取passwd文件,每個用戶都必須對該文件用有讀權限,雖然密碼已經經過加密,但仍然被暴力破解。所以把密碼通過加密後存於shadow文件中,這樣不僅安全,也方便了用戶口令的管理。下面看看shadow文件的文件結構。
shadow文件與passwd相同,使用“:”進行分割各個字段,shadow文件有9個字段,各字段分別代表【賬號名稱:口令:最近更改口令的日期:口令不可變更的時間:口令需要重新更改的時間:警告更改口令的時間:口令過期後的寬限時間:賬號失效時間:無意義(保留)】
1,賬號名稱。
2,用戶的加密口令,用戶可以使用authconfig--passalgo=[sha256] -- update命令更改口令加密方式。
3,用戶口令最後更改的時間。本時間是從1970年1月1日到更改密碼的天數,1970年1月1日是Linux元年(Linux歷史小知識)。
4,口令不可更改的時間(以第三字段爲基準),如果是0表示口令隨時可被更改,若是n,表示在更改口令後n天內不能更改口令。
5,口令需要更改的時間(以第三字段爲基準),該字段表示在用戶更改口令後n天后需要重新更改口令,否則口令將失效。
6,警告更改口令的時間(以第5字段爲基準),這個字段表示在用戶需要更改口令的時間之前的n天開始提示警告用戶更改口令。
7,口令過期後的寬限時間(以第5字段爲基準),在口令過期後,用戶在這個時間內可以登錄系統,但是必須更改口令才能登錄成功。
8,賬號失效日期,與第三字段相同,從1970開始計算天數,到期後,賬戶將失效,該字段優先級大於口令過期日期,到期後,賬戶不可使用。
9,保留。
/etc/group /etc/gshadow 文件簡述
在瞭解完passwd和shadow配置文件之後,我想對於理解group和gshadow文件已經是什麼難事。這裏就簡述一下兩個文件的文件結構含義。
group配置文件也是每行表示一條記錄,以“:”作爲分隔符,各個字段的含義爲:【group_name:passwd:GID:user_list】
gshadow文件各字段含義如下【group_name:passwd:group_adminster:members】
這裏有兩個值得注意的地方:1,group的用戶列表中默認只保存以該組爲附加組的成員;2,gshadow文件的members字段必須與group的user_list一致。
只有簡單的瞭解了上面的四個配置文件,才能更好的瞭解Linux系統的賬號管理的功能,下面就來講講Linux系統的賬號管理,我把該功能分爲三個部分來講,分別爲用戶管理,口令管理和用戶組管理。
用戶管理
用戶的管理可分爲用戶的新增,更改,刪除。
新增用戶
useradd命令添加少量用戶
useradd(adduser)每次只能添加一個用戶,用於添加少量用戶。在參數未指定時,採取默認方式添加添加用戶,默認創建的用戶參數信息保存於/etc/default/useradd文件中,下面簡單介紹該命令的常用參數。
-b #指定用戶的base_dir ,也就是家目錄的上一級目錄 -u #指定用戶uid -o #不檢查uid的唯一性,使用該參數一般都指定已存在的uid,對於系統而言依舊是一個用戶,只是登錄名不同 -d #指定用戶家目錄 -s #指定用戶的默認shell類型 -c #用戶描述信息 -r #創建系統賬號 -g #指定用戶的主組或者gid(每個用戶必須要有一個主組,在下文會談到) -G #指定用戶的附加組
-D 後面不加參數,輸出創建用戶的默認參數 -D [options] 修改創建用戶的默認參數 |
批量添加用戶
在系統中批量添加用戶有兩種方式:使用newusers命令,腳本批量添加
在使用newusers命令時,後從文件中讀取添加信息,批量添加。文件的格式必須與passwd文件的格式完全相同,冒號分隔,冒號爲英文半角狀態下的符號。
腳本批量依據不同生產環境而言,這裏不再詳陳。
在默認創建用戶參數中有一個/etc/skel的目錄文件,在新增用戶的家目錄下會默認生成該目錄下的所有文件,所以管理員可以把一些所有用戶需要的文件放置在目錄下。
用戶信息修改
修改用戶信息最常用的命令時usermod,該命令的參數與useradd命令參數含義很多都相同,這裏只列出一些常用的與之不同的選項。
-a #和-G選項配合,增加附加組 -L #鎖定用戶,不允許用戶直接登錄(可以使用su登錄),執行該命令後,shadow文件的密碼字段前會增加一個“!”,當然,可以修改shadow文件中的該字段,刪除!或者密碼實現無密碼登錄(不安全)。 -U #解除用戶鎖定,與-L選項相對 -d #修改用戶家目錄,但不創建用戶家目錄 -m #創建用戶家目錄,可配合-d實現用戶家目錄的更改 -l #更改用戶的登錄名 -e #指定用戶過期時間,時間格式爲yyyy-mm-dd -f #指定用戶非活動期限 |
除了使用usermod之外還有一些可以修改用戶某些信息的命令,比如可以使用chfn或者finger命令來更改用戶描述,使用chsh來更改用戶的默認shell等。
刪除用戶
用戶的刪除很簡單,userdel命令。
-f #強制刪除用戶,即使用戶在登錄狀態,也能強制的刪除 -r #刪除用戶的家目錄和郵件目錄 |
在使用userdel命令就像使用rm命令一樣危險,要考慮該用戶是不是有一些文件後期還要用或者正在使用,所以一般使用默認刪除,暫時保留家目錄。
口令管理
用戶的新增,修改,刪除的操作體現在passwd文件的更改,而口令的管理作用的對象就是shadow配置文件。口令的添加也可以逐條添加或者批量添加。
常用命令有passwd命令:
-l #鎖定用戶,與usermod -L 功能類似 -u #解鎖用戶 與usermod -U類似 -e #強制用戶下次登錄修改口令 -n #指定口令的不可變更時間 -x #指定口令的需要更改的時間 -w #指定警告用戶修改口令的時間 -i #指定非活動期限 --stdin #從標準輸入接收用戶口令 eq: echo "linuxpasswd"|passwd --stdin root |
除了passwd之外還有一個chage命令與之類似,想深入瞭解可使用man chage查看。筆者認爲在使用同等功能的命令時,只要熟悉掌握其中一種就好,到深入瞭解之後可以根據具體環境來判斷哪個命令實現更符合自己需求。
除了使用上述兩個命令之外,口令還可以批量添加,使用chapasswd 命令,從賬號和口令文件讀取。該文件有固定格式,每行一個用戶,以login_name:passwd格式保存。
用戶組管理
上面曾提到一個主組和附加組的概念,這裏闡述一下
用戶組可分爲主要組合附加組兩種,對於用戶來講,有且只有一個主要組,也就是說用戶必須屬於一個主要組也只能屬於一個主要組,在用戶默認創建過程中會創建一個與用戶同名的組,且只包含該用戶一個成員,這時這個主要組也稱爲私有組。對於用戶來講,它可以屬於任意多個附加組。屬於某個組的成員,自然繼承了該組的權限。若屬於多個組,對於文件來講,用戶權限是該文件的組權限的累加。
用戶組的管理也可分爲組的新建,更改和刪除和口令管理。常用groupadd,groupmod,groupdel命令管理組。
groupadd #添加組 -g #指定gid -r #創建系統組 CentOS6 gid<500 CentOS7 gid<1000 groupmod #修改組信息 -n #新名字 -g #新的gid groupdel #刪除組 #在刪除組的過程中若有用戶以該組爲主要組會刪除失敗 |
用戶組的口令管理使用gpasswd命令
gpasswd -a user #添加某用戶到到指定組中 -d user #從指定組中刪除指定用戶 -A user1,user2.. #添加管理員列表以逗號分隔 |
除了上述幾個組管理命令外groupmems也可對用戶組進行管理,這裏不再詳述,讀者可自行查閱相關文檔
在用戶組的管理中有時需要臨時切換主組,這時會使用newgrp命令,如果用戶不在該組中則主要密碼,該命令只是臨時生效,所有也叫當前有效組的切換。不寫入配置文件。在切換後做的操作會永久作用於當前有效組。
雜項
在用戶賬號管理中有一些經常使用的命令,比如id和su命令
id -u #顯示uid -g #顯示gid -G #所有組的gid -n #顯示名稱,配合上述三個選項 su [-] user - # 完全切換,等同於用戶登錄 #不加“-”號,不完全切換,不改變當前工作目錄,不讀取用戶配置文件信息。 vipw # ==vim /etc/passwd vigr # ==vim /etc/groups pwck # 檢查passwd, grpck # 檢查grpck 這兩個命令可以在批量用戶是否有格式錯誤 |