Linux用戶和許可權——用戶和用戶組管理 摘要:本文主要介紹了Linux系統中的用戶和用戶組管理。 用戶和用戶組 含義 在使用Linux系統時,雖然輸入的是自己的用戶名和密碼,但其實Linux並不認識用戶名稱,它只認識用戶名對應的ID號(也就是一串數字)。Linux系統將所有用戶的名稱與ID的對應關 ...
Linux用戶和許可權——用戶和用戶組管理
摘要:本文主要介紹了Linux系統中的用戶和用戶組管理。
用戶和用戶組
含義
在使用Linux系統時,雖然輸入的是自己的用戶名和密碼,但其實Linux並不認識用戶名稱,它只認識用戶名對應的ID號(也就是一串數字)。Linux系統將所有用戶的名稱與ID的對應關係都存儲在/etc/passwd文件中。說白了,用戶名並無實際作用,僅是為了方便用戶的記憶而已。
Linux系統中,每個用戶的ID細分為2種,分別是用戶ID(UserID,簡稱UID)和組ID(GroupID,簡稱GID),這與文件有擁有者和擁有群組兩種屬性相對應。
每個文件都有自己的擁有者ID和群組ID,當顯示文件屬性時,系統會根據/etc/passwd和/etc/group文件中的內容,分別找到UID和GID對應的用戶名和群組名,然後顯示出來。
忘記密碼怎麼辦
對於普通賬戶的密碼遺失,可以通過root賬戶解決,它會重新給你配置好指定賬戶的密碼,而不需知道你原有的密碼(利用root的身份使用passwd命令即可)。
如果root賬號的密碼遺失,則需要重新啟動進入單用戶模式,系統會提供root許可權的bash介面,此時可以用passwd命令修改賬戶密碼;也可以通過掛載根目錄,修改/etc/shadow,將賬戶的root密碼清空的方法,此方式可使用root無法密碼即可登陸,建議登陸後使用passwd命令配置root密碼。
保存用戶數據的/etc/passwd文件
Linux系統中的/etc/passwd文件,是系統用戶配置文件,存儲了系統中所有用戶的基本信息,並且所有用戶都可以對此文件執行讀操作。
首先我們來打開這個文件,看看到底包含哪些內容,執行命令如下:
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文件中的內容非常規律,每行記錄對應一個用戶。
這些用戶中的絕大多數是系統或服務正常運行所必需的用戶,這種用戶通常稱為系統用戶或偽用戶。系統用戶無法用來登錄系統,但也不能刪除,因為一旦刪除,依賴這些用戶運行的服務或程式就不能正常執行,會導致系統問題。
不僅如此,每行用戶信息都以“:”作為分隔符,劃分為七個欄位:
1 用戶名:密碼:UID(用戶ID):GID(組ID):描述性信息:主目錄:預設Shell
用戶名
用戶名,就是一串代表用戶身份的字元串,用戶名僅是為了方便用戶記憶,Linux系統是通過UID來識別用戶身份,分配用戶許可權的。/etc/passwd文件中就定義了用戶名和UID之間的對應關係。
密碼
“x”表示此用戶設有密碼,但不是真正的密碼,真正的密碼保存在/etc/shadow文件中,此文件只有root用戶可以瀏覽和操作,這樣就最大限度地保證了密碼的安全。
需要註意的是,雖然“x”並不表示真正的密碼,但也不能刪除,如果刪除了“x”,那麼系統會認為這個用戶沒有密碼,從而導致只輸入用戶名而不用輸入密碼就可以登陸(只能在使用無密碼登錄,遠程是不可以的),除非特殊情況(如破解用戶密碼),這當然是不可行的。
UID
全稱“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了。
GID
全稱“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
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文件
/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文件
/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命令代替。
GID
就是群組的ID號,Linux系統就是通過GID來區分用戶組的,同用戶名一樣,組名也只是為了便於管理員記憶。
這裡的組GID與/etc/passwd文件中第四個欄位的GID相對應,實際上,/etc/passwd文件中使用GID對應的群組名,就是通過此文件對應得到的。
組中的用戶
此欄位列出每個群組包含的所有用戶。需要註意的是,如果該用戶組是這個用戶的初始組,則該用戶不會寫入這個欄位,可以這麼理解,該欄位顯示的用戶都是這個用戶組的附加用戶。
一般情況下,用戶的初始組就是在建立用戶的同時建立的和用戶名相同的組。
保存用戶組密碼的/etc/gshadow文件
前面講過,/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文件中附加組顯示內容相同。