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

  • 相关阅读:
    〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
    〖Linux〗Kubuntu, the application 'Google Chrome' has requested to open the wallet 'kdewallet'解决方法
    unity, dll is not allowed to be included or could not be found
    android check box 自定义图片
    unity, ios skin crash
    unity, Collider2D.bounds的一个坑
    unity, ContentSizeFitter立即生效
    类里的通用成员函数应声明为static
    unity, Gizmos.DrawMesh一个坑
    直线切割凹多边形
  • 原文地址:https://www.cnblogs.com/5201351/p/13645273.html
Copyright © 2011-2022 走看看