Linux 中的 /etc/shadow 這個檔案是用來儲存 Linux 帳號真實密碼與其於相關資訊的地方,其中的內容每一行都對應到 /etc/passwd 中的一個帳號,而不同欄位之間以冒號(:)分隔,就像這樣:

linux-shadow-file

/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)