zoukankan      html  css  js  c++  java
  • Linux小项目/Shell编程实例-统计root用户密码的过期时间

    需求:通过zabbix监控所有服务器root用户的密码过期时间(还有多少天过期)

    技术背景:默认情况下,root用户的密码过期时间可以通过chage -l root ,但这条命令只能root用户自己去执行!

    由于公司服务器有很强的安全策略和各种限制,因此需要统计root用户的密码过期时间,总结了如下两种最可能的方案

    方案一:让root用户,通过crontab服务,每天执行一次chage -l root,将结果写到/tmp/root_pwd_ExpirDays.txt

                  然后让zabbix用户去读取那个文件,取即将过期的天数(推荐,只需root用户加一个定时任务就可以了)

    方案二:通过sudo的方式,通过配置sudo服务,让zabbix用户可以通过sudo免密去执行chage -l root,然后作数据处理

               (推荐,可以严格限制只能临时提权执行chage -l root这一条命令)

    最终取了第一种方案,这里附上笔者写的Shell脚本(root_Password_Expires_check_1.0.sh):

    #/bin/bash
    #
    #############################################################
    #Author:QQ,5201351                                          #
    #Blog:https://www.cnblogs.com/5201351                       #
    #Date:2020-09-10                                            # 
    #Script Version:1.0                                         #
    #Supported OS: Cenots/rhel 6.x/7.x                          #
    #Description:As follows                                     #
    #1.This script can be executed in any directory             # 
    #2.But it must be executed by the root user, nothing more   # 
    #############################################################
    #
    
    today=$(date +%s)
    expires_str=$(chage -l root|awk "NR==2"| cut -d ":" -f 2)
    
    if [ "$expires_str" == " never" ];then
        expiration_days=99999
    else
        expiration=$(date -d "$expires_str" +%s)
        expiration_days=$[(expiration-today)/86400]
    fi
        
    echo $expiration_days > /tmp/root_pwd_ExpirDays.txt

    优化篇1>>>>>>>>:   

    后来又思考了一下,这样也还有有缺陷的,如某天root的周期定时任务没有执行,或者任务被人误删除了

    那么/tmp/root_pwd_ExpirDays.txt中的数据就一直会是一个固定的!文件名也是固定的,对zabbix来言,不容易确定是那天的数据

    于是得优先实现方式(root_password_expires_check_2.0.sh):修改脚本,将1.0中的最后一行,修改如下:

    rm -f /tmp/root_pwd_ExpirDays_$(date -d "-1 days" +%F).txt
    echo $expiration_days |tee /tmp/root_pwd_ExpirDays_$(date +%F).txt

    这样zabbix端,取system.run[cat /tmp/root_pwd_ExpirDays_$(date +%F).txt] 即可获取天数,如果当天的文件不存在,则会产生异常!

    优化篇2>>>>>>>>:   

    再次对脚本加固,如下,主要是对权限这一块的加固,最新版本,root_password_expires_check_3.0.sh:

    sleep 1 ; today=$(date +%s)
    expires_str=$(chage -l root|awk "NR==2"| cut -d ":" -f 2)
    
    if [ "$expires_str" == " never" ];then
        expiration_days=99999
    else
        expiration=$(date -d "$expires_str" +%s)
        expiration_days=$[(expiration-today)/86400]
    fi
    
    rm -f /tmp/root_pwd_ExpirDays_$(date -d "-1 days" +%F).txt
    
    result_file=/tmp/root_pwd_ExpirDays_$(date +%F).txt    
    echo $expiration_days |tee $result_file
    chown root:root $result_file && chmod o=r $result_file

    另外:在公司服务器中,对于极个别的服务器,安全加固极高,使用上面的方法生成的文件,zabbix用户一样还是不能读取到

    最后分析出原因,是那台服务器的selinux安全加固都高于其他服务器,对于特殊个例,笔者增加chcon -t etc_t $result_file进行解析

    尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/13645273.html

  • 相关阅读:
    替换TStrings
    WordPress数据备份方案
    图像反色
    通过网络复制文件
    SQL Server的patindex和charindex的用法
    C冒泡排序 @100到200素数
    正则。IP验证
    C以二进制读、写、文本
    HTML下拉框、文本框、复选框!
    HTM页面获得本机时间
  • 原文地址:https://www.cnblogs.com/5201351/p/13645273.html
Copyright © 2011-2022 走看看