云计算之linux服务器用户管理

技术背景:

       工程师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 "通知" [email protected]

7.总结:以上操作可以写入脚本配合周期性计划任务自动执行
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 

猜你喜欢

转载自blog.csdn.net/mx_steve/article/details/82725746