Linux系統用戶密碼規則 - 運維總結


 

隨着linux使用的普遍,對於linux用戶以及系統的安全要求越來越高,而用戶密碼復雜程度是系統安全性高低的首要體現。因此如何對linux下用戶的密碼進行規則限制,以保證用戶必須使用復雜的密碼,杜絕用戶隨意使用簡單的密碼,從而提高用戶的安全性和系統的安全性。下面以Centos7系統為例,出於安全考慮,對用戶密碼規則復雜度的設置進行梳理:

一、設置密碼規則

1)密碼長度、有效期
/etc/login.defs文件是當創建用戶時的一些規划,比如創建用戶時,是否需要家目錄,UID和GID的范圍;用戶的期限等等,這個文件是可以通過root來定義的。

PASS_MAX_DAYS 90 —-兩次改變密碼之間相距的最大天數,密碼有效最大天數 
PASS_MIN_DAYS 6 —-兩次改變密碼之間相距的最小天數,為零時代表任何時候都可以更改密碼 
PASS_MIN_LEN 6 —-密碼最小長度 
PASS_WARN_AGE 30 —-在密碼過期之前警告的天數 

注意:以上只對之后新增的用戶有效,如果要修改已存在的用戶密碼規則,需要使用chage命令

2)查看用戶的密碼規則

Last password change                                    : Sep 11, 2018
Password expires                                        : Sep 30, 2030
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 6
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7

翻譯過來:
最近一次密碼修改時間 : 9月 11, 2018 
密碼過期時間 : 9月 30, 2030 
密碼失效時間 :從不 
帳戶過期時間 :從不 
兩次改變密碼之間相距的最小天數 :6 
兩次改變密碼之間相距的最大天數 :90 
在密碼過期之前警告的天數 :7

=============================================================
chage是用了修改賬戶有效期限的命令。
注意:不要用該命令給root用戶加上有效期,如果密碼過期,再加上后文說的/etc/shadow文件加鎖禁止修改,會導致root提示修改密碼,
無法成功修改密碼,從而無法登陸。 如果要修改密碼過期時間為"從不"

修改方法:
# chage -M 90 -m 6 -W 30 test
# chage -M 99999 kevin
# 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@kevin ~]# 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@kevin ~]# usermod -e "Jun 16, 2016" fzwb_word
[root@kevin ~]# 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@kevin ~]# 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@kevin ~]# usermod -e "Jun 16, 2018" wangshibo
 
[root@kevin ~]# 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@kevin ~]# chage -M 20 wangshibo
 
[root@kevin ~]# 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@kevin ~]# chage -E "Jun 2, 2020" wangshibo
 
[root@kevin ~]# 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

3) 設置密碼過期的天數。 用戶必須在幾天內更改密碼。 此設置僅在創建用戶時才會產生影響,而不會影響到現有用戶。 如果設置為現有用戶,請運行命令"chage -M(days)(user)"

[root@kevin ~]# vim /etc/login.defs
# line 25: set 60 for Password Expiration
PASS_MAX_DAYS 60

4)設置可用密碼的最短天數 至少在改變它之后,用戶必須至少使用他們的密碼。 此設置僅在創建用戶時才會產生影響,而不會影響到現有用戶。 如果設置為現有用戶,請運行命令"chage -m(days)(user)"

[root@kevin ~]# vim /etc/login.defs
# line 26: set 2 for Minimum number of days available
PASS_MIN_DAYS 2

5)在到期前設置警告的天數。 此設置僅在創建用戶時才會產生影響,而不會影響到現有用戶。 如果設置為存在用戶,請運行命令"chage -W(days)(user)"

[root@kevin ~]# vim /etc/login.defs
# line 28: set 7 for number of days for warnings
PASS_WARN_AGE 7

6)5次更改密碼不能有重復(即最近5次使用過的密碼就不能再用作新密碼了),並且每次修改密碼都會將歷史密碼記錄在/etc/security/opasswd文件中

[root@kevin ~]# vim /etc/pam.d/system-auth
# near line 15: prohibit to use the same password for 5 generation in past
password     sufficient     pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

7)設置最小密碼長度。 用戶不能將密碼長度設置為小於此參數

[root@kevin ~]# authconfig --passminlen=8 --update
[root@kevin ~]# grep "^minlen" /etc/security/pwquality.conf 
minlen = 8

8)為新密碼設置所需的最少字符類數(種類⇒大寫字母/小寫字母/數字/特殊字符)

[root@kevin ~]# authconfig --passminclass=2 --update
[root@kevin ~]# grep "^minclass" /etc/security/pwquality.conf 
minclass = 2

9)在新密碼中設置允許的連續相同字符的最大數量

