rsyslog 是标准Linux系统的一部分,能够实时的写日志,并且还可以将日志选择性的发送到远程日志服务器。
要审计用户执行的命令,简单的依赖.bash_history 或 script 是不可靠的,两者虽然记录了用户行为,但是可能被用户篡改。利用rsyslog 可以将日志实时写入远程日志服务器,从而杜绝用户篡改,提高审计材料的真实度。
以ubuntu为例,下面的办法可以让rsyslog记录用户所执行的命令以及时间戳,供审计使用。
1、rsyslog 添加日志
1
|
echo
"local6.* /var/log/commands.log"
>
/etc/rsyslog
.d
/bash
.conf
|
2、在/etc/profile 中加入
1
2
3
4
5
6
7
8
|
function
bash2syslog {
declare
command
command
=$(fc -
ln
-0 2>
/dev/null
||
true
)
if
[
"$command"
!=
""
];
then
logger -p local6.notice -t
bash
--
"$(who am i)"
$PWD $USER:
"$command"
fi
}
trap
bash2syslog DEBUG
|
这里写入本地日志。然后rsyslog直接将日志写入远程服务器 。
建议root 用户的umask 值设置为027或者007,防止/var/log/commands.log文件被普通用户查看到。
3、日志轮转
编辑/etc/logrotate.d/rsyslog 在中间增加一段
1
2
3
4
5
6
7
8
9
10
11
12
13
|
/var/log/commands.log
{
rotate 30
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
|
4、重启rsyslog,用户退出重新登陆
1
|
service rsyslog restart
|
5、rsyslog 发送日志到远程服务器(可选)
1
|
echo
"local6.* @@192.168.0.2"
>>
/etc/rsyslog
.conf
|
6、利用watchdog监视rsyslog,如果服务被停止,则重启机器 (可选)
1
2
3
4
5
6
7
8
9
10
11
|
apt-get
install
watchdog
update-rc.d watchdog defaults
Cat >>
/etc/watchdog
.conf <<EOF
watchdog-device =
/dev/watchdog
admin = root
interval = 1
logtick = 1
log-
dir
=
/var/log/watchdog
pidfile =
/var/run/rsyslogd
.pid
EOF
|
7、目标日志服务器配置 /etc/rsyslog.d/commands-audit.conf
1
2
|
$template LOG_BY_HOSTIP, "/var/log/command-audit/%fromhost-ip%-commands.log"
local6.notice ?LOG_BY_HOSTIP
|
本文转自 紫色葡萄 51CTO博客,原文链接:http://blog.51cto.com/purplegrape/1544117,如需转载请自行联系原作者