這裡提供了 passwd 指令的使用教學,並且整理了一些常用範例可供參考。

在 Unix/Linux 系統中,passwd 這個指令可以用來變更使用者的密碼,對於一般使用者而言(非 root),執行 passwd 之後,會需要輸入目前現行的密碼,才可以允許密碼的變更;而如果是 root 管理者的話,則可以在不需要現行密碼的情況下,變更任何使用者的密碼(包含 root 自己的密碼)。


以下是 passwd 指令的教學與實用範例。

變更使用者密碼

一般的使用者執行 passwd 即可變更自己的密碼:

passwd

而變更密碼之前,必須先輸入現行密碼:

正在變更 gtwang 的密碼。
(目前的)UNIX 密碼: 
輸入新的 UNIX 密碼: 
再次輸入新的 UNIX 密碼: 
passwd:密碼已成功地變更

如果是 root 管理者的話,可以變更任何使用者的密碼:

sudo passwd gtwang

而且不需要輸入該使用者的現行密碼:

輸入新的 UNIX 密碼: 
再次輸入新的 UNIX 密碼: 
passwd:密碼已成功地變更

如果變更 root 管理者的密碼,就跟一般使用者一樣直接執行 passwd 即可。

顯示密碼狀態資訊

若要顯示密碼的狀態資訊,可以加上 -S 參數:

passwd -S

輸出為:

gtwang P 09/30/2015 0 99999 7 -1

這個輸出包含七個欄位:

  1. 帳號名稱。
  2. 密碼狀態,狀態包含鎖定密碼(L)、無密碼(NP)與可用密碼(P)。
  3. 上次修改密碼的時間。
  4. 密碼最短使用期限(minimum password age),單位為天。
  5. 密碼最長使用期限(maximum password age),單位為天。
  6. 密碼過期前警告期間(password warning period),單位為天。
  7. 密碼過期後可使用的期間(password inactivity period),單位為天。

如果是 root 管理者,則可以查看特定使用者的密碼資訊:

sudo passwd -S gtwang

關於密碼的各種期限問題,可以參考 SHADOW(5) 線上手冊。

顯示所有使用者的密碼狀態資訊

root 管理者可以使用 -aS 參數查閱所有使用者的密碼狀態資訊:

sudo passwd -aS

輸出會類似這樣:

root L 04/30/2015 0 99999 7 -1
daemon L 04/22/2015 0 99999 7 -1
bin L 04/22/2015 0 99999 7 -1
sys L 04/22/2015 0 99999 7 -1
sync L 04/22/2015 0 99999 7 -1
games L 04/22/2015 0 99999 7 -1
man L 04/22/2015 0 99999 7 -1
lp L 04/22/2015 0 99999 7 -1
[略]

移除使用者的密碼

若要移除使用者的密碼,可以使用 -d 參數,並加上使用者的名稱:

sudo passwd -d gtwang

移除使用者的密碼之後,可以檢查一下狀態資訊:

sudo passwd -S gtwang
gtwang NP 09/30/2015 0 99999 7 -1

在密碼被移除之後,該使用者的帳號也會同時被停用,無法登入。

設定密碼為過期狀態

有時候因為某些原因(像是重新設定密碼之後),我們會希望使用者立刻更改自己的密碼,這時候我們可以使用 -e 參數:

sudo passwd -e gtwang
passwd: password expiry information changed.

檢查一下狀態資訊:

sudo passwd -S gtwang
gtwang P 01/01/1970 0 99999 7 -1

這時候如果使用者使用 SSH 登入的話,系統就會強制變更密碼:

ssh gtwang@192.168.0.1
gtwang@192.168.0.1's password: 
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
正在變更 gtwang 的密碼。
(目前的)UNIX 密碼: 
輸入新的 UNIX 密碼: 
再次輸入新的 UNIX 密碼: 
passwd:密碼已成功地變更
Connection to 192.168.0.1 closed.

變更密碼之後,會自動斷線,強迫重新登入。

鎖定使用者密碼

-l 參數可以鎖定使用者的密碼:

sudo passwd -l gtwang

檢查一下狀態資訊:

sudo passwd -S gtwang

輸出為:

gtwang L 09/30/2015 0 99999 7 -1

在鎖定之後,系統會在 /etc/shadow 的密碼欄位之前加上一個驚嘆號(!),類似這樣:

gtwang:!$6$XZkm06BG$WkOtRLFncY3WSuLEXnu1yHYdWw0eJYcD.208K3CuhLEuZKL20IVZRkqrB.z2lNnEBW0bDEJ4wQ.e5gH8BB4EK0:16708:0:99999:7:::

而該使用者在密碼被鎖定的狀態下,無法變更自己的密碼。

如果要解除鎖定,可以使用 -u 參數:

sudo passwd -u gtwang

設定密碼期限相關設定

-n 參數可以設定密碼的最短變更間隔時間(minimum password age),例如:

sudo passwd -n 3 gtwang

這樣設定之後,gtwang 使用者至少每隔三天才能變更一次密碼。如果將密碼的最短變更間隔時間設定為 0,就表示任何時間都可以自由變更密碼。

-x 參數則可以設定密碼的有效期限,例如設定一個密碼可以使用 90 天,讓 gtwang 這個使用者三個月就要換一次密碼:

sudo passwd -x 90 gtwang

-w 參數可以設定密碼過期前警告期間,例如將警告期間設定為 7 天:

sudo passwd -w 7 gtwang

這樣一來在 gtwang 使用者自己的密碼過期之前的一週開始,使用者在登入之後就會顯示密碼即將過期的警告訊息,提醒使用者盡快更改密碼。

當使用者的密碼過期之後,會有一段寬限期(也就是 inactivity period),讓使用者還可以繼續登入使用,而當寬限期過了之後還是沒有變更密碼的話,使用者就會無法登入。我們可以使用 -i 設定設定密碼過期後可使用的期間:

sudo passwd -i 10 gtwang

參考資料:Linux Techi