摘要:本文主要介紹了Linux系統中的用戶和用戶組管理。算法
在使用Linux系統時,雖然輸入的是本身的用戶名和密碼,但其實Linux並不認識用戶名稱,它只認識用戶名對應的ID號(也就是一串數字)。Linux系統將全部用戶的名稱與ID的對應關係都存儲在/etc/passwd文件中。說白了,用戶名並沒有實際做用,僅是爲了方便用戶的記憶而已。vim
Linux系統中,每一個用戶的ID細分爲2種,分別是用戶ID(UserID,簡稱UID)和組ID(GroupID,簡稱GID),這與文件有擁有者和擁有羣組兩種屬性相對應。安全
每一個文件都有本身的擁有者ID和羣組ID,當顯示文件屬性時,系統會根據/etc/passwd和/etc/group文件中的內容,分別找到UID和GID對應的用戶名和羣組名,而後顯示出來。bash
對於普通帳戶的密碼遺失,能夠經過root帳戶解決,它會從新給你配置好指定帳戶的密碼,而不需知道你原有的密碼(利用root的身份使用passwd命令便可)。服務器
若是root帳號的密碼遺失,則須要從新啓動進入單用戶模式,系統會提供root權限的bash接口,此時能夠用passwd命令修改帳戶密碼;也能夠經過掛載根目錄,修改/etc/shadow,將帳戶的root密碼清空的方法,此方式可以使用root沒法密碼便可登錄,建議登錄後使用passwd命令配置root密碼。工具
Linux系統中的/etc/passwd文件,是系統用戶配置文件,存儲了系統中全部用戶的基本信息,而且全部用戶均可以對此文件執行讀操做。加密
首先咱們來打開這個文件,看看到底包含哪些內容,執行命令以下:spa
1 [root@localhost ~]# cat /etc/passwd 2 root:x:0:0:root:/root:/bin/bash 3 bin:x:1:1:bin:/bin:/sbin/nologin 4 ... 5 [root@localhost ~]#
能夠看到,/etc/passwd文件中的內容很是規律,每行記錄對應一個用戶。設計
這些用戶中的絕大多數是系統或服務正常運行所必需的用戶,這種用戶一般稱爲系統用戶或僞用戶。系統用戶沒法用來登陸系統,但也不能刪除,由於一旦刪除,依賴這些用戶運行的服務或程序就不能正常執行,會致使系統問題。code
不只如此,每行用戶信息都以「:」做爲分隔符,劃分爲七個字段:
1 用戶名:密碼:UID(用戶ID):GID(組ID):描述性信息:主目錄:默認Shell
用戶名,就是一串表明用戶身份的字符串,用戶名僅是爲了方便用戶記憶,Linux系統是經過UID來識別用戶身份,分配用戶權限的。/etc/passwd文件中就定義了用戶名和UID之間的對應關係。
「x」表示此用戶設有密碼,但不是真正的密碼,真正的密碼保存在/etc/shadow文件中,此文件只有root用戶能夠瀏覽和操做,這樣就最大限度地保證了密碼的安全。
須要注意的是,雖然「x」並不表示真正的密碼,但也不能刪除,若是刪除了「x」,那麼系統會認爲這個用戶沒有密碼,從而致使只輸入用戶名而不用輸入密碼就能夠登錄(只能在使用無密碼登陸,遠程是不能夠的),除非特殊狀況(如破解用戶密碼),這固然是不可行的。
全稱「User ID」,也就是用戶ID。每一個用戶都有惟一的一個UID,Linux系統經過UID來識別不一樣的用戶。
實際上,UID就是一個0~65535之間的數,不一樣範圍的數字表示不一樣的用戶身份:
1)0:超級用戶。UID爲0就表明這個帳號是管理員帳號。在Linux中,只需把其餘用戶的UID修改成0就能夠了,這一點和Windows是不一樣的,不過不建議創建多個管理員帳號。
2)1~499:系統用戶(僞用戶)。也就是說,此範圍的UID保留給系統使用。其中,1~99用於系統自行建立的帳號,100~499分配給有系統帳號需求的用戶。其實,除了0以外,其餘的UID並沒有不一樣,這裏只是默認500如下的數字給系統做爲保留帳戶,只是一個公認的習慣而已。
3)500~65535:普通用戶。一般這些UID已經足夠用戶使用了。但不夠用也不要緊,2.6.x內核以後的Linux系統已經能夠支持232個UID了。
全稱「Group ID」,也就是組ID,表示用戶初始組的組ID號。這裏須要解釋一下初始組和附加組的概念。
初始組,指用戶登錄時就擁有這個用戶組的相關權限。每一個用戶的初始組只能有一個,一般就是將和此用戶的用戶名相同的組名做爲該用戶的初始組。好比說,咱們手工添加用戶sam,在創建用戶sam的同時,就會創建sam組做爲sam用戶的初始組。
附加組,指用戶能夠加入多個其餘的用戶組,並擁有這些組的權限。每一個用戶只能有一個初始組,除初始組外,用戶再加入其餘的用戶組,這些用戶組就是這個用戶的附加組。附加組能夠有多個,並且用戶能夠有這些附加組的權限。
舉例來講,剛剛的sam用戶除屬於初始組sam外,我又把它加入了users組,那麼sam用戶同時屬於sam組和users組,其中sam是初始組,users是附加組。
固然,初始組和附加組的身份是能夠修改的,可是咱們在工做中不修改初始組,只修改附加組,由於修改了初始組有時會讓管理員邏輯混亂。
須要注意的是,在/etc/passwd文件的第四個字段中看到的ID是這個用戶的初始組。
這個字段並無什麼重要的用途,只是用來解釋這個用戶的意義而已。
也就是用戶登陸後有操做權限的訪問目錄,一般稱爲用戶的主目錄。
例如,root超級管理員帳戶的主目錄爲/root,普通用戶將在/home/目錄下創建和用戶名相同的目錄做爲主目錄,如sam用戶的主目錄就是/home/sam/目錄。
Shell就是Linux的命令解釋器,是用戶和Linux內核之間溝通的橋樑。
咱們知道,用戶登錄Linux系統後,經過使用Linux命令完成操做任務,但系統只認識相似0101的機器語言,這裏就須要使用命令解釋器。也就是說,Shell命令解釋器的功能就是將用戶輸入的命令轉換成系統能夠識別的機器語言。
一般狀況下,Linux系統默認使用的命令解釋器是bash(/bin/bash),固然還有其餘命令解釋器,例如sh、csh等。
在/etc/passwd文件中,你們能夠把這個字段理解爲用戶登陸以後所擁有的權限。若是這裏使用的是bash命令解釋器,就表明這個用戶擁有權限範圍內的全部權限。
sam用戶使用的是bash命令解釋器,那麼這個用戶就可使用普通用戶的全部權限,例如:
1 [root@localhost ~]# vim /etc/passwd 2 sam:x:502:502::/home/sam:/bin/bash
若是sam用戶的Shell命令解釋器是/sbin/nologin,那麼,這個用戶就不能登陸了,由於/sbin/nologin就是禁止登陸的Shell,例如:
1 [root@localhost ~]# vim /etc/passwd 2 sam:x:502:502::/home/sam:/sbin/nologin
/etc/shadow文件,用於存儲Linux系統中用戶的密碼信息,又稱爲「影子文件」。
前面介紹了/etc/passwd文件,因爲該文件容許全部用戶讀取,易致使用戶密碼泄露,所以Linux系統將用戶的密碼信息從/etc/passwd文件中分離出來,並單獨放到了此文件中。
/etc/shadow文件只有root用戶擁有讀權限,其餘用戶沒有任何權限,這樣就保證了用戶密碼的安全性。注意,若是這個文件的權限發生了改變,則須要注意是不是惡意攻擊。
介紹此文件以前,先打開看看,執行以下命令:
1 [root@localhost ~]# cat /etc/shadow 2 root:$6$yZkTv2VHvJfZft5s$XaKB9Jp6cRNEsdFKsYvQlmwmckbhvEDcFN/dDY1MpHLsx2w99Xn5lYvoQbkh6GU/DTx8ewq0xns1CQRbOXU1j/::0:99999:7::: 3 bin:*:16659:0:99999:7::: 4 ... 5 [root@localhost ~]#
同/etc/passwd文件同樣,文件中每行表明一個用戶,一樣使用「:」做爲分隔符,不一樣之處在於,每行用戶信息被劃分爲九個字段。每一個字段的含義以下:
1 用戶名:加密密碼:最後一次修改時間:最小修改時間間隔:密碼有效期:密碼須要變動前的警告天數:密碼過時後的寬限時間:帳號失效時間:保留字段
同/etc/passwd文件的用戶名有相同的含義。
這裏保存的是真正加密的密碼。目前Linux的密碼採用的是SHA512散列加密算法,原來採用的是MD5或DES加密算法。SHA512散列加密算法的加密等級更高,也更加安全。
注意,這串密碼產生的亂碼不能手工修改,若是手工修改,系統將沒法識別密碼,致使密碼失效。
全部僞用戶的密碼都是「!!」或「*」,表明沒有密碼是不能登陸的。固然,新建立的用戶若是不設定密碼,那麼它的密碼項也是「!!」,表明這個用戶沒有密碼,不能登陸。
此字段表示最後一次修改密碼的時間。Linux計算日期的時間是以1970年1月1日做爲1不斷累加獲得的時間。
最小修改間隔時間,也就是說,該字段規定了從第三個字段(最後一次修改密碼的日期)起,多長時間以內不能修改密碼。若是是0,則密碼能夠隨時修改,若是是10,則表明密碼修改後10天以內不能再次修改密碼。
此字段是爲了針對某些人頻繁更改帳戶密碼而設計的。
常常變動密碼是個好習慣,爲了強制要求用戶變動密碼,這個字段能夠指定距離第三個字段(最後一次更改密碼)多長時間內須要再次變動密碼,不然該帳戶密碼進行過時階段。
該字段的默認值爲99999,也就是273年,可認爲是永久生效。若是改成90,則表示密碼被修改90天以後必須再次修改,不然該用戶即將過時。管理服務器時,經過這個字段強制用戶按期修改密碼。
與第5字段相比較,當帳戶密碼有效期快到時,系統會發出警告信息給此帳戶,提醒用戶「再過n天你的密碼就要過時了,請儘快從新設置你的密碼!」。
該字段的默認值是7,也就是說,距離密碼有效期的第7天開始,每次登陸系統都會向該帳戶發出「修改密碼」的警告信息。
也稱爲「口令失效日」,簡單理解就是,在密碼過時後,用戶若是仍是沒有修改密碼,則在此字段規定的寬限天數內,用戶仍是能夠登陸系統的,若是過了寬限天數,系統將再也不讓此帳戶登錄,也不會提示帳戶過時,是徹底禁用。
好比說,此字段規定的寬限天數是10,則表明密碼過時10天后失效;若是是0,則表明密碼過時後當即失效;若是是-1,則表明密碼永遠不會失效。
同第3個字段同樣,使用自1970年1月1日以來的總天數做爲帳戶的失效時間。該字段表示,帳號在此字段規定的時間以外,不論你的密碼是否過時,都將沒法使用。
該字段一般被使用在具備收費服務的系統中。
這個字段目前沒有使用,等待新功能的加入。
/ect/group文件是用戶組配置文件,即用戶組的全部信息都存放在此文件中。此文件是記錄組ID(GID)和組名相對應的文件。
/etc/group文件的內容能夠經過Vim看到:
1 [root@localhost ~]# cat /etc/group 2 root:x:0: 3 bin:x:1: 4 ... 5 [root@localhost ~]#
能夠看到,此文件中每一行各表明一個用戶組。
各用戶組中,仍是以「:」做爲字段之間的分隔符,分爲四個字段,每一個字段對應的含義爲:
1 組名:密碼:GID(組ID):該用戶組中的用戶列表
也就是是用戶組的名稱,有字母或數字構成。同/etc/passwd中的用戶名同樣,組名也不能重複。
和/etc/passwd文件同樣,這裏的「x」僅僅是密碼標識,真正加密後的組密碼默認保存在/etc/gshadow文件中。
用戶設置密碼是爲了驗證用戶的身份,用戶組密碼主要是用來指定組管理員的,因爲系統中的帳號可能會很是多,root用戶可能沒有時間進行用戶的組調整,這時能夠給用戶組指定組管理員,若是有用戶須要加入或退出某用戶組,能夠由該組的組管理員替代root進行管理。可是這項功能目前不多使用,也不多設置組密碼。若是須要賦予某用戶調整某個用戶組的權限,則可使用sudo命令代替。
就是羣組的ID號,Linux系統就是經過GID來區分用戶組的,同用戶名同樣,組名也只是爲了便於管理員記憶。
這裏的組GID與/etc/passwd文件中第四個字段的GID相對應,實際上,/etc/passwd文件中使用GID對應的羣組名,就是經過此文件對應獲得的。
此字段列出每一個羣組包含的全部用戶。須要注意的是,若是該用戶組是這個用戶的初始組,則該用戶不會寫入這個字段,能夠這麼理解,該字段顯示的用戶都是這個用戶組的附加用戶。
通常狀況下,用戶的初始組就是在創建用戶的同時創建的和用戶名相同的組。
前面講過,/etc/passwd文件存儲用戶基本信息,同時考慮到帳戶的安全性,將用戶的密碼信息存放另外一個文件/etc/shadow中。本節要將的/etc/gshadow文件也是如此,組用戶信息存儲在/etc/group文件中,而將組用戶的密碼信息存儲在/etc/gshadow文件中。
首先,咱們藉助Vim命令查看一下此文件中的內容:
1 [root@localhost ~]# cat /etc/gshadow 2 root::: 3 bin::: 4 ... 5 [root@localhost ~]#
文件中,每行表明一個組用戶的密碼信息,各行信息用「:」做爲分隔符分爲四個字段,每一個字段的含義以下:
1 組名:加密密碼:組管理員:組附加用戶列表
同/etc/group文件中的組名相對應。
對於大多數用戶來講,一般不設置組密碼,所以該字段常爲空,但有時爲「!」,指的是該羣組沒有組密碼,也沒有羣組管理員。
從系統管理員的角度來講,該文件最大的功能就是建立羣組管理員。
考慮到Linux系統中帳號太多,而超級管理員root可能比較忙碌,所以當有用戶想要加入某羣組時,root或許不能及時做出迴應。這種狀況下,若是有羣組管理員,那麼他就能將用戶加入本身管理的羣組中,也就免去麻煩root了。
不過,因爲目前有sudo之類的工具,所以羣組管理員的這個功能已經不多使用了。
該字段顯示這個用戶組中有哪些附加用戶,和/etc/group文件中附加組顯示內容相同。