1. 程式人生 > >鳥哥的Linux私房菜讀書筆記--Linux賬號與群組

鳥哥的Linux私房菜讀書筆記--Linux賬號與群組

1、使用者的UID和GID

我們在登入Linux主機的時候,輸入的是我們的賬號,但其實Linux主機並不認識賬號名稱,它僅認識ID。由於計算機僅認識0與1,所以主機對數字比較有概念,賬號只是為了便於記憶。賬號與ID對應儲存在/etc/passwd中。對於每一個檔案都具有擁有者和群組屬性,即每個人登入使用至少會取得兩個ID,一個是使用者ID(User ID,簡稱UID),一個是群組ID(Group ID,簡稱GID)檔案是通過UID 和 GID進行判斷擁有者和群組 ,當我們要顯示檔案屬性時,系統依據/etc/passwd與/etc/group的內容,找到UID/GID對應的賬號與組名再顯示出來

2、使用者賬號

linux 上的使用者如果需要登入主機以取得shell的環境來進行工作,必須在計算機前面利用tty1~tty6的終端機提供的login埠,並輸入賬號密碼進行登入。系統執行流程如下

(1)尋找/etc/passwd中是否有賬號,無則跳出,如果有則將該賬號對應的UID與GID讀出來,並將該賬號的家目錄與shell設定也一併讀出。

(2)核對密碼錶

(3)進入shell控管階段

我們應該知道的兩個非常重要的檔案,一個是管理使用者UID/GID重要引數的/etc/passwd,一個是專門管理密碼相關資料的/etc/shadow.

<1>/etc/passwd檔案結構

該檔案的結構是每一行都代表一格賬號,有幾行就代表有幾個賬號在系統中,其中有很多賬號是系統正常運作必須要有的,簡稱為系統賬號,例如bin、daemon、adm、nobody等,切勿隨意刪除。

第一行為root系統管理員使用者,檔案內每一行都使用  :  隔開,總共有七項,分別是:

(1)賬號名稱:需要用來對應UID

(2)密碼:早期的unix系統的密碼是放在這個欄位的,但是由於該檔案可以被所有的程式讀取,導致密碼資料容易被竊取,因此後來將該欄位的密碼資料改放到/etc/shadow中,現在看到的是x

(3)UID:(UID為0時為root)

id 範圍  該 ID 使用者特性
0(系統管理員) 當 UID 是 0 時,代表這個賬號是『系統管理員』! 所以當你要讓其他的賬號名稱也具有 root 的許可權時,將該賬號的 UID 改為 0 即可。 這也就是說,一部系統上面的系統管理員不見得只有 root 喔! 不過,很不建議有多個賬號的 UID 是 0 啦~容易讓系統管理員混亂!
1~999
(系統賬號)
保留給系統使用的 ID,其實除了 0 之外,其他的 UID 許可權與特性並沒有不一樣。預設 1000 以下的數字讓給系統作為保留賬號只是一個習慣。由於系統上面啟動的網路服務或背景服務希望使用較小的許可權去運作,因此不希望使用 root 的身份去執行這些服務, 所以我們就得要提供這些運作中程式的擁有者賬號才行。這些系統賬號通常是不可登入的, 所以才會有我們在第十章提到的/sbin/nologin 這個特殊的 shell 存在。根據系統賬號的由來,通常這類賬號又約略被區分為兩種:
o 1~200:由 distributions 自行建立的系統賬號;
o 201~999:若使用者有系統賬號需求時,可以使用的賬號 UID。
1000~60000
(可登入賬號)
給一般使用者用的。事實上,目前的 linux 核心 (3.10.x 版)已經可以支援到4294967295 (2^32-1) 這麼大的 UID 號喔!

 

(4)GID:該項與/etc/group有關,作用是用來規範組名與GID的對應

(5)使用者資訊說明欄:解釋賬號的意義

(6)家目錄:當用戶登入後會立即進入到該使用者的家目錄中,所以想要將該賬號的家目錄移動到其它的硬碟中去,可以通過修改該欄位的方式進行移動。
(7)shell:當用戶登入系統後悔取得一個shell來與系統的核心溝通以進行使用者的操作任務。預設的shell會使用bash,其就是通過該欄位進行指定的。有一個shell可以用來代替成讓賬號無法取得shell環境的登入動作,那就是/sbin/nologin,也可以用來製作純pop郵箱賬號者的資料。

<2>/etc/shadow檔案結構

shadow以:作為分隔,每行共有9個欄位

(1)賬號名稱:與/etc/passwd想對應

(2)密碼:該欄位內的為密碼,且經過編碼的加密(加密),加密過的密碼很難破解,但是仍然可以破解開,請勿更動該檔案。由於各種密碼的編碼技術不一樣,因此不同的編碼系統會造成該欄位的長度不同。例如,舊式的DES、MD5編碼系統產生的密碼長度與目前慣用的SHA不同。由於固定的編碼系統產生的密碼長度必須一致,因此當該欄位的長度改變後,改密碼就會失效(無法計算),很多軟體都會透過該功能,在此欄位前加上一定的字元讓密碼暫時的失效。

