Linux配置密碼複雜度策略及密碼使用週期

Linux系統下的用戶密碼的複雜度規則

用戶密碼複雜度規則設定,需要通過 /etc/pam.d/system-auth 文件實施(針對的是普通用戶狀態下修改密碼會生效,root用戶狀態下無效),centos6中默認是通過 pam_cracklib.so 模塊控制,(在CentOS 7上實現密碼複雜度策略設置,主要是使用 PAM pwquality 模塊完成):

 CentOS 6 通用規則設置示例

[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
   
[root@localhost ~]# vim /etc/pam.d/system-auth
將文件中的下面兩行:
password    requisite     pam_cracklib.so try_first_pass retry=3 type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
改爲:
password    requisite     pam_cracklib.so try_first_pass retry=3 type= minlen=10 ucredit=-2 lcredit=-4 dcredit=-1 ocredit=-1
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

 上面文件中參數分別說明設置密碼的時候要遵循下面的規則:

  • retry=3 定義登錄/修改密碼失敗時,可以重試的次數;
  • type=xxx 當添加/修改密碼時,系統給出的缺省提示符是什麼,用來修改缺省的密碼提示文本。默認是不修改的,如上例。
  • minlen=10 定義用戶密碼的最小長度爲10位
  • ucredit=-2 定義用戶密碼中最少有2個大寫字母 (數字爲負數,表示至少有多少個大寫字母;數字爲正數,表示至多有多少個大寫字母;下面同理)
  • lcredit=-4 定義用戶密碼中最少有4個小寫字母
  • dcredit=-1 定義用戶密碼中最少有1個數字
  • ocredit=-1 定義用戶密碼中最少有1個特殊字符(除數字、字母之外)
  • remember=5 修改用戶密碼時最近5次用過的舊密碼就不能重用了

除了上面的幾個參數,還可以設定下面的參數規則:

  • difok=N 此選項用來規定新密碼中必需有N個字符與舊密碼不同。如果新密碼中有1/2以上的字符與舊密碼不同時,該新密碼就會被接受。
  • difignore=N 此選項用來設定在difok之前收到多少個字符時,difok設置會被忽略,缺省爲23。
  • minclass=N 此選項用來規定新密碼中的字符類別的最小數目,字符一般有四種類別:數字、大寫字母、小寫字母,以及特殊字符。

禁止使用舊密碼

在 /etc/pam.d/system-auth 裏找到同時有 “password” 和 “pam_unix.so” 字段並且附加有 “remember=5” 的那行,它表示禁止使用最近用過的5個密碼(己使用過的密碼會被保存在 /etc/security/opasswd 下面)。

sudo vi /etc/pam.d/system-auth
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember=5

設置最短密碼長度

找到同時有 “password” 和 “pam_cracklib.so” 字段並且附加有 “minlen=10” 的那行,它表示最小密碼長度爲(10 - 類型數量)。這裏的 “類型數量” 表示不同的字符類型數量。PAM 提供4種類型符號作爲密碼(大寫字母、小寫字母、數字和標點符號)。如果你的密碼同時用上了這4種類型的符號,並且你的 minlen 設爲10,那麼最短的密碼長度允許是6個字符。

sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10

設置密碼複雜度(常用)

找到同時有 “password” 和 “pam_cracklib.so” 字段並且附加有 “ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1” 的那行,它表示密碼必須至少包含一個大寫字母(ucredit),兩個小寫字母(lcredit),一個數字(dcredit)和一個標點符號(ocredit)。

sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

 CentOS 7通用規則設置示例

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@localhost ~]# cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
[root@localhost ~]# vi /etc/pam.d/system-auth

#示例1
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=12 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

#示例2
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=10 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

#示例3
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 enforce_for_root

 上面文件中參數分別說明設置密碼的時候要遵循下面的規則: 

  • retry=3 定義登錄/修改密碼失敗時,可以重試的次數;

  • minlen=8 密碼最小長度爲8個字符。

  • lcredit=-1 密碼應包含的小寫字母的至少一個

  • ucredit=-1 密碼應包含的大寫字母至少一個

  • dcredit=-1 將密碼包含的數字至少爲一個

  • ocredit=-1 設置其他符號的最小數量,例如@,#、! $%等,至少要有一個

  • enforce_for_root 確保即使是root用戶設置密碼,也應強制執行複雜性策略。

Linux系統下的用戶密碼的有效期

可以修改密碼可以通過login.defs文件控制。設置密碼過期期限(默認情況下,用戶的密碼永不過期。)
編輯 /etc/login.defs 文件,可以設置當前密碼的有效期限,具體變量如下所示:

sudo vi /etc/login.defs
PASS_MAX_DAYS 150 
PASS_MIN_DAYS 0 
PASS_WARN_AGE 7
# 這些設置要求用戶每6個月改變他們的密碼,並且會提前7天提醒用戶密碼快到期了。

說明:

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

# 建議值
PASS_MAX_DAYS   90
PASS_MIN_DAYS   0
PASS_MIN_LEN    8
PASS_WARN_AGE   7

可以通過sed命令設置:

sed -r -i 's/(PASS_MAX_DAYS)\s+([0-9]+)/\1 90/' /etc/login.defs

以上將 PASS_MAX_DAYS 99999 設置爲 PASS_MAX_DAYS 90(密碼有效期90天)

sed -r -i 's/(PASS_MIN_LEN)\s+([0-9]+)/\1 8/' /etc/login.defs

以上將 PASS_MIN_LEN 5 設置爲 PASS_MIN_LEN 8(密碼字符長度8位)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章