linux日志服务器审计客户端history记录

需求

  将每台服务器上的每个用户执行的命令、执行时间、登录时间、主机ip、当前切换用户等信息保存到本地并实时传输至日志服务器进行异地保存。

IPhostname角色
10.10.99.1test1rsyslog-server
10.10.99.2test2rsyslog-client

工具及服务

1.logger
logger是一个shell接口,可以通过该接口使用rsyslog的日志模块。

usage: logger [-is] [-f file] [-p pri] [-t tag] [-u socket] [ message ... ]
-i 逐行记录每一次logger的进程id
-f file记录特定的文件
-p 输入消息的特定优先级,默认是'user.notice'
-t tag为每行信息打上特定的标签
-u 以特定的socker代替内嵌系统常规工作

2.rsyslog日志服务器
rsyslog是syslog的加强版,可以用作客户端及服务器,我们可以使用local0~local7来自定义设备传输至rsyslog。

3.PROMPT_COMMAND
Linux系统的环境变量PROMPTCOMMAND的内容会在bash提示符显示之前被执行。该环境变量的默认值是 history -a 功能是将目前新增的history追加到histfiles 中,默认写入隐藏文件~/.bashhistory中

实现

一、配置rsyslog日志服务器

vim /etc/rsyslog.conf
#添加以下几行

#启动udp端口也可以是tcp端口
$ModLoad imudp
$UDPServerRun 514
#设置白名单
$AllowedSender UDP, 192.168.3.0/24, 10.0.0.0/8
#配置模板,以客户端ip为目录,以日期命名文件
$template IpTemplate,"/var/log/remote/%FROMHOST-IP%/%$YEAR%-%$MONTH%-%$DAY%.log"
#把非本地传输的日志按照指定的模板存放
:fromhost-ip, !isequal, "127.0.0.1" ?IpTemplate
# & 表示已经匹配处理的内容,~ 表示不再进行其他处理
& ~

#重启服务
service rsyslog restart

二、配置rsyslog客户端
1.配置PROMP_COMMAND

vim /etc/bashrc
readonly PROMPT_COMMAND='logger -p local3.notice -t bash "$(ifconfig | grep -E "eth|em" -A 1 | grep "10.10" | grep -oP "(?<=addr:)[\d\.]+")  $(who am i |awk "{print \$1\" \"\$2\" \"\$3\" \"\$4\" \"\$5}") [`pwd`] currentuser=$(whoami) command=$(history 1 | { read x cmd; echo "$cmd"; })"'

source /etc/bashrc

其中:
local3.notice 使我们自定义的设备,用于rsyslog调用;
bash 是我们为每行打印的信息打印的tag;
ifconfig | grep -E “eth|em” -A 1 | grep “10.10” | grep -oP “(?<=addr:)[\d.]+用于获取我们服务器的ip;
who am i |awk “{print $1\” \”$2\” \”$3\” \”$4\” \”$5}”用于获取我们当前用户的登录信息;
pwd用于列出我们当前所在的目录;
whoami用于获取我们当前切换的执行命令的用户,例如我们从test 用户 sudo -i,执行命令的用户为root,但是登录的用户test,方便我们区分;
command 是我们当前用户执行的命令。

注意:
1.我们需要在/etc/bashrc或/etc/profile中添加环境变量,用于所有用户。
2.export PROMPT_COMMAND 如果将PROMPT_COMMAND导出到用户工作区,那么对于有经验的用户就可以做赋值操作 export PROMPT_COMMAND =“” ,简单的语法就会导致记录功能当前session端不可用,所以PROMPT_COMMAND必须设置成只读的属性,readonly PROMPT_COMMAND

2.配置rsyslog客户端

vim /etc/rsyslog.conf
#添加如下行
#添加local3.none
*.info;mail.none;authpriv.none;cron.none;local3.none                /var/log/messages
#保存到本地的文件
local3.notice /var/log/audit.log
#远程日志服务器
local3.notice @10.10.99.1

#重启
service rsyslog restart

其中:
1.local3.notice 是在logger中定义的设备,rsyslog调用并将打印信息输出至指定文件。
2.添加local3.none是避免日志写入/var/log/messages

3.配置轮转日志

vim /etc/logrotate.d/rsyslog
/var/log/audit.log{
    daily
    rotate 4
    missingok
    notifempty
    nocompress
    create
    dateext
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

#强制轮转
logrotate -vf /etc/logrotate.d/rsyslog

ls /var/log|grep audit
audit.log  audit.log-20170420 

测试

1.rsyslog客户端

[test@test2 ~]$ ls
test  test.sh
[test@test2 ~]$ cat test.sh
[test@test2 ~]$ sudo -i
[root@test2 ~]$ vim /var/log/audit.log
#查看日志文件
Apr 20 11:35:31 test2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/home/test] currentuser=test command=ls
Apr 20 11:36:13 test2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/home/test] currentuser=test command=cat test.sh
Apr 20 11:36:55 test2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/home/test] currentuser=test command=vim /var/log/audit.log
Apr 20 11:36:58 tset2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/root] currentuser=root command=exit
Apr 20 11:36:58 tset2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/root] currentuser=root command=ls

注意:我们切换成root的记录,登录用户仍为test,但是我们通过currentuser=root得知test用户已经切换成root了

2.rsyslog服务器

查看从客户端传过来的日志目录

[test@test1 remote]# tree /var/log/remote/
/var/log/remote/
└── 10.10.99.2
    └── 2017-04-20.log
[test@test1 remote]# cat 2017-04-20.log
Apr 20 11:35:31 test2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/home/test] currentuser=test command=ls
Apr 20 11:36:13 test2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/home/test] currentuser=test command=cat test.sh
Apr 20 11:36:55 test2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/home/test] currentuser=test command=vim /var/log/audit.log
Apr 20 11:36:58 tset2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/root] currentuser=root command=exit
Apr 20 11:36:58 tset2 bash: 10.10.99.2  test pts/1 2017-04-20 08:20 (10.11.2.102) [/root] currentuser=root command=ls
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值