(3)最近更動密碼的日期:17632,linux的日期時間是以1970年1月1日最為1進行累加的,1971年1月1日就是366,由此17362指的就是2017年起之後的160天

(4)命令不可被更動的天數:(與第三欄位進行對比)該欄位記錄該賬號的密碼在最近一筆被更改後需要經過幾天后才可以被更改。

(5)密碼需用重新變更的天數(與第三欄位進行對比)為了強制要求使用者更改密碼,這個欄位可以制定在最近一次更改密碼後,在多少天內需要再次變更密碼,我們必須要在這個天數內重新設定密碼,否則這個賬號將變為過期特性

(6)密碼需要變更前期限前的警告天數(與第五欄位相比)當賬號密碼的有效期快要到的時候,系統會依據該欄位的設定,發出警告給該賬號。

(7)密碼過期後的賬號寬限日(密碼失效日)(與第五欄位相比)密碼有效日期為:更新日期(第三欄位0)+重新變更日期(第五欄位),過期後用戶依舊沒有更新密碼,那該密碼就算過期了,雖然密碼過期,但是該賬號還是可以用來進行其他工作的,包括登入系統bash。不過如果密碼過期了,當你登入系統時,就會強制要求你必須重新設定密碼才可以繼續使用,這就是密碼過期特性,該欄位的功能是在密碼過期幾天後,如果使用者還是沒有登入改密碼,那麼該賬號將會失效,即該賬號再無法使用該密碼登入。注意密碼過期與密碼失效並不相同。

(8)賬號失效日期:與第三欄位的設定方式一樣。該賬號在此欄位規定日期之後,將無法再使用。就是所謂的賬號失效

(9)保留:為以後加入新功能所保留的。

當用戶忘記自己的使用者密碼時

[1]對於一般使用者而言,請系統管理員來解決,他會重新設定新的密碼而不需要知道就密碼。使用root身份下達passwd命令。

[2]root密碼忘記:這個就比較頭大了,我們知道root的密碼在/etc/shadow中,因此我們可以使用各種可行的辦法開機進入到Linux系統中去修改。例如重新啟動進入單人維護模式後,系統會主動給予root許可權的bash介面,此時再使用passwd修改密碼即可,或以Live CD開機後掛載根目錄去修改/etc/shadow,將root密碼欄位清空,重新啟動後root將不用密碼登入,登入後使用passwd指令立即修改新密碼。

由於Linux新舊版本差異較大,如果想知道shadow使用的是哪種加密機制,可以通過下面的方式進行查詢

命令:authconfig --test | grep hashing

3、關於群組:有效與初始群組、groups、mewgrp

<1>/etc/gropu檔案結構

該檔案記錄了GID 與組名的對應關係。檔案中中的每一行代表一個群組,以  :  分隔,共四欄

(1)組名

(2)群組密碼:通常不需要設定,該設定通常是給群組管理員使用的,目前很少有這個機會設定群組管理員了,同樣,密碼已經移動到/etc/gshadow,在該欄位只會存在一個x

(3)GID:群組ID

(4)此群組支援的賬號名稱:一個群組支援多個賬號,我們想讓某個賬號加入到該群組中,只需要將該賬號天填入到該欄位。

注意:在新版的Linux中,初始群組的使用者群已經不會加入到第四個欄位中,例如我們知道root這個主賬號的主要群組為root,從上圖可以看出,root使用者已經不在root群組那一行了。

<2>有效群組(effctive group)與初始群組(initial group)

GID為所謂的初始群組(initial group),當用戶登入系統後,就立刻擁有該群組的相關許可權。上面我們提到的dmtsai使用者的/etc/passwd與/etc/group、/etc/gshadow相關內容如下

dmtsai所屬群組為dmtsai的群組,這就是初始群組,初始群組在使用者登入後就會主動取得,不需要在/etc/group第四欄位寫入該賬號。對於不是初始群組的情況下,必須要將使用者加入該群組的第四欄位中,才可以使用該群組的功能。如果一個使用者所屬多個群組,則其同時擁有多個群組的功能。如果我需要新建一個檔案或目錄,則所屬群組為當時情況下的有效群組。

<3>groups:有效和支援群組的觀察

命令:groups    ##觀察當前使用者所支援的群組。其中第一個輸出的為有效群組

<4>newgrp有效群組的切換

命令:$  newgrp  新的群組    #可以在自己所屬的群組中進行切換,但是無法切換為sshd。該指令是通過另外一個新的shell進行提供的,即dmtsai這個使用者目前是以另一個shell登入的,而新的shell給予dmtsai有效的GID為新的群組。由於獲得一個新的shell,需要使用exit回到原來的shell。

使用者加入群組的方法有兩種(1)透過系統管理員使用usermod加入。(2)透過群組管理員以gpasswd加入。

<5>/etc/gshadow

gshadow的內容:

四個欄位的意義分別為

(1)組名

(2)密碼欄,開頭為!表示無合法密碼,所以無群組管理員

(3)群組管理員的賬號

(4)有加入該群組支援的所屬賬號