---
# System prepended metadata

title: 如何在 RHEL 中修改用戶密碼有效期
tags: [Linux]

---

## 預設
在未設定密碼有效期前於 RHEL 中建立帳號時，預設密碼有效期皆為 99999 天，The Center for Internet Security (CIS) 為了安全性建議密碼最好低於 365 天。

## /etc/login.defs
我們可以在 `/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   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7
```
但在此設置並不會修改已建立的帳號。

## /etc/shadow
在 `/etc/shadow` 中可以看到所有的帳號和密碼有效期先關的設定，但不是非常的直觀。
```
kurt:*:19619:7:90:7:::
```

## chage
使用 `chage` 指令就能對各個帳號作設置，也可以 show 出各個帳號目前的設置。

```
$ chage --list kurt
Last password change                                    : Sep 19, 2023
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7
$ chage --mindays 7 --maxdays 90 --warndays 7 kurt
$ chage --list kurt
Last password change                                    : Sep 19, 2023
Password expires                                        : Dec 18, 2023
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7
```

設置後可以很直觀的看出帳號的密碼有效期相關設定。