[root@kevin ~]# authconfig --passmaxrepeat=3 --update
[root@kevin ~]# grep "^maxrepeat" /etc/security/pwquality.conf 
maxrepeat = 3

10)在新密碼中設置同一類的最大允許連續字符數

[root@kevin ~]# authconfig --passmaxclassrepeat=4 --update
[root@kevin ~]# grep "^maxclassrepeat" /etc/security/pwquality.conf 
maxclassrepeat = 4

11)新密碼中至少需要一個小寫字符

[root@kevin ~]# authconfig --enablereqlower --update
[root@kevin ~]# grep "^lcredit" /etc/security/pwquality.conf 
lcredit = -1

12)新密碼中至少需要一個大寫字符

[root@kevin ~]# authconfig --enablerequpper --update
[root@kevin ~]# grep "^ucredit" /etc/security/pwquality.conf 
ucredit = -1

13)新密碼中至少需要一位數字

[root@kevin ~]# authconfig --enablereqdigit --update
[root@kevin ~]# grep "^dcredit" /etc/security/pwquality.conf 
dcredit = -1

14)新密碼中至少需要一個其他字符

[root@kevin ~]# authconfig --enablereqother --update
[root@kevin ~]# grep "^ocredit" /etc/security/pwquality.conf 
ocredit = -1

15)在新密碼中設置單調字符序列的最大長度(ex⇒’12345’,’fedcb’)

[root@kevin ~]# vim /etc/security/pwquality.conf
# add to the end
maxsequence = 3

16)設置舊密碼中不能出現的新密碼中的字符數

[root@kevin ~]# vim /etc/security/pwquality.conf
# add to the end
difok = 5

17)檢查新密碼中是否包含用戶passwd項的GECOS字段中長度超過3個字符的單詞

[root@kevin ~]# vim /etc/security/pwquality.conf
# add to the end
gecoscheck = 1

18)設置不能包含在密碼中的Ssace分隔列表

[root@kevin ~]# vim /etc/security/pwquality.conf
# add to the end
badwords = denywords1 denywords2 denywords3

19)為新密碼設置散列/密碼算法。 (默認是sha512)

[root@kevin ~]# authconfig --test | grep hashing 
 password hashing algorithm is sha512
 
[root@kevin ~]# authconfig --passalgo=md5 --update   
[root@kevin ~]# authconfig --test | grep hashing  
 password hashing algorithm is md5

二、賬戶鎖定策略實現 

策略要求如下: 
- 設定鎖定的閾值為5次 
- 鎖定時間為5分鍾即300秒 
- 必須所有用戶都受限,包括root 

1)修改配置文件/etc/pam.d/system-auth-ac,寫入策略
[root@server ~]# vim /etc/pam.d/system-auth-ac
auth        required      pam_env.so
auth        required      pam_tally2.so even_deny_root deny=5 unlock_time=60 
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     required      pam_tally2.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so


2)修改配置文件/etc/pam.d/password-auth-ac)
[[root@server ~]# vimm /etc/pam.d/password-auth-ac
auth        required      pam_env.so
auth        required      pam_tally2.so deny=5 unlock_time=60
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_unix.so
account     required      pam_tally2.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so


3)查看用戶鎖定狀態
[root@ server pam.d]# pam_tally2 -u wangshibo
Login           Failures Latest failure     From
wangshibo                 7    12/20/16 14:02:55  192.168.10.86

4)解鎖狀態
[root@kevin ~]# pam_tally2 -r -u  wangshibo
Login           Failures Latest failure     From
wangshibo                 0   

                                                               Centos6 系統密碼策略                                                            
上面介紹的是Centos7系統下的用戶密碼策略,大多數也適用於Centos6系統,這里再補充下:

1)用戶密碼策略
Linux系統下的用戶密碼的有效期,是否可以修改密碼可以通過login.defs文件控制。

[root@localhost ~]# 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@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=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@localhost ~]# vim /etc/login.defs
......
PASS_MAX_DAYS   180
PASS_MIN_DAYS   5
PASS_MIN_LEN    12
PASS_WARN_AGE   7
 
后4個密碼規則的配置:
[root@localhost ~]# 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@localhost ~]# echo "123456"|passwd --stdin grace
Changing password for user grace.
passwd: all authentication tokens updated successfully.
 
那么切換到非root賬號下修改密碼試試?
[grace@localhost ~]$ 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@localhost ~]# 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@localhost ~]# usermod -e "Jun 16, 2018" wangshibo
 
[root@localhost ~]# 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@localhost ~]# chage -M 20 wangshibo
 
[root@localhost ~]# 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@localhost ~]# chage -E "Jun 2, 2020" wangshibo
 
[root@localhost ~]# 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM