口令生存周期的配置文件为 /etc/login.defs
vim 打开该文件,命令模式下输入 /PASS_MAX_DAYS 找到该配置信息的位置
我的 Linux 操作系统默认显示的是 99999,说明我当前用户密码的生存周期为 99999 天
默认配置如图:
PASS_MAX_DAYS 为密码最长使用时间,多少天后会有提醒
PASS_MIN_DAYS 为密码最短使用时间,意思是多少天内不能修改密码
PASS_WARN_AGE 密码过期后会提醒多少天,这些天内还没有修改密码的用户,账户会被冻结
我们可以输入 cat /etc/shadow 查看当前用户的这些信息
0 为 PASS_MIN_DAYS, 99999 为 PASS_MAX_DAYS, 7 为 PASS_WARN_AGE
和配置的信息一样。
现在我们的安全检查要求用户的 Linux 系统的口令生存周期时间应该小于等于标准值 90,
请编写一个脚本测试该 Linux 系统是否满足该安全条件:
- 1 #!/usr/bin/env python3
- 2
- 3 import re
- 4
- 5 def piv(filename):
- 6 with open(filename, "r") as f:
- 7 text = f.read()
- 8 result = re.search("PASS_MAX_DAYS\s*(\d+)",text).group(1)
- 9 if int(result) <= 90:
- 10 return True
- 11 return False
- 12
- 13 if __name__ == "__main__":
- 14 filename = "/etc/login.defs"
- 15 print(piv(filename))
打开文件 / etc/login.defs 并对其内容进行读取,在使用正则表达式匹配文中的 PASS_MAX_DAYS 99999,
以此得到后面的数字,再对其进行判断即可。只要它小于等于 90,则满足安全的条件。
这里的正则表达式为 "PASS_MAX_DAYS\s*(\d+)",
意思就是 PASS_MAX_DAYS 后跟 0 个或多个空白字符,再跟 1 个或多个数字。将数字子组话(加括号),方便提取。
同样 PASS_WARN_AGE 的要求值 >=30 的检测方法是相同的。
- 1 #!/usr/bin/env python3
- 2
- 3 import re
- 4
- 5 def pass_warn_age(filename):
- 6 with open(filename) as f:
- 7 text = f.read()
- 8 result = re.search("PASS_WARN_AGE\s*(\d+)",text).group(1)
- 9 if int(result) >= 30:
- 10 return True
- 11 return False
- 12
- 13 if __name__ == "__main__":
- 14 filename = "/etc/login.defs"
- 15 print(pass_warn_age(filename))
来源: http://www.bubuko.com/infodetail-1967100.html