系統會依據/etc/passwd和/etc/group的內容找到UID/GID對應的賬號與組名顯示出來。
用戶賬號
登錄系統數據賬號密碼后,系統做了什么呢
1、先找/etc/passwd里是否有你輸入的賬號,如果沒有則跳出,如果有將該賬號對應的UID與GID(在/etc/group中)讀出來,另外,該賬號
的主文件夾與shell設置一並讀出來。
2、再來核對密碼表,這時Linux進入etc/shadow里面找出對應的賬號UID,然后核對一下你剛才輸入的密碼與文件中密碼是否相符。
3、如果一切OK的話,進入shell控管階段。
大致情況如此,如果要登錄linux主機,/etc/passwd與/etc/shadow必須讓系統讀取。如果要備份Linux系統賬號的話,那么這兩個文件一定需要備份才行。
/etc/passwd文件結構
- 這個文件每一行代表一個賬號,每一行使用 ";" 分割開,共有七個字段。有幾行代表有幾個賬號在系統中。里面很多賬號是系統正常運行所必須要的,我們稱它為系統賬號。
1、賬號名稱,就是賬號例如root
2、密碼,密碼數據放到/etc/shadow中,這里只會看到一個"x"
3、UID,用戶標識符。UID有幾個限制,需要說明一下:
4、GID,與/etc/group有關。/etc/group與/etc/passwd差不多,只是它是用來規定組名與GID的對應而已。
5、用戶信息說明列,這個字段基本上沒有什么重要用途,只是用來解釋賬號信息。如果你提供使用finger功能,他能提供很多信息。
6、主文件夾,用戶的主文件夾。root的主文件夾在/root中,當root登錄之后,就會立刻到/root目錄里面。如果有個賬號
的使用空間很多,你想將該賬號的主文件夾移動到其他的硬盤去,可以在這個字段進行修改。默認用戶主文件夾在/home/yourlDname。
7、Shell,當用戶登錄系統后會取得一個Shell來與系統內核通信以進行用戶的操作任務。為何默認shell使用bash呢,就是在這個字段指定的。
有一個shell可以用來讓賬號無法取得shell環境的登錄操作。那就是/sbin、nologin。這可以用來制作純pop郵件賬號。
/etc/shadow文件結構
很多程序的運行都與權限有關,而權限與UID/GID有關。因此各程序當然需要讀取/etc/passwd來了解不同賬號的權限。因此/etc/passwd
的權限需設置為-rw-r--r--。處於安全考慮,將密碼移到/etc/shadow這個文件。/etc/shadow文件:
shadow同樣以":"分隔,共有9個字段:
1、賬號名稱,密碼需要與賬號對應。這個文件第一列就是賬號,必須要與/etc/passwd相同才行。
2、密碼,經過編碼的密碼。只會看到有一些特殊字符好於字母。雖然這些吉阿米果的密碼難被解出來,但是不等於“不可能”被解出來。所以
這個文件默認權限是“-rw-------”或者是“-r--------”。
3、最近修改密碼的日期,記錄密碼改動的日期,14126是因為計算Linux日期的時間是以1970年1月1日作為1而累加的。1971年1月1日則為366。
4、密碼不可被改動的天數,記錄了這個賬號的密碼在最近一次被修改后經過幾天才可以仔被更改。如果是0的話,表示棉麻隨時可以改動。這個是為了怕密碼被某些人一改再改而設計的。
5、密碼需要重新更改的天數,為了強制改動密碼,這個字段可以指定最近一次更改密碼后多少天需要再次更改密碼才行。你必須在這個天數內重新設置你的密碼,
否則這個賬號的密碼將會變為過期。
6、密碼需要更改期限前的警告天數,密碼到期之前的多少天內,系統會警告該用戶。
7、密碼過期后的賬號寬限時間(密碼失效日),密碼有效日期 = 更新日期 + 重新更改日期,過了期限后用戶依舊沒有更新密碼那該密碼就算過期了。雖然密碼過期但是該賬戶還是可以
用來進行其他工作的包括登錄系統獲取bash。如果密碼過期了當你登錄系統時,系統會強制要求比必須要重新設置密碼才能登錄繼續使用。這個字段的功能是密碼在過期幾天后,
如果用戶還是沒有登錄更改密碼,那么這個賬號的密碼將會“失效”,該賬號再也無法使用該密碼登錄了。
8、賬號失效日期,這個賬號表示:這個賬號在此字段規定的日期之后,將無法再使用。這就是所謂的“賬號失效”,此時無論你的密碼是否過期,這個賬號
都不再被使用。這個字段會被使用通常應該是在“收費服務”的系統中,你可以規定一個日期讓該賬號不能再被使用。
9、保留
shadow有這樣的重要性,因此不能隨意修改。在某些情況下得要使用各種方法處理這個文件。如果密碼忘記了該怎么辦呢?
一般用戶:請管理員幫忙,利用root身份使用passwd命令來處理即可。
root密碼忘記了:這時無法用root身份登錄。因此需要使用各種可行方法開機進入Linux進行修改。例如重啟系統進入用戶維護模式,系統會主動給與root權限的bash接口,再以passwd修改密碼即可。
用戶組
/etc/group結構
這個文件就是記錄GID與組名的對應。
文件每一代表一個用戶組,以 “:” 作為字段分隔符。共分為四列:
1、用戶組名稱
2、用戶組密碼,通常不用設置,這個設置通常給“用戶組管理員”使用。密碼已經移到/etc/gshadow中,因此這個字段只會顯示“x”。
3、GID,用戶組ID
4、此用戶組支持的賬號名稱,我們知道一個賬號可以加入多個用戶組,賬號想要加入用戶組時,將該賬號填入這個字段即可。
UID/GID與密碼之間的關系如圖:
每個用戶都可以擁有多個支持的用戶組,那么用戶在作業時,到底是以哪個用戶組為准?
有效用戶組與初始用戶組
- 在/etc/passwd第四列的GID就是“初始用戶組”(initial group),即當用戶登錄系統,立刻就擁有這個用戶組的相關
權限的意思。因為是初始用戶組,用戶一登錄就會主動取得,不需要在/etc/group的第四個字段寫入該賬號的。
- 如果是非initial group必須在/etc/group這個文件中將賬號加入用戶組的第四列。
- 如果一個賬號同時屬於多個用戶組,那么賬號同時擁有所有用戶組擁有的權限。如果新建一個文件或是目錄,新建文件屬於哪個組
就要檢查一下當時的有效用戶組了。
有效用戶組查看:groups
查看賬號屬於的用戶組
可以知道dmtsai同時屬於dmsai及users這兩個組,第一個輸出的用戶組即為有效用戶組了。也就是說,所以如果以touch創建一個新文件
那么這個文件的所有者為dmtsai。
有效用戶組的切換:newgrp
想要切換的用戶組必須是你已經屬於的用戶組
這個命令可以更改目前用戶的有效用戶組,是另外以一個shell來提供的,新打開shell被給與新的有效GID。
一個賬號加入不同的用戶組有兩種方式:一個是通過系統管理員用usermod加入,另一種事通過用戶組管理員以gpasswd加入他所管理的用戶組中。
/etc/gshadow
/etc/gshadow內容
同樣是使用 “;” 作為分隔字符。
1、用戶組名
2、密碼列,開頭為!表示無合法密碼,所以無用戶組管理員
3、用戶組管理員的賬號
4、該用戶組所屬賬號。
賬號管理
新增與刪除用戶
useradd
在創建用戶時系統默認會以如下方式實現:
- 在/etc/passwd 創建一行與賬號相關的數據,包括創建UID/GID主文件夾等;
- 在/etc/shadow將此賬號的密碼參數填入,但是尚未有密碼
- 在/etc/group加入一個與賬號名一模一樣的組名
- 在/home下面創建一個與賬號名同名的目錄作為用戶文件夾,且權限為700
- 由於在/etc/shadow內僅會有密碼參數而不會有加密過的密碼,因此我們在創建賬號時,還需要使用“passwd賬號”來給予密碼才算是完成
創建用戶的流程。一般賬號UID應該是500以后,用戶自己創建的系統賬號一般是100以后。
passwd
useradd創建了賬號之后,默認情況下,該賬號是暫時被封鎖的,無法登陸。如何解除封鎖,設置密碼(passwd)就好了
chage
除了使用passwd -S之外,還有更詳細的密碼參數顯示功能 chage
usermod
userdel
刪除用戶相關數據,刪除的數據有:
- 用戶賬號/密碼:/etc/passwd,/etc/shasow
- 用戶組:/etc/group,/etc/gshadow
- 用戶個人數據:/home/username,/var/spool/mail/username