一、Linux中的用戶和組賬號概述
與Windows操作系統相比,Linux系統中的用戶和組賬號的作用本質上是一樣的,同樣都是基於用戶身份來控制對資源的訪問,只不過在表現形式及個別細節方面存在些許差異。下面將給大家介紹Linux系統中用戶賬號和組賬號的相關概念。
1、用戶賬號
在Linux系統中,根據系統管理的需要將用戶賬號分爲不同的類型,其擁有的權限、擔任的角色也各不相同。主要包括超級用戶、普通用戶和程序用戶。
【超級用戶】:root用戶是Linux系統中默認的超級用戶賬號,對本主機擁有至高無上的完全權限,類似於Windows系統中的Administrator用戶。只有當進行系統管理、維護任務時,才建議使用root用戶登錄系統,日常事務處理建議使用普通用戶賬號進行。
【普通用戶】:普通用戶賬號需要由root用戶或其他管理員用戶創建,擁有的權限受到一定限制,一般只在用戶自己的宿主目錄中有完全權限。
【程序用戶】:在安裝Linux系統及部分應用程序時,會添加一些特定的低權限用戶賬號,這些用戶一般不允許登錄到系統,而僅用於維持系統或某個程序的正常運行。例如:bin、daemon、ftp、mail等。
2、組賬號
基於某種特定聯繫將多個用戶集合在一起,即構成一個用戶組,用於表示該組內所有用戶的賬號稱爲組賬號。每一個用戶賬號至少屬於一個組,這個組稱爲該用戶的基本組(或私有組);如果該用戶同時還包括在其他的組中,則這些組稱爲該用戶的附加組(或公共組)。
例如,用戶gaoke是總經辦的員工,與部門內的其他同事同屬於基本組zongjingban,後來因工作安排需要,公司將gaoke加入到信息中心組mis。則此時用戶gaoke同時屬於zongjingban、mis組,zongjingban組是其基本組賬號,而mis組是其附加組賬號。
最組賬號設置的權限,將適用於組內的每一個用戶賬號。
3、UID和GID號
Linux系統中的每一個用戶賬號都有一個數字形式的身份標記,稱爲UID,對於系統核心來說,UID作爲區分用戶的基本依據,原則上每個用戶的UID號應該是唯一的。root用戶賬號的UID號爲固定值0.而程序用戶賬號的UID號默認在1-499之間,500-60000的UID號默認分配給普通用戶賬號使用。
與UID相類似,每一個組賬號也有一個數字形式的身份標記,稱爲GID。root組賬號的GID號爲固定值0,而程序組賬號的GID號默認在1-499之間,普通組賬號使用的UID號默認爲500-60000.
普通用戶、組賬號使用的默認UID、GID號範圍定義在配置文件“/etc/login.defs”中。
【例1】:查看“/etc/login.defs”配置文件中定義的默認UID、GID號範圍。
650) this.width=650;" title="QQ截圖20130715101844.jpg" src="http://img1.51cto.com/attachment/201307/160039948.jpg" orgsrc="http://img1.51cto.com/attachment/201307/160039948.jpg" />
二、Linux中的用戶賬號管理
Linux系統中的用戶賬號、密碼等信息均保存在相應的配置文件中,直接修改這些文件或者使用用戶管理命令都可以對用戶賬號進行管理。
1、用戶賬號文件
與用戶賬號相關的配置文件主要有兩個,分別是/etc/passwd、/etc/shadow。前者用於保存用戶名稱、宿主目錄、登錄Shell等基本信息,後者用於保存用戶的密碼、賬號有效期等信息。在這連個配置文件中,每一行對應一個用戶賬號,不用的配置項之間使用冒號“:”進行分隔。
【passwd文件中的配置行格式】:
系統中所有用戶的賬號基本信息都保存在“/etc/passwd”文件中,該文件時文本文件,任何用戶都可以讀取文件中的內容。
【例2】:查看“/etc/passwd”文件中的前兩行、後兩行的內容。
650) this.width=650;" title="QQ截圖20130715161359.jpg" src="http://img1.51cto.com/attachment/201307/161418955.jpg" orgsrc="http://img1.51cto.com/attachment/201307/161418955.jpg" />
在passwd文件開頭的部分,包括超級用戶root及各程序用戶的賬號信息,系統中新增加的用戶賬號信息將保存到passwd文件的末尾。passwd文件的每一行內容中,包括了七個用冒號“:”分隔的配置字段,從左到右各配置字段的含義分別如下所述。
第一字段:用戶賬號的名稱。
第二字段:經過加密的用戶密碼字串,或者密碼佔位符“x”。
第三字段:用戶賬號的UID號。
第四字段:所屬基本組賬號的GID號。
第五字段:用戶全名,可填寫與用戶相關的說明信息。
第六字段:宿主目錄,即該用戶登錄後所在的默認工作目錄。
第七字段:登錄Shell等信息,用戶完成登錄後使用的Shell。
基於系統運行和管理需要,所有用戶都可以訪問passwd文件中的內容,但是隻有root用戶才能進行更改。在早期的UNIX操作系統中,用戶賬號的密碼信息也是保存在passwd文件中的,不法用戶可以獲取密碼字串進行暴力破解,這樣一來賬號安全就存在一定的隱患。因此後來將密碼轉存入專門的shadow文件中,而passwd文件中僅保留密碼佔位符“x”。
【shadow文件中的配置行格式】
shadow文件又被稱爲“影子文件”,其中保存有各用戶賬號的密碼信息,因此對shadow文件的訪問應該進行嚴格限制。默認只有root用戶能夠讀取文件中的內容,而不允許直接編輯該文件中的內容。
【例3】:查看“/etc/shadow”文件中的前兩行、後兩行內容。
650) this.width=650;" title="QQ截圖20130715170042.jpg" src="http://img1.51cto.com/attachment/201307/170106182.jpg" orgsrc="http://img1.51cto.com/attachment/201307/170106182.jpg" />
shadow文件的每一行內容中,包含了九個用冒號“:”分隔的配置字段,從左到右各配置字段的含義分別如下所述。
第一字段:用戶賬號名稱。
第二字段:使用MD5加密的密碼字串信息,當爲“*”或“!!”時表示此用戶不能登錄到系統。若該字段內容爲空,則該用戶無需密碼即可登錄系統。
第三字段:上次修改密碼的時間,表示從1970年01月01日算起到最近一次修改密碼時間隔的天數。
第四字段:密碼的最短有效天數,自本次修改密碼後,必須至少經過該天數才能再次修改密碼。默認值爲0,表示不進行限制。
第五字段:密碼的最長有效天數,自本次修改密碼後,經過該天數以後必須再次修改密碼。默認值爲99999,表示不進行限制。
第六字段:提前多少天警告用戶口令將過期,默認值爲7.
第七字段:在密碼過期之後多少天內禁用此用戶。
第八字段:賬號失效時間,此字段指定了用戶作廢的天數(從1970年1月1日起計算),默認值爲空,表示賬號永久可用。
第九字段:保留字段,目前沒有特定用途。
2、useradd命令------添加用戶賬號
useradd命令可以用於添加用戶賬號,其基本的命令格式如下所示。
useradd [選項] 用戶名
最簡單的用法是,不添加任何選項,只使用用戶名作爲useradd命令的參數,按系統默認配置建立指定的用戶賬號。在CentOS5系統中,useradd命令在添加用戶賬號的過程中主要完成以下幾項任務。
a、在“/etc/passwd”文件和“/etc/shadow”文件的末尾增加該用戶賬號的記錄。
b、若未明確指定用戶的宿主目錄,則在“/home”目錄下自動創建與該用戶賬號同名的宿主目錄,並在該目錄中建立用戶的初始配置文件。
c、若沒有明確指定用戶所屬的組,則自動創建與該用戶賬號同名的基本組賬號,組賬號的記錄信息將保存到“/etc/group”、“/etc/gshadow”文件中。
【例4】:創建名爲test01的用戶賬號,查看passwd、shadow文件中的變化,並確認該用戶宿主目錄中的初始配置文件。
650) this.width=650;" title="QQ截圖20130715181420.jpg" src="http://img1.51cto.com/attachment/201307/181438729.jpg" orgsrc="http://img1.51cto.com/attachment/201307/181438729.jpg" />
如果結合useradd命令的各種選項,可以在添加用戶賬號的同時對UID號、宿主目錄、登錄Shell等相關屬性進行指定。以下列出了useradd命令中用於設置賬號屬性的幾個常見選項。
-u:指定用戶的UID號,要求該UID號碼未被其他用戶使用。
-d:指定用戶的宿主目錄位置。
-e:指定用戶的賬戶失效時間,可使用YYYY-MM-DD的日期格式。
-g:指定用戶的基本組名(或使用GID號)。
-G:指定用戶的附加組名(或使用GID號)。
-M:不建立使用者目錄,即使/etc/login.defs系統檔設定要建立使用者目錄。
-s:指定用戶的登錄Shell。
【例5】:創建名爲test02的用戶賬號,並將其UID號指定爲504.
#useradd -u 504 test02
【例6】創建一個輔助管理員賬號admin,將其基本組指定爲“wheel”、附加組指定爲“root”,宿主目錄指定爲“/admin”。
650) this.width=650;" title="QQ截圖20130715183005.jpg" src="http://img1.51cto.com/attachment/201307/183022259.jpg" orgsrc="http://img1.51cto.com/attachment/201307/183022259.jpg" />
【例7】:創建一個考試測試用的賬號exam01,指定屬於users組,該賬號於2009-07-30失效。
#useradd -g users -e 2009-07-30 exam01
【例8】:創建用於FTP訪問的用戶賬號ftpuser,將登陸Shell指定爲“/sbin/nologin”(禁止登陸),且不爲其創建宿主目錄。
#useradd -M -s /sbin/nologin ftpuser
在Linux系統中,實際上大部分的程序用戶都是被禁止登陸到系統的。
650) this.width=650;" title="QQ截圖20130715183811.jpg" src="http://img1.51cto.com/attachment/201307/183827789.jpg" orgsrc="http://img1.51cto.com/attachment/201307/183827789.jpg" />
3、passwd命令------爲用戶賬號設置密碼
通過useradd命令新添加的用戶賬號,還必須爲其設置一個密碼才能用來登陸Linux系統。root用戶可以指定賬號名稱作爲參數,對指定賬號的密碼進行管理。
【例9】:指定用戶名test01作爲參數,爲該用戶設置一個登陸密碼,重複輸入兩次進行確認,並查看shadow文件中該用戶的密碼字串信息。
650) this.width=650;" title="QQ截圖20130715184522.jpg" src="http://img1.51cto.com/attachment/201307/184541308.jpg" orgsrc="http://img1.51cto.com/attachment/201307/184541308.jpg" />
用戶賬號具有可用的登錄密碼以後,就可以從字符終端進行登錄了。雖然root用戶可以指定用戶名作爲參數,對指定賬號的密碼進行管理,但是普通用戶卻只能執行單獨的“passwd”命令修改自己的密碼。
普通用戶設置自己的密碼時,密碼要求有一定的複雜性,否則系統可能拒絕進行設置。
【例10】:使用用戶賬號test01登錄終端後,及時更改本賬號的登錄密碼,需要原密碼進行驗證。
650) this.width=650;" title="QQ截圖20130715185615.jpg" src="http://img1.51cto.com/attachment/201307/185636525.jpg" orgsrc="http://img1.51cto.com/attachment/201307/185636525.jpg" />
使用passwd命令除了可以修改賬號的密碼以外,還能夠對用戶賬號進行鎖定、解鎖,或者也可以將用戶的密碼設置爲空(無需密碼即可登錄)。相關的幾個選項如下:
-d:清空指定用戶的密碼,僅使用用戶名即可登錄系統。
-l:鎖定用戶賬戶。
-S:查看用戶賬戶的狀態(是否被鎖定)。
-u:解鎖用戶賬戶。
【例11】:將用戶賬號test01的密碼予以鎖定,查看shadow文件中的變化(密碼串前多了一個“!!”號)並檢查用戶密碼狀態。解除對用戶test01的鎖定,再次檢查用戶密碼狀態。
650) this.width=650;" title="QQ截圖20130715190430.jpg" src="http://img1.51cto.com/attachment/201307/190446227.jpg" orgsrc="http://img1.51cto.com/attachment/201307/190446227.jpg" />
4、usermod命令------修改用戶賬號屬性
對於系統中已經存在的用戶賬號,可以使用usermod命令重新設置各種屬性。usermod命令同樣需要指定賬號名稱作爲參數。較常使用的幾個選項如下所述:
-u:修改用戶的UID號。
-d:修改用戶的宿主目錄位置。
-e:修改用戶的賬戶失效時間。
-g:修改用戶的基本組名。
-G:修改用戶的附加組名。
-M:不爲用戶建立並初始化宿主目錄。
-s:指定用戶的登錄Shell。
-l:更改用戶賬號的登錄名稱。
-L:鎖定用戶賬戶。
-U:解鎖用戶賬戶。
使用usermod命令時,其大部分的選項與useradd命令的選項是相對應的,作用也相似。除此以外,還有兩個選項“-U”、“-L”,分別用於解鎖、鎖定用戶賬號。這連個選項與passwd命令的“-l”、“-u”選項作用基本相同,只不過大小寫存在區別。
【例12】:將admin用戶的宿主目錄移動至/home目錄下,並使用usermod命令做相應調整。
650) this.width=650;" title="QQ截圖20130715191651.jpg" src="http://img1.51cto.com/attachment/201307/191811726.jpg" orgsrc="http://img1.51cto.com/attachment/201307/191811726.jpg" />
【例13】:使用usermod命令鎖定用戶賬號test01,確認狀態後解除其鎖定。
650) this.width=650;" title="QQ截圖20130715192033.jpg" src="http://img1.51cto.com/attachment/201307/192055171.jpg" orgsrc="http://img1.51cto.com/attachment/201307/192055171.jpg" />
【例14】:將用戶賬號的登錄名稱admin更改爲webmaster,下次登錄時生效。
650) this.width=650;" title="QQ截圖20130715192252.jpg" src="http://img1.51cto.com/attachment/201307/192307573.jpg" orgsrc="http://img1.51cto.com/attachment/201307/192307573.jpg" />
5、userdel命令------刪除用戶賬號
當系統中的某個用戶賬號已經不再需要使用時,可以使用userdel命令將該用戶賬號刪除。使用該命令也需要指定賬號名稱作爲參數。添加“-r”選項時可以將該用戶的宿主目錄一併刪除。
【例15】:刪除系統中的用戶賬號test01,但是保留其宿主目錄。
650) this.width=650;" title="QQ截圖20130715192835.jpg" src="http://img1.51cto.com/attachment/201307/192852850.jpg" orgsrc="http://img1.51cto.com/attachment/201307/192852850.jpg" />
【例16】:刪除系統中的用戶賬號test02,同時刪除其宿主目錄。
650) this.width=650;" title="QQ截圖20130715193027.jpg" src="http://img1.51cto.com/attachment/201307/193043845.jpg" orgsrc="http://img1.51cto.com/attachment/201307/193043845.jpg" />
6、用戶賬號的初始配置文件
在Linux系統中添加用戶賬號後,useradd命令會在該用戶的宿主目錄中建立一些初始配置文件。這些文件來自於賬號模板目錄“/etc/skel”,基本上都是隱藏文件,較常用的初始配置文件包括“.bash_logout”、“.bash_profile”、“.bashrc”。
其中,“.bashrc_profile”文件中的命令將在該用戶每次登陸時被執行;“.bashrc”文件中的命令會在每次加載“/bin/Bash”程序時(當然也包括登陸系統)被執行;而“.bash_logout”文件中的命令將在用戶每次退出登陸時被執行。理解這些文件的作用,便於我們安排一些自動運行的後臺管理任務。
如果希望爲所有用戶添加登錄後自動運行的命令程序、自動設置變量等,可以直接修改“/etc”目錄下的類似文件,如“/etc/bashrc”、“/etc/profile”文件。