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_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))

 

 

重新做了一遍(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_DAYS\s+(\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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM