安全审计这块我能想到的有两种方案可以解决,一种是在Linux中配置实现,一种是使用Python开发堡垒机实现,我先实现了第一种比较简单的:后面会开发堡垒机:
一、首先我们需要在/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
二、然后需要在/etc/bashrc配置:
HISTFILESIZE=10000
HISTSIZE=10000
#定义执行history命令的时候,输出的格式
HISTTIMEFORMAT="%F %T `who am i |awk '{print $1}'` : "
export HISTTIMEFORMAT
注意:上面的两个配置需要在所有的客户端服务器配置
三、使用rsync+inotify实现命令文件的实时传输
3.1、首先需要搭建一个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.2、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的用户在操作的话,可以删除自己执行的命令文件,安全性不是特别高,所以要实现高安全的审计,还需要自己开发堡垒机去实现,下一章就开始