安全審計這塊我能想到的有兩種方案能夠解決,一種是在Linux中配置實現,一種是使用Python開發堡壘機實現,我先實現了第一種比較簡單的:後面會開發堡壘機:
1、首先咱們須要在/etc/profile中配置
#獲取本地IP地址以及原始登陸用戶
USER_IP=`ifconfig eth3 |grep "inet addr"|awk '{print $2}'|awk -F':' '{print $2}'`
login_user=`who am i |awk '{print $1}'`
#定義命令存放的文件夾
HISTDIR=/usr/share/.history
if [ -z $USER_IP ]
then
USER_IP=`hostname`
fi
#在.history目錄下建立原始用戶目錄
if [ ! -d $HISTDIR/${login_user} ]
then
mkdir -p $HISTDIR/${login_user}
chmod 300 $HISTDIR/${login_user}
fi
DT=`date +%Y%m%d`
#生成用戶所操做的命令文件(這個文件須要用戶關閉登陸的時候纔會生成)
export HISTFILE="$HISTDIR/${login_user}/${USER_IP}.history.$DT"
export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]"
#改變文件的權限,這樣原始用戶才能讀到歷史命令,不過只限於本天的
chmod 644 $HISTDIR/${login_user}/*.history* 2>/dev/null
2、而後須要在/etc/bashrc配置:
HISTFILESIZE=10000
HISTSIZE=10000
#定義執行history命令的時候,輸出的格式
HISTTIMEFORMAT="%F %T `who am i |awk '{print $1}'` : "
export HISTTIMEFORMAT
注意:上面的兩個配置須要在全部的客戶端服務器配置
3、使用rsync+inotify實現命令文件的實時傳輸
3.一、首先須要搭建一個rsync server端
增長配置文件/etc/rsyncd.conf:
uid = root
gid = root
secrets file = /etc/rsync.password
auth users = rsync_test
log file = /var/log/rsyncd.log
#自定義名稱,不過要與下面的模塊名稱一致
[rsync_backup]
#傳輸要寫入的目錄
path = /data1/rsync_backup
#模塊名
comment = rsync_backup
read only = no
list = no
增長密碼文件/etc/rsync.password:
#格式爲:用戶名:密碼
rsync_test:rsync@123qaz
chmod 600 /etc/rsyncd.conf && chmod 600 /etc/rsync.password
&& mkdir /data1/rsync_backup
而後就能夠直接執行 rsync --daemon運行了
3.二、client配置:
客戶端也須要增長一個密碼文件/etc/rsync.pass,裏面的密碼就是你剛纔在server端建立的密碼
而後須要安裝inotify工具:
創建一個腳本實現自動傳輸(/opt/scripts/rsync_users_history.sh):
#!/bin/bash
/usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e 'close_write,modify,delete,create' /usr/share/.history/ |while read file
do
rsync -az /usr/share/.history/ rsync_test@10.122.33.132::rsync_backup --password-file=/etc/rsync.pass
done
運行腳本實現實時傳輸:
nohup sh /opt/scripts/rsync_users_history.sh >> /var/log/rsync.log &
測試
總結:
優勢:
能夠實現安全審計的功能,存儲每一個用戶的執行命令
缺點:
若是一個懂Linux的用戶在操做的話,能夠刪除本身執行的命令文件,安全性不是特別高,因此要實現高安全的審計,還須要本身開發堡壘機去實現,下一章就開始