有時我們連接遠程服務器的時候,提示密碼過期,需要修改密碼才能登錄,這時可以用chage命令來調整下用戶密碼的有效期,使用戶可以繼續使用。
chage命令
chage命令用於查看以及修改用戶密碼的有效期信息,它是 change age 的縮寫。當需要用戶在指定時間內登錄或者需要及時修改密碼的時候可以使用此命令,通過此命令,我們可以查看帳號的各種信息,比如:最新一次修改密碼日期、設置密碼修改時間、在指定時間后鎖定帳號。
我們可以通過 -h 選項查看chage的幫助信息
[root@ecs-centos-7 wl]# chage -h
Usage: chage [options] LOGIN
Options:
-d, --lastday LAST_DAY set date of last password change to LAST_DAY
-E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-h, --help display this help message and exit
-I, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-l, --list show account aging information
-m, --mindays MIN_DAYS set minimum number of days before password
change to MIN_DAYS
-M, --maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS
-R, --root CHROOT_DIR directory to chroot into
-W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
選項說明
-l : 列出用戶密碼老化信息
-d : 設置最近一次修改密碼的時間
-m : 設置密碼修改的最小間隔時間(單位:天)
小於這個天數時將不允許修改密碼
-W : 密碼過期前幾天開始警告
-M 選項
說明: 設置密碼的最長有效期,單位:天。密碼實際有效期是用最近一次修改密碼的日期加上這里設置的最長天數,當最長有效期設置大於等於10000時是永久有效。
例如,用戶密碼最近修改時間是 2020-06-23,密碼最長有效期是 2 天,則密碼的過期時間是 2020-06-25 23:59:59。如果設置密碼最長有效期是 10000 天,則密碼是 永久有效的。
-I 選項
說明: 密碼過期之后的失效時間,以天為單位,密碼過期日期加上這里設置的失效天數,結果表示密碼失效的日期,也就是過了這個日期登陸,會強制要求修改密碼,具體的密碼失效提示如下:
You are required to change your password immediately (password aged)
Last login: Wed Jun 24 01:06:34 2020 from 27.27.27.27
Welcome to Huawei Cloud Service
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user wl.
Changing password for wl.
(current) UNIX password:
如果只是過了密碼有效期,但是沒有過密碼過期之后的失效日期,登陸的時候不會強制要求修改密碼,只會有一個密碼過期的警告,具體提示如下:
Warning: your password will expire in 0 days
Last login: Wed Jun 24 01:17:01 2020 from 27.27.27.27
Welcome to Huawei Cloud Service
[wl@ecs-centos-7 ~]$
上面有兩個概念比較容易混淆,一個是 密碼過期,一個是密碼失效。設置的密碼經過一段時間,過了密碼的最大有效期,系統將密碼設置為過期狀態,用戶登陸的時候,會提示用戶修改密碼,又經過了一段時間,如果用戶沒有修改密碼,系統將密碼設置為失效狀態,此時用戶無法通過此密碼登陸
由於密碼過期之后的失效日期是跟密碼最大有效期相關聯的,如果密碼最大有效期設置為永不過期的話 (即 chage -M 10000 user), 則當前 密碼過期之后的失效日期 統一變為 永久有效的
當密碼最大有效期 重新修改回指定天數時(不是永久有效),密碼過期之后的失效日期 又重新變成 當前密碼最大有效期 加上 當前密碼過期之后的失效天數了。我們假設密碼過期失效天數1天 ( 即 chage -I 1 wl ),下面以實例來說明這一點
[root@ecs-centos-7 ~]# chage -l wl
Last password change : Jun 23, 2020
Password expires : Nov 08, 2047
Password inactive : Nov 09, 2047
Account expires : never
Minimum number of days between password change : 1
Maximum number of days between password change : 9999
Number of days of warning before password expires : 7
在上面的例子中,用戶 wl 的密碼有效日期是 2047-11-08,密碼過期之后失效天數設置為 1 天,那么密碼過期之后失效日期是 2047-11-09,現在執行 chage -M 10000 wl 命令把 用戶 wl 的密碼有效日期調整為永久有效,命令結果如下:
[root@ecs-centos-7 ~]# chage -M 10000 wl
[root@ecs-centos-7 ~]# chage -l wl
Last password change : Jun 23, 2020
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 1
Maximum number of days between password change : 10000
Number of days of warning before password expires : 7
可以看到,把密碼最大有效日期設置為永久有效之后,密碼過期之后失效日期也變為永久有效的了。執行 chage -M 9999 wl 命令 把用戶 wl 密碼的有效天數重新修改為 9999 天,命令結果如下:
[root@ecs-centos-7 ~]# chage -M 9999 wl
[root@ecs-centos-7 ~]# chage -l wl
Last password change : Jun 23, 2020
Password expires : Nov 08, 2047
Password inactive : Nov 09, 2047
Account expires : never
Minimum number of days between password change : 1
Maximum number of days between password change : 9999
Number of days of warning before password expires : 7
修改了密碼最大有效天數之后,密碼有效日期變成了 2047-11-08,密碼過期之后失效日期變成了 2047-11-09 ,可以看到,密碼過期之后的失效日期是隨着密碼有效日期改變而變化的。
-E 選項
說明: 設置賬號過期時間,參數為具體的日期,賬號過期之后就無法登陸了。
示例:以下是設置用戶 wl 過期時間為 2020-06-23,當前時間為 2020-06-24
[root@ecs-centos-7 ~]# chage -E 2020-06-23 wl
[root@ecs-centos-7 ~]# chage -l wl
Last password change : Jun 23, 2020
Password expires : Jun 23, 2020
Password inactive : Jun 24, 2020
Account expires : Jun 23, 2020
Minimum number of days between password change : 1
Maximum number of days between password change : 0
Number of days of warning before password expires : 7
賬號 wl 已經過期了, 再次登陸的時候會提示以下信息:
Your account has expired; please contact your system administrator
新用戶自動指定密碼有效期
/etc/login.defs 配置文件中有以下幾個關於密碼老化的控制參數
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 1 #密碼有效期
PASS_MIN_DAYS 0 #密碼修改的最小間隔天數
PASS_MIN_LEN 5 #可接受的最小密碼長度
PASS_WARN_AGE 7 #密碼過期之前多少天警告提示
示例:假如當前時間是 2020-06-24,我們修改 PASS_MAX_DAYS 為7天,創建新用戶 tt,用 chage -l tt 命令查看 用戶 tt 密碼的老化信息
[root@ecs-centos-7 home]# useradd tt
[root@ecs-centos-7 home]# chage -l tt
Last password change : Jun 24, 2020
Password expires : Jul 01, 2020
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 7
Number of days of warning before password expires : 7
從以上結果可以看出,用戶 tt 的密碼有效期持續到 2020-07-01,過了有效期,用戶必須要修改密碼才能登錄,用戶修改密碼之后,密碼的有效期從修改密碼當天自動往后增加 7 天。
修改 /etc/login.defs 中密碼老化參數只針對 修改之后創建的新用戶有效,來源的用戶密碼老化信息維持不變,如果想老用戶保持和新用戶一致,需要手動修改老用戶的密碼老化信息
創建新用戶自動指定密碼有效期已經廣泛的使用在雲服務器上了,利用它可以強制用戶過段時間修改一次密碼,避免用戶無意中泄漏密碼使服務器處於安全隱患中。