对于Linux系统来说,用户密码的复杂程度和是否定期更改是系统安全性高低的重要体现,特别是对于多用户系统来说尤其重要。用户密码的策略限制基本可以从以下3个方面入手:
0x01 密码策略设置
如果要设置用户密码的有效期,可以编辑login.defs文件$ cat /etc/login.defs|grep -v "^#"|grep -v "^$"
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 90 ##密码的最大有效期, 99999:永久有期
PASS_MIN_DAYS 0 ##是否可修改密码,0表示可修改,非0表示多少天后可修改
PASS_MIN_LEN 8 ##密码最小长度,但是使用pam_cracklib.so模块后,该参数不再有效
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 ##密码加密方式
MD5_CRYPT_ENAB no ##如果密码加密方式选择MD5,这边为yes,否则为no
login.defs文件修改后只对新建的用户起作用,如果要改变原有的用户则需要用到chage命令。
0x02 chage命令修改
a、查看账户的当前设置$ chage -l test
Last password change : Jan 03, 2018 ##密码最后修改时间
Password expires : Apr 03, 2018 ##密码到期时间
Password inactive : never
Account expires : never ##账户到期时间,never为长期有效
Minimum number of days between password change : 0 ##更改密码最少天数
Maximum number of days between password change : 90 ##更改密码最大天数
Number of days of warning before password expires : 7 ##提前多少天提示用户
b、修改密码过期时间$ chage -M 90 test ##密码过期时间为90天
c、修改账户过期时间$ chage -E "Apr 03, 2018" test ##账号过期时间为4月3号
$ chage -E 90 test ##账号过期时间为90天后
$ chage -E never test ##恢复账号过期时间为不过期
0x03 密码复杂度配置
密码复杂度可以编辑system-auth文件配置
密码场景:定义用户密码最小长度为8位,其中最少有4个字母且最少包含2个大写字母,最少有1个数字和一个特殊字符;错误密码最多可以重试3次;不能使用最近5次使用过的旧密码。可以按如下配置$ cat /etc/pam.d/system-auth
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 sha512 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次用过的旧密码就不能重用了