需求:通过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
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!