User=zsf CMD=su Apr 2 22:11:16 localhost bash: HISTORY: PID=14141 PPID=14139 SID=14048 User=root CMD=w Apr 2 22:11:31 localhost bash: HISTORY: PID=14141 PPID=14139 SID=14048 User=root CMD=whoami Apr 2 22:11:45 localhost bash: HISTORY: PID=14141 PPID=14139 SID=14048 User=root CMD=exit Apr 2 22:11:47 localhost -bash: HISTORY: PID=14048 PPID=14047 SID=14048 User=zsf CMD=su - Apr 2 22:11:52 localhost -bash: HISTORY: PID=14163 PPID=14161 SID=14048 注意如果 root 用户没有被改为特殊的 bash,则 su 之后就无法记录。这上面可以比较 清楚地看到zsf这个用户执行了一系列命令之后su之后也执行了一些命令。 第二种方法通过修改 bash 源码实现记录命令的功能,可以防止黑客通过修改变量阻止 istory 记录。针对其它版本的 bash,也可以进行相应修改,其主要思路来源于 bash 自身 的工作方式,bash 接收命令之后会执行,也会有添加记录到 history 的功能,那只需要在 执行命令之前记录到syslog或者在记录到history的时候也记录到syslog就可以了,代码 量上也不多,主要是加一句syslog调用函数,再加上其它需要记录的值就可以了。 User=root CMD=w Apr 2 22:11:55 localhost -bash: HISTORY: PID=14163 PPID=14161 SID=14048 User=root CMD=who Apr 2 22:11:56 localhost -bash: HISTORY: PID=14163 PPID=14161 SID=14048 User=root CMD=id Apr 2 22:11:59 localhost -bash: HISTORY: PID=14163 PPID=14161 SID=14048 User=root CMD=exit Syslog 集中发往日志服务器 前面已经能实现将命令记录到syslog了,那么接下来我们将syslog统一发往日志服务 器。搭日志服务器非常简单,只需修改一个配置文件/etc/sysconfig/syslog就可以了。 将 SYSLOGD_OPTIONS="-m 0"改为-r然后重启下syslog服务,会看到514端口处于监听 [root@linuxtest ~]# cat /etc/sysconfig/syslog | less # Options to syslogd # -m 0 disables 'MARK' messages. # -r enables logging from remote machines # -x disables DNS lookups on messages recieved with -r # See syslogd(8) for more details SYSLOGD_OPTIONS="-m 0" 将 SYSLOGD_OPTIONS="-m 0"改为-r然后重启下syslog服务,会看到514端口处于监听 状态: [root@linuxtest ~]# netstat -nlpu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:514 0.0.0.0:* 32482/syslogd [root@linuxtest ~]#
注意 iptables防火墙设置,允许其它机器连接日志服务器的514的 udp端口。 |