本文共 2266 字,大约阅读时间需要 7 分钟。
技术背景:
工程师A:公司里那么多服务器,每天服务器上都会创建些新用户,这样不安全
工程师B:不给他们创建用户的权限不就好了?
工程师A:不放权,事事都自己管,那不累死了
工程师B:那就写脚本监控,这样就知道什么时候,谁通过哪个终端创建了哪个用户了
技术实现:
服务器环境:centos7.4
1.运行pstree可以看到:进程树上有一个auditd进程 auditd进程是审计监控,可以记录谁在什么时候对哪个文件做了什么操作,本脚本主要使用这个技术 2.本次是监听用户的创建,新创建的用户会写入/etc/passwd文件中,所以要通过audit审计监控这个文件 auditctl -w /etc/passwd -p rwxa auditctl -l ==>就可以看到自己创建的监听规则 以上命令只是临时创建,服务器重启后就没了,不适用,所以要写入配置文件中 vim /etc/audit/rules.d/audit.rules -w /etc/passwd -p rwxa 3.创建新用户,查看审计信息 useradd li1 echo 123 | passwd --stdin li1 ausearch -f /etc/passwd | grep useradd | tail -1 ==>就可以看到刚刚操作的详细信息 timer=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $2}' | awk -F'[(.)]' '{print $2}'` 但是,并不能看到在哪个终端,创建了谁 4.通过上面的结果可以获取到时间,用户id,与父进程 获取到操作的时间,不过是秒数,需要转换为标准时间 timer=`date -d @$timer +%F-%Hh` 这样就可以得到年-月-日-时h的时间格式了 uid=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $15}' | awk -F'=' '{print $2}'` 这样可以取出用户ID,然后在通过/etc/passwd将用户id转换为用户名 uname=`awk -F: '$3=='$uid'{print $1}' /etc/passwd` 取出ppid父进程,通过这个父进程可以得到操作者的终端ip地址 ppid=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $12}' | awk -F'=' '{print $2}'` addr=`cat /var/log/audit/audit.log |grep "$ppid"| grep hostname | tail -1 | awk '{print $12}'|awk -F'=' '{print $2}'` 然后可以查看/etc/passwd得到该操作者创建了谁 WhoIsCreated=`tail -1 /etc/passwd | awk -F: '{print $1}'` 5.创建一个文件,将刚刚得到的结果追加写入这个文件中 vim /root/users.txt 时间 用户 地点 创建了谁? echo $timer $uname $addr $WhoIsCreated >> /root/users.txt 6.可以将该结果通过邮件的方式发送给管理员 echo $timer $uname $addr $WhoIsCreated | mail -S "通知" xx@tedu.cn7.总结:以上操作可以写入脚本配合周期性计划任务自动执行
vim audit_useradd.sh #!/bin/bash #comment=`ausearch -f /etc/passwd | grep useradd | tail -1` timer=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $2}' | awk -F'[(.)]' '{print $2}'` timer=`date -d @$timer +%F-%Hh` uid=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $15}' | awk -F'=' '{print $2}'` uname=`awk -F: '$3=='$uid'{print $1}' /etc/passwd` ppid=`ausearch -f /etc/passwd | grep useradd | tail -1 | awk '{print $12}' | awk -F'=' '{print $2}'` addr=`cat /var/log/audit/audit.log |grep "$ppid"| grep hostname | tail -1 | awk '{print $12}'|awk -F'=' '{print $2}'` WhoIsCreated=`tail -1 /etc/passwd | awk -F: '{print $1}'`echo $timer $uname $addr $WhoIsCreated >> /root/a.txt
转载地址:http://xpcqj.baihongyu.com/