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
  • 相关阅读:
    自定义及发布一个webservice服务
    WSDL协议简单介绍
    画验证码
    MD5加密解密
    Java向前引用容易出错的地方
    SqlServer和Oracle中一些常用的sql语句10 特殊应用
    strut2服务器与android交互数据
    ftp下载目录下所有文件及文件夹内(递归)
    C# 调用迅雷 7 迅雷下载开放引擎
    如何提高banner设计含量--网上的一篇文章--感悟
  • 原文地址:https://www.cnblogs.com/xautxuqiang/p/6495619.html
Copyright © 2011-2022 走看看