zoukankan      html  css  js  c++  java
  • BVS安全检测之检查Linux是否口令生存周期

    口令生存周期的配置文件为 /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_DAYSs*(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_DAYSs*(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_AGEs*(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))

    重新做了一遍(Python版)

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import os
     5 import re
     6 
     7 filename = "/etc/login.defs"
     8 
     9 #如果文件存在
    10 if os.path.exists(filename):
    11         with open(filename) as f:
    12                 text = f.read()
    13         try:
    14                 ret = re.search("PASS_MAX_DAYSs+(d+)",text).group(1)
    15         except AttributeError:
    16                 print("The file's PASS_MAX_DAYS configuration is wrong! Please check it") 
    17         else:
    18                 #如何PASS_MAX_DAYS的值大于0小于等于90,则合规
    19                 if 0< int(ret) <= 90:
    20                         print("PASS_MAX_DAYS ok")
    21                 else:
    22                         print("PASS_MAX_DAYS fail")
    23 else:
    24         print("The file '/etc/login.defs' is not found!!!")

    bash

    file="/etc/login.defs";
    #如果文件存在,grep -v过滤掉有#的行,在grep PASS_MAX_DAYS,
    if [ -s ${file} ];then
    ret=`cat ${file} | grep -v "#" | grep PASS_MAX_DAYS | awk -F ' ' '{print $2}'`;fi
    
    if [ 0 -ne $ret  -a  90 -ge $ret ];then
    echo "PASS_MAX_DAYS ok";
    else
    echo "PASS_MAX_DAYS  fail";fi
  • 相关阅读:
    HDU 5583 Kingdom of Black and White 水题
    HDU 5578 Friendship of Frog 水题
    Codeforces Round #190 (Div. 2) E. Ciel the Commander 点分治
    hdu 5594 ZYB's Prime 最大流
    hdu 5593 ZYB's Tree 树形dp
    hdu 5592 ZYB's Game 树状数组
    hdu 5591 ZYB's Game 博弈论
    HDU 5590 ZYB's Biology 水题
    cdoj 1256 昊昊爱运动 预处理/前缀和
    cdoj 1255 斓少摘苹果 贪心
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6495619.html
Copyright © 2011-2022 走看看