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: 0linux修改口令的命令
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
js空数组等于空数组吗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
shell脚本和linux命令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
fscanf函数读取失败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/f
minlen = 8
8)为新密码设置所需的最少字符类数(种类⇒⼤写字母/⼩写字母/数字/特殊字符)[root@kevin ~]# authconfig --passminclass=2 --update
[root@kevin ~]# grep "^minclass" /etc/f
minclass = 2
9)在新密码中设置允许的连续相同字符的最⼤数量
[root@kevin ~]# authconfig --passmaxrepeat=3 --update
[root@kevin ~]# grep "^maxrepeat" /etc/f
maxrepeat = 3
10)在新密码中设置同⼀类的最⼤允许连续字符数
[root@kevin ~]# authconfig --passmaxclassrepeat=4 --update
[root@kevin ~]# grep "^maxclassrepeat" /etc/f
maxclassrepeat = 4
11)新密码中⾄少需要⼀个⼩写字符
[root@kevin ~]# authconfig --enablereqlower --update
[root@kevin ~]# grep "^lcredit" /etc/f
lcredit = -1
12)新密码中⾄少需要⼀个⼤写字符
[root@kevin ~]# authconfig --enablerequpper --update
[root@kevin ~]# grep "^ucredit" /etc/f
ucredit = -1
13)新密码中⾄少需要⼀位数字
[root@kevin ~]# authconfig --enablereqdigit --update
[root@kevin ~]# grep "^dcredit" /etc/f
dcredit = -1
14)新密码中⾄少需要⼀个其他字符
[root@kevin ~]# authconfig --enablereqother --update
[root@kevin ~]# grep "^ocredit" /etc/f
ocredit = -1
15)在新密码中设置单调字符序列的最⼤长度(ex⇒’12345’,’fedcb’)
[root@kevin ~]# vim /etc/f
# add to the end
maxsequence = 3
16)设置旧密码中不能出现的新密码中的字符数
[root@kevin ~]# vim /etc/f
# add to the end
difok = 5
17)检查新密码中是否包含⽤户passwd项的GECOS字段中长度超过3个字符的单词[root@kevin ~]# vim /etc/f
# add to the end
gecoscheck = 1
18)设置不能包含在密码中的Ssace分隔列表
[root@kevin ~]# vim /etc/f
# 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个密码规则的配置:
java初级开发师面试课程黑马[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天。过了这个天数,账户密码⽆效

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。