全網日誌集中審計解決方案
title: 全網日誌集中審計解決方案
tags: 日誌審計,sudo,rsyslog
grammar_cjkRuby: true
全網日誌集中審計解決方案
1. 日誌審計概述,為什麽需要日誌審計
日誌審計是記錄所有系統及相關用戶行為的信息,並且可以自動分析、處理、展示。當利用sudo對公司全網改進杜絕超級權限root泛濫後,從根本上降低了內部操作失誤及安全隱患的發生。但是權限控制後,需要實施對所有用戶日誌記錄方案,這樣讓所有運維人員和開發人員所有執行的命令都有記錄可查,這樣才可以從根本上杜絕內部人員的安全隱患,因為很多重大安全事故其實都是從內部發生的。因為如果記錄普通用戶的操作記錄,數據量巨大,日後查詢也不方便,再者,普通用戶操作記錄不會危害系統安全,都是一些常規的查看命令,或改寫屬於自己的文件,因此沒有很大必要去審計,只需要重點審計通過sudo提權的日誌就好了。sudo日誌審計是通過sudo和syslog配合實現對所有用戶進行日誌審計並將記錄集中管理。
2. sudo配合rsyslog服務日誌審計步驟
- 安裝sudo命令,rsyslog服務(Centos 6.4以上為rsyslog服務)
[root@maiyat ~]# rpm -qa sudo sudo-1.8.6p3-29.el6_9.x86_64 [root@maiyat ~]# rpm -qa rsyslog rsyslog-5.8.10-10.el6_6.x86_64
- 配置/etc/sudoers文件,增加配置“ Defaults logfile=/var/log/sudolog" 到/etc/sudoers中。如:
[root@maiyat ~]# echo "Defaults logfile=/var/log/sudolog" >>/etc/sudoers [root@maiyat ~]# tail -1 /etc/sudoers Defaults logfile=/var/log/sudolog [root@maiyat ~]# visudo -c visudo: Warning: User_Alias `GY01‘ referenced but not defined /etc/sudoers: parsed OK
- 配置系統日誌/etc/syslog.conf
增加配置local2.debug到/etc/syslog.conf中[root@maiyat ~]# echo "local2.debug /var/log/sudolog" >>/etc/rsyslog.conf [root@maiyat ~]# /etc/init.d/rsyslog restart [root@maiyat ~]# ls -l /var/log/sudo.log -rw-------. 1 root root 0 Jun 30 23:15 /var/log/sudo.log
- 驗證是否配置成功
[root@maiyat ~]# su - test [test@maiyat ~]$ sudo passwd aaa Changing password for user aaa. New password: BAD PASSWORD: it does not contain enough DIFFERENT characters BAD PASSWORD: is a palindrome Retype new password: passwd: all authentication tokens updated successfully. [test@maiyat ~]$ exit [root@maiyat ~]# ls -l /var/log/sudo.log -rw-------. 1 root root 98 Jun 30 23:30 /var/log/sudo.log [root@maiyat ~]# cat /var/log/sudo.log Jun 30 23:30:49 : test : TTY=pts/0 ; PWD=/home/test ; USER=root ; COMMAND=/usr/bin/passwd aaa [root@maiyat ~]#
3.實現全網的日誌集中審計
3.1. rsync配合定時任務,將sudo.log推送到日誌管理服務器上。
下面我們通過定時任務+rsync推送,我們目前審計的是maiyat主機,ip為192.168.50.2,我們的集中備份主機位backup主機,ip為192.168.50.4。
3.1.1 在backup和maiyat主機都安裝rsync,如
maiyat主機[root@maiyat script]# uname -m x86_64 [root@maiyat script]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64 [root@maiyat script]#
backup主機
[root@backup 192.168.50.2_2018-07-01]# uname -r 2.6.32-696.23.1.el6.x86_64 [root@backup 192.168.50.2_2018-07-01]# uname -m x86_64 [root@backup 192.168.50.2_2018-07-01]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64 [root@backup 192.168.50.2_2018-07-01]#
3.1.2 在rsync服務端創建rsyncd.conf的配置文件,如
[root@backup 192.168.50.2_2018-07-01]# cat /etc/rsyncd.conf # rsyncd-conf start uid = rsync gid = rsync use chroot = no max connections = 2000 timeout = 600 pid file= /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore = errors read only = false list = false hosts allow = 192.168.50.0/24 hosts deny = 0.0.0.0/32 auth users = rsync-backup secrets file = /etc/rsync.password ##################################### [backup] comment = backup path = /backup
3.1.3 在rsync服務端創建與rsyncd.conf匹配的密碼文件,以及rsync用戶
[root@backup ~]# useradd rsync -M -s /sbin/nologin [root@backup ~]# id rsync uid=547(rsync) gid=547(rsync) groups=547(rsync) [root@backup ~]# echo "rsync-backup:root" >/etc/rsync.password [root@backup ~]# ls -l /etc/rsync.password -rwxr-xr-x. 1 root root 18 May 21 06:23 /etc/rsync.password
3.1.4 創建rsync服務端的備份目錄,註意要和rsyncd.conf一致,並將備份目錄權限給rsync用戶,如果這步不賦予權限可能會出現認證錯誤。
[root@backup ~]# mkdir -p /backup [root@backup ~]# chown -R rsync:rsync /backup [root@backup ~]# ls -ld /backup/ drwxr-xr-x. 2 rsync rsync 4096 Jun 19 01:10 /backup/
3.1.5 在客戶端配置與服務端rsyncd.conf相匹配的密碼文件,權限給600,並測試一下推送到服務端是否正常,如:
- 配置/etc/sudoers文件,增加配置“ Defaults logfile=/var/log/sudolog" 到/etc/sudoers中。如:
[root@maiyat ~]# echo "root" > /etc/rsync.password
[root@maiyat ~]# chmod 600 /etc/rsync.password
[root@maiyat ~]# ls -l /etc/rsync.password
-rw-------. 1 root root 5 Jul 1 00:06 /etc/rsync.password
[root@maiyat ~]# rsync -avz /var/log/sudo.log [email protected]::backup/ --password-file=/etc/rsync.password
sending incremental file list
sudo.log
sent 159 bytes received 27 bytes 372.00 bytes/sec
total size is 98 speedup is 0.53
3.1.6 在客戶端推送正常後我們部署一個腳本和定時任務,定時完成推送sudo.log任務。如
[root@maiyat script]# vim sudo-bak.sh
#!/bin/bash
dir=`ifconfig eth0 |awk -F ‘[ :]+‘ ‘NR==2 {print $4}‘`
path=/backup
mkdir $path/$dir -p &&/bin/cp /var/log/sudo.log $path/$dir/sudo_log_$(date +%F) &&rsync -az $path [email protected]::backup/ --password-file=/etc/rsync.password
[root@maiyat script]# sh /service/script/sudo-bak.sh
在rsync服務端查看
[root@backup backup]# cd backup/
[root@backup backup]# ls
192.168.50.2
[root@backup backup]# cd 192.168.50.2/
[root@backup 192.168.50.2]# ls -l
total 4
-rw-------. 1 rsync rsync 98 Jul 1 2018 sudo_log_2018-07-01
[root@backup 192.168.50.2]#
在rsync客戶端部署定時任務,我們一般淩晨3點進行推送,如:
[root@maiyat backup]# echo "0 3 * * * sh /service/script/sudo-bak.sh" >>/var/spool/cron/root
[root@maiyat backup]# crontab -l |grep "sudo"
0 3 * * * sh /service/script/sudo-bak.sh
另外系統設置時間格式為:
date [MMDDhhmm[[CC]YY][.ss]
月 日 小時 分鐘 年 .秒
[root@maiyat backup]# date 070102592018.55
Sun Jul 1 02:59:00 CST 2018
[root@maiyat backup]#
3.2 rsync配合inotify進行實時同步
3.2.1 在rsync客戶端部署inotify,先必須查看一下系統內核是否支持inotify,如果存在以下3個文件就說明系統內核支持
[root@maiyat ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Jul 1 03:06 max_queued_events
-rw-r--r-- 1 root root 0 Jul 1 03:06 max_user_instances
-rw-r--r-- 1 root root 0 Jul 1 03:06 max_user_watches
3.2.2 下載inotify源碼包,並進行安裝,如:
[root@maiyat ~]# tar -zxf inotify-tools-3.14.tar.gz
[root@maiyat ~]# cd inotify-tools-3.14/
[root@maiyat inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14/
[root@maiyat inotify-tools-3.14]# echo $?
0
[root@maiyat inotify-tools-3.14]#
[root@maiyat inotify-tools-3.14]# make && make install
[root@maiyat local]# ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools
3.2.3 在rsync客戶端部署腳本,讓它自動監聽/var/log/sudo.log,如果有變化自動推送。
[root@maiyat script]# vim inotify.sh
#!/bin/bash
inotify=/usr/local/inotify-tools/bin/inotifywait
$inotify -mrq --format ‘%w%f‘ -e create,close_write,delete /var/log/sudo.log | while read file
do
cd / &&
rsync -az --delete /var/log/sudo.log [email protected]::backup/192.168.50.2/sudo.log --password-file=/etc/rsync.password
done
3.2.4 在rsync客戶端部署一個檢查腳本,自動檢查inotify有沒有運行,如果沒運行自動啟動inotify
[root@maiyat script]# vi check-iotify.sh
#!/bin/bash
a=`ps -ef |grep inotify |grep -v "grep"|wc -l`
if [ $a -ne 0 ];then
exit 1;
else
sh /service/script/inotify.sh &
fi
3.2.5 在rsync客戶端設置定時任務,每30分鐘執行檢查一次。並將inotify的腳本寫入rc.local裏,這樣inotify開機就會啟動,如果不小心被人kill掉,我們還是定時的核查腳本,當發現inotify被殺了以後,又會自動起來,如:
[root@maiyat script]# echo "*/30 * * * * sh /service/script/check-inotify.sh" >> /var/spool/cron/root
[root@maiyat script]# crontab -l |grep "check"
*/1 * * * * sh /service/script/check-inotify.sh
[root@maiyat script]#
[root@maiyat script]# echo "sh /service/script/inotify.sh &" >>/etc/rc.local
[root@maiyat script]# tail -1 /etc/rc.local
sh /service/script/inotify.sh &
[root@maiyat script]#
3.3 通過rsyslog服務來完成同步
因為是將本機的/var/log/sudolog 推送到遠端的備份服務器,所以本機就是客戶端,遠端的服務器就屬於rsyslog的服務端,這種方法不太推薦,因為推送的東西太多了,適合所有日誌的推送,就選擇這種,下面來介紹一下用法。
3.3.1 客戶端先做域名解析,然後寫入/etc/rsyslog.conf 配置文件中,然後重啟rsyslog服務,如:
[root@maiyat ~]# echo "192.168.50.4 logserver" >>/etc/hosts
[root@maiyat ~]# tail -1 /etc/hosts
192.168.50.4 logserver
[root@maiyat ~]# echo "*.info @logserver" >> /etc/rsyslog.conf
[root@maiyat ~]# tail -1 /etc/rsyslog.conf
*.info @logserver
[root@maiyat ~]# /etc/init.d/rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger:
3.3.2 服務端修改/etc/rsyslog.conf配置文件,啟用udp和tcp模塊 $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp,如:
[root@backup ~]# egrep -v "#|^$" /etc/rsyslog.conf
####開啟udp接收日誌
$ModLoad imudp
$UDPServerRun 514
$template RemoteHost,"/data/syslog/%$YEAR%-%$MONTH%-%$DAY%/%FROMHOST-IP%.log"
*.* ?RemoteHost
& ~
###########開啟udp接收日誌
$ModLoad imtcp
$InputTCPServerRun 514
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#######啟用/etc/rsyslog.d/*.conf目錄下所有以.conf結尾的配置文件
$IncludeConfig /etc/rsyslog.d/*.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#我們添加的客戶端配置的sudo.log日誌
local2.debug /var/log/sudo.log
[root@backup ~]#
3.3.3 重啟服務端的rsyslog服務,並測試看看是否成功
[root@backup ~]# /etc/init.d/rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
客戶端制作sudo日誌
[root@maiyat ~]# su - test
[test@maiyat ~]$ sudo -l
[test@maiyat ~]$ sudo useradd bvbv
[test@maiyat ~]$ exit
logout
[root@maiyat ~]#
服務端驗證結果:
[root@backup 2018-06-19]# cat 192.168.50.2.log
2018-07-01T06:23:21+08:00 maiyat sudo: test : TTY=pts/0 ; PWD=/home/test ; USER=root ; COMMAND=list
2018-07-01T06:23:30+08:00 maiyat sudo: test : TTY=pts/0 ; PWD=/home/test ; USER=root ; COMMAND=/usr/sbin/useradd bvbv
2018-07-01T06:23:30+08:00 maiyat useradd[3398]: new group: name=bvbv, GID=550
2018-07-01T06:23:30+08:00 maiyat useradd[3398]: new user: name=bvbv, UID=550, GID=550, home=/home/bvbv, shell=/bin/bash
2018-07-01T06:24:01+08:00 maiyat CROND[3409]: (root) CMD (sh /service/script/check-iotify.sh )
[root@backup 2018-06-19]#
結果驗證沒有問題,已經被審計到了,但是利用rsyslog審計方法雖然簡單方便,但是它統計的日誌是多個日誌放在了一個文件裏,造成了想看比較麻煩,而利用rsync推送可以把各個日誌按主機名日期文件名的方式集體的推送到備份服務器中,這樣實現的方式比較靈活。
全網日誌集中審計解決方案