Linux 中的 /etc/shadow
這個檔案是用來儲存 Linux 帳號真實密碼與其於相關資訊的地方,其中的內容每一行都對應到 /etc/passwd
中的一個帳號,而不同欄位之間以冒號(:
)分隔,就像這樣:
/etc/passwd
總共有九個欄位,接下來我們說明各個欄位的含義。
1. 登入名稱(login name)
登入時輸入的帳號名稱。
2. 加密的密碼(encrypted password)
經過 crypt 加密過的密碼,如果這裡所儲存的內容不符合 crypt 加密的輸出格式(例如包含 *
或 !
等特殊字元),則此使用者就無法登入。
如果這個欄位內容的第一個字元是驚嘆號(!
),則表示這個密碼目前已經被鎖定,無法登入,而驚嘆號後面剩餘的字串就是被鎖定之前的密碼。
這個欄位可以如果是空的話,則該使用者就可以不用密碼登入系統,但會使用到 /etc/shadow
的應用程式,可以自行決定是否要接受無密碼的狀況。
在自己的系統如果忘記 root 密碼時,就可以用 Linux 安裝光碟開機進到救援模式(或使用現在常見的 Linux Live 光碟),把這個欄位清空,這樣就可以用 root 登入重設密碼。
3. 上次密碼變更日期(date of last password change)
紀錄上一次密碼變更的日期,此數值是從 1970 年 1 月 1 日算起的天數。
如果此欄位的數值為 0,則表示此使用者在下一次登入系統時,必須馬上變更密碼。
如果此欄位是空的,則代表密碼的使用期限與最短變更間隔功能被停用(也就是密碼不會過期,可以一直用,而且可以任意並更密碼)。
4. 密碼最短使用期限(minimum password age)
指定兩次變更密碼最短必須間隔多久,也就是說在變更密碼之後,如果還要在更改一次密碼,就必須再等這麼久,單位為天。
如果此欄位為 0 或是空字串,則代表關閉密碼最短變更間隔的功能。
5. 密碼最長使用期限(maximum password age)
指定一組密碼最久可以使用多久,也就是密碼在變更之後,最多只能使用這麼久,然後就要更改密碼,單位為天。
當密碼過期之後,密碼還是可以使用,但是在下一次登入時,系統就會要求使用者立即變更密碼。
如果此欄位是空的,則代表停用密碼的最長使用期限功能。
若密碼最長使用期限的設定值小於最短使用期限,則此使用者就會不能更改自己的密碼。
6. 密碼過期警告期限(password warning period)
設定在密碼過期前多久,對使用者提出警告訊息,單位為天。
如果此欄位為 0
或是空字串,則代表關閉密碼過期警告的功能。
7. 密碼暫停使用期間(password inactivity period)
設定當密碼過期後,讓使用者還有多久的時間可以登入更改密碼,單位為天。
如果密碼過期之後,又超過這麼久的時間沒有登入更改密碼,則密碼就會被停用,無法登入,這時候就要由系統管理者處理了。
如果這個欄位是空的,就代表此功能被停用。
8. 帳號過期時間(account expiration date)
此帳號過期的時間點,此數值是從 1970 年 1 月 1 日算起的天數。
帳號過期與密碼過期不同,帳號過期是指不管密碼是否有問題都不能登入,而密碼過期則是因為太久沒變更密碼,導致登入時密碼失效而無法登入。
如果這個欄位是空的,就代表此帳號不會過期,可以一直使用。
9. 保留欄位(reserved field)
最後一個欄位目前沒有被使用,作為保留欄位。
在正常的狀況下,/etc/shadow
這個檔案應該是只有 root 可以讀取,
ls -l /etc/shadow
輸出應該會像這樣:
-rw-r----- 1 root shadow 1066 1月 19 10:53 /etc/shadow
所以如果想自己研究這個檔案,必須要有 root 權限。
參考資料:nixCraft、Man page of shadow(5)