在 CentOS 設定密碼複雜度規則

為了避免使用者使用過於簡單的密碼,通常我們會想要在管理的主機上設定密碼複雜度,而在 CentOS 中的密碼相關設定主要有兩個檔案,分別是:

/etc/login.defs

這個檔案負責新增使用者時的各項設定值
主要設定如下
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7

分別對應到
1. 密碼有效期
2. 距離上次變更密碼後偶,要過幾天才可以再次變更
3. 密碼最小長度
4. 密碼到期前幾天通知使用者

需要注意的是,修改這些規則只會在新增使用者時才會被套用,已經建立的使用者不會受到影響,要另外使用 chage 指令才能修改
而且針對密碼長度的設定,CentOS 已經另外使用 PAM 模組管理
所以要針對目前使用者設定密碼長度以及複雜度規則,就必須修改另一個檔案

/etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth required pam_deny.soaccount required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required pam_permit.sopassword requisite pam_cracklib.so try_first_pass retry=3 type= minlen=10
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.sosession optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so

這個檔案內容由 authconfig 產生,如果手動改了這個檔案內容,就要避免再次執行 authconfig 指令

如果要規定使用者密碼長度至少 8 個字,可以在紅字第二行加入以下設定
minlen=8 lcredit=0 ucredit=0 dcredit=0 ocredit=0

上面設定分別代表的是
1. minlen: 密碼長度+分數後的最小值
2. lcredit: 密碼中若包含小寫字元,所得的分數
3. ucredit: 密碼中若包含大寫字元,所得的分數
4. dcredit: 密碼中若包含數字,所得的分數
5. ocredit: 密碼中若包含其他字元,所得的分數

針對上面提到的分數,舉例來說如果設定值是
minlen=8 lcredit=1 ucredit=1 dcredit=0 ocredit=0
那麼即使使用者的密碼只有 6 個字:ATGByujn,但是因為密碼包含了大小寫,所以另外拿了 2 分
因此 6+2=8,還是會滿足了 minlen=8 的設定

發表迴響

你的電子郵件位址並不會被公開。