隨著linux使用的普遍,對於linux使用者以及系統的安全要求越來越高,而使用者密碼複雜程度是系統安全性高低的首要體現。因此如何對linux下使用者的密碼進行規則限制,以保證使用者必須使用複雜的密碼,杜絕使用者隨意使用簡單的密碼,從而提高使用者的安全性和系統的安全性。下面就不做過多贅述,直接以centos6版本為例進行介紹:
1)使用者密碼策略
Linux系統下的使用者密碼的有效期,是否可以修改密碼可以通過login.defs檔案控制。
[root@bastion-IDC ~]# cat /etc/login.defs|grep -v "^#"|grep -v "^$" MAIL_DIR /var/spool/mail PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_MIN_LEN 5 PASS_WARN_AGE 7 UID_MIN 500 UID_MAX 60000 GID_MIN 500 GID_MAX 60000 CREATE_HOME yes UMASK 077 USERGROUPS_ENAB yes ENCRYPT_METHOD SHA512 上述檔案中的重要參數列示: PASS_MAX_DAYS 99999 密碼的最大有效期, 99999:永久有期 PASS_MIN_DAYS 0 是否可修改密碼,0表示可修改,非0表示多少天后可修改 PASS_MIN_LEN 5 密碼最小長度,但是使用pam_cracklib.so模組後,該引數不再有效(這個參考下面密碼複雜度規則設定) PASS_WARN_AGE 7 密碼失效前多少天在使用者登入時通知使用者修改密碼
2)使用者密碼複雜度規則設定,需要通過/etc/pam.d/system-auth檔案實施(針對的是普通使用者狀態下修改密碼會生效,root使用者狀態下無效),centos6中預設是通過pam_cracklib.so模組控制:
[root@bastion-IDC ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@bastion-IDC ~]# 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=8 ucredit=-2 lcredit=-4 dcredit=-1 ocredit=-1 password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5 上面檔案中引數分別說明設定密碼的時候要遵循下面的規則: retry=3 定義登入/修改密碼失敗時,可以重試的次數; type=xxx 當新增/修改密碼時,系統給出的預設提示符是什麼,用來修改預設的密碼提示文字。預設是不修改的,如上例。 minlen=8 定義使用者密碼的最小長度為8位 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 此選項用來規定新密碼中的字元類別的最小數目,字元一般有四種類別:數字、大寫字母、小寫字母,以及特殊字元。
溫馨提示:login.defs檔案和/etc/pam.d/system-auth檔案的規則設定對非root使用者起作用,在root使用者下則不會生效!如果設定root使用者密碼過期時間等,需要用change命令進行設定。示例如下:
如下密碼規則設定: 1)密碼有效期是3個月。即使用者建立180天后強制要求修改密碼。 2)密碼至少要過了5天后才能修改。 3)密碼最小長度是12位 4)密碼到期前的7天,使用者登入時會提醒修改密碼 5)密碼輸入時最多可允許嘗試輸入3次密碼,3次不成功則退出密碼輸入介面。 6)新密碼中至少包括大寫字母2位、小寫字母至少2位,數字至少2位,特殊字元至少2位 7)新密碼中必須有4個字元與老密碼不同 8)修改使用者密碼時最近3次用過的舊密碼就不能重用了 則前4個密碼規則的配置: [root@pinpoint-server ~]# vim /etc/login.defs ...... PASS_MAX_DAYS 180 PASS_MIN_DAYS 5 PASS_MIN_LEN 12 PASS_WARN_AGE 7 後4個密碼規則的配置: [root@pinpoint-server ~]# vim /etc/pam.d/system-auth ...... password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=12 ucredit=-2 lcredit=-2 dcredit=-2 ocredit=-2 difok=4 password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=3 password required pam_deny.so 在root賬號下修改密碼,測試以上密碼規則設定後是否有效? 如下操作,說明以上設定在root賬號下無效 [root@pinpoint-server ~]# echo "123456"|passwd --stdin grace Changing password for user grace. passwd: all authentication tokens updated successfully. 那麼切換到非root賬號下修改密碼試試? [grace@pinpoint-server ~]$ passwd Changing password for user grace. Changing password for grace. (current) UNIX password: #輸入當前密碼123456 New password: #設定新密碼shibo@2018,不符合密碼規則 BAD PASSWORD: is too simple New password: #設定新密碼kevin@201b,不符合密碼規則 BAD PASSWORD: is too simple New password: #設定新密碼KeVI@2#8!w02,不符合密碼規則 Retype new password: passwd: all authentication tokens updated successfully. 說明以上的密碼規則設定在非root使用者下是生效的!!
3)Linux賬戶期限設定
Linux系統下可以使用chage命令是用來修改帳號和密碼的有效期限。
需求場景: 公司給客戶開的ftp賬戶用於下載報社新聞稿件。這個是付費的,賬戶有時間限制。若是合同到期了,客戶想續約,就需要給這個ftp賬戶做延期。 注意下面修改賬戶有效期限的命令: # chage -l username 檢視系統賬戶的當前設定 # chage -M 600 fzwb_word 修改fzwb_word賬戶密碼的有效天數為600天。過了這個天數,賬戶密碼無效 # chage -E "Jun 16, 2016" fzwb_word 設定fzwb_word賬戶的具體到期時間。過了這個日期,賬戶就無效。預設是never (fzwb_word為ftp的賬戶賬戶) 注意: chage -M 針對的是賬戶密碼過期時間。 chage -E 這個命令針對的是賬戶過期時間 設定賬戶過期時間,除了使用chage -E命令,還可以使用usermod -e命令 # usermod -e "Jun 16, 2016" fzwb_word 設定fzwb_word賬戶的具體到期時間。預設是never (fzwb_word為ftp的賬戶賬戶) 下面命令檢視, fzwb_word 這個賬戶的時間到 2015 年 6 月 10 號就到期了!! 修改為 2016 月 6 月 16 號到期! [root@hlweb80 ~]# chage -l fzwb_word Minimum: 0 Maximum: 99999 Warning: 7 Inactive: -1 Last Change: Jun 15, 2012 Password Expires: Never Password Inactive: Never Account Expires: Jun 10, 2015 [root@hlweb80 ~]# usermod -e "Jun 16, 2016" fzwb_word [root@hlweb80 ~]# chage -l fzwb_word Minimum: 0 Maximum: 99999 Warning: 7 Inactive: -1 Last Change: Jun 15, 2012 Password Expires: Never Password Inactive: Never Account Expires: Jun 16, 2016 -------------------------------------------------------------------------------- 可以使用chage命令來手動修改賬戶的相關屬性: 格式:chage [選項] 賬戶名 [選項] -m:密碼可更改的最小天數。為零時代表任何時候都可以更改密碼。 -M:密碼保持有效的最大天數。 -w:賬戶密碼到期前,提前收到警告資訊的天數。 -E:帳號到期的日期。過了這天,此帳號將不可用。 -d:上一次更改的日期。 -i:停滯時期。如果一個密碼已過期這些天,那麼此帳號將不可用。 -l:例出當前的設定。由非特權賬戶來確定他們的密碼或帳號何時過期。 例項如下: [root@linux-node1 ~]# chage -l wangshibo Last password change : Mar 09, 2017 //賬戶建立時間 Password expires : Aug 30, 2022 //賬戶密碼過期時間 Password inactive : never Account expires : never //賬戶過期時間 Minimum number of days between password change : 0 Maximum number of days between password change : 2000 Number of days of warning before password expires : 7 [root@linux-node1 ~]# usermod -e "Jun 16, 2018" wangshibo [root@linux-node1 ~]# chage -l wangshibo Last password change : Mar 09, 2017 Password expires : Aug 30, 2022 Password inactive : never Account expires : Jun 16, 2018 Minimum number of days between password change : 0 Maximum number of days between password change : 2000 Number of days of warning before password expires : 7 [root@linux-node1 ~]# chage -M 20 wangshibo [root@linux-node1 ~]# chage -l wangshibo Last password change : Mar 09, 2017 Password expires : Mar 29, 2017 Password inactive : never Account expires : Jun 16, 2018 Minimum number of days between password change : 0 Maximum number of days between password change : 20 Number of days of warning before password expires : 7 [root@linux-node1 ~]# chage -E "Jun 2, 2020" wangshibo [root@linux-node1 ~]# chage -l wangshibo Last password change : Mar 09, 2017 Password expires : Mar 29, 2017 Password inactive : never Account expires : Jun 02, 2020 Minimum number of days between password change : 0 Maximum number of days between password change : 20 Number of days of warning before password expires : 7