歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux 之不同運維人員共用root 賬戶權限審計

一、為什麼?

[root@open1 ~]# cat /etc/CheckUser.sh
#!/bin/bash
#conding:utf-8
pid=$PPID
#在自己home目錄得到所有的key,如果/var/log/keys 沒有的時候,添加進去
while read line
do
grep "$line" /var/log/keys >/dev/null || echo "$line" >> /var/log/keys
done < $HOME/.ssh/authorized_keys
#得到每個key的指紋
cat /var/log/keys | while read LINE
do
 NAME=$(echo $LINE | awk '{print $3}')
echo $LINE >/tmp/keys.log.$pid
 KEY=$(ssh-keygen -l -f /tmp/keys.log.$pid | awk '{print $2}')
grep "$KEY $NAME" /var/log/ssh_key_fing >/dev/null || echo "$KEY $NAME" >> /var/log/ssh_key_fing
done
#如果是root用戶,secure文件裡面是通過PPID號驗證指紋
if [ $UID == 0 ]
then
ppid=$PPID
else
#如果不是root用戶,驗證指紋的是另外一個進程號
ppid=`/bin/ps -ef | grep $PPID |grep 'sshd:' |awk '{print $3}'`
fi
#得到RSA_KEY和NAME_OF_KEY,用來bash4.1得到歷史記錄
RSA_KEY=`/bin/egrep 'Found matching RSA key' /var/log/secure | /bin/egrep "$ppid" | /bin/awk '{print $NF}' | tail -1`
 if [ -n "$RSA_KEY" ];then
NAME_OF_KEY=`/bin/egrep "$RSA_KEY" /var/log/ssh_key_fing | /bin/awk '{print $NF}'`
fi
#把NAME_OF_KEY設置為只讀
readonly NAME_OF_KEY
export NAME_OF_KEY
/bin/rm /tmp/keys.log.$pid

View Code

5.2 配置 profile,在文件末尾添加一行內容,如下:

[root@open1 ~]# echo "test -f /etc/CheckUser.sh && . /etc/CheckUser.sh" >> /etc/profile
在/etc/bashrc 末尾添加下面內容:

[root@open1 ~]# tail -1f /etc/bashrc
test -z "$BASH_EXECUTION_STRING" || { test -f /etc/CheckUser.sh && . /etc/CheckUser.sh; logger -t -bash -s "HISTORY $SSH_CLIENT USER=$NAME_OF_KEY CMD=$BASH_EXECUTION_STRING " >/dev/null 2>&1;}
5.3 修改sshd 配置文件,開啟debug 模式,並重啟sshd 服務

[root@open1 ~]# sed -i 's/#LogLevel INFO/LogLevel DEBUG/g' /etc/ssh/sshd_config
[root@open1 ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
六、驗證

6.1 在client1 上進行登陸,並刪除個文件試下(zhangsan)

6.2 在client2 上進行登陸,也刪除個文件,並執行個重啟服務的命令(lisi)

6.3 去服務器上查看下 messages 日志,內容如下

通過上圖,可以看出,不通用戶的客戶端通過公鑰登陸的方式,分辨出了誰操作了什麼,什麼時候操作的。

(注:上圖第4段 swift1 是這台服務器的主機名,由於我只是運行了hostname 命令修改主機名,並沒有修改networks,所以內核裡還是之前的名字:swift1。)

七、結束通過這種方式,極大的解決了多root 用戶登陸操作,無法審計的問題。並且可以結合日志轉發,將系統日志轉發到其它服務器,即使主機被黑了,也能具體的審查登陸時間以及做了哪些操作。

如果本文對您有用,不介意的話,可以小小的打賞贊助一下。

謝謝,如有轉載請注明出處。

Copyright © Linux教程網 All Rights Reserved