詳細解析/etc/shadow檔案尤其是加密密碼欄位
/etc/shadow,是 Linux系統中的重要系統檔案,用於儲存加密的使用者密碼,並且只有系統管理員 root 使用者可以訪問,防止未經授權的使用者檢視或者修改該檔案。每一行對應每個使用者(包括系統使用者)的使用者密碼資訊。
# cat /etc/shadow
root:$6$pMbKgN..OICeIjTJ$oLxZ3Y5luz8BqF4pYrQn0IrQhOZ7mcyMo69/.VTbhZqmCaJcPxjIW.Y5nPoKCa0vmrS9b0zMp8ElLSiQ6eqAA.::0:99999:7:::
該檔案的每一行包含 9 個欄位,以冒號 (“:”) 分隔,下面逐一解釋每個欄位:
使用者名稱
該使用者名稱必須是系統上存在的有效的使用者名稱。
加密密碼
如果該密碼欄位包含一些非法的字元或者字串,例如!或 *,這將導致該密碼失效,也就是該使用者將無法使用 密碼登入。
此欄位可能為空,在這種情況下,無需密碼即可作為指定的使用者進行身份驗證。然而,一些應用程式 如果密碼欄位為空,讀取 /etc/shadow 檔案可能決定根本不允許任何訪問。
如果用感嘆號!開頭的密碼欄位表示密碼已鎖定。該使用者將不能登入。行中剩餘的字元代表密碼被鎖定之前的密碼欄位。
如果 salt 是一個以字元“$id$”開頭的字串,後跟一個以“$”結尾的字串, 然後不使用 DES ,id 標識使用的加密方法,然後確定如何解釋密碼字串的其餘部分:
$id$salt$encrypted
$id可能為:
1 MD5
2a Blowfish
5 SHA-256
6 SHA-512
所以,比如 $5$salt$encrypted 是一個 SHA-256 編碼的密碼,而 $6$salt$encrypted 是一個 SHA-512 編碼的密碼。
"salt" 代表 salt 中 "$id$" 後面最多 16 個字元。 密碼字串的加密部分是實際計算的密碼, 這個字串的大小是固定的:
MD5 22 個字元
SHA-256 43 個字元
SHA-512 86 個字元
上次更改密碼的日期
需要注意的是該日期為自 1970 年 1 月 1 日 00:00 UTC 以來的天數。
值 0 具有特殊含義,即使用者下次登入系統時應更改密碼。
空欄位表示禁用密碼老化功能。
最短密碼使用期限
密碼最短使用期限是使用者在被允許再次更改密碼之前必須等待的天數。
空欄位和值 0 表示沒有最短密碼期限。
最大密碼期限
密碼最長使用期限是使用者必須更改密碼的天數。經過此天數後,密碼可能仍然有效。下次登入時應要求使用者更改密碼。
空欄位表示沒有密碼最長使用期限、密碼警告期限和密碼不活動期限。
如果密碼最長使用期限小於密碼最短使用期限,則使用者無法更改其密碼。
密碼警告期
密碼到期前的天數(請參閱上面的最大密碼使用期限),在此期間應警告使用者。
空欄位和值為 0 表示沒有密碼警告期。
密碼不活動期
密碼過期後的天數(請參閱上面的最長密碼使用期限),在此期間密碼仍應被接受(以及 使用者應在下次登入時更新她的密碼)。
密碼到期且該有效期已過後,使用者將無法登入。
空欄位表示不執行不活動期。
賬戶到期日
帳戶的到期日期,表示為自 1970 年 1 月 1 日 00:00 UTC 以來的天數。請注意,帳戶到期與密碼到期不同。賬戶到期時,使用者將無法登入。 如果密碼過期,則不允許使用者使用她的密碼登入。
空欄位表示該帳戶永不過期。
不應使用值 0,因為它被解釋為沒有到期的帳戶或 1970 年 1 月 1 日到期的帳戶。
保留欄位
該欄位保留供將來使用。