[TOC]
Linux的rsyslog日志服务器配置:
vi /etc/rsyslog.conf
#将其中下面四行的注释取消
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####中加入如下内容:
$template IpTemplate,"/var/log/%FROMHOST-IP%.log"
*.* ?IpTemplate
& ~
#说明:实现在接收远程的日志为客户端IP地址命名。
#重新启动rsyslogd服务
service rsyslog restart
Linux的rsyslog日志客户端配置:
#vi /etc/rsyslog.conf
local1.debug @@192.168.0.66
#然后重新启动rsyslogd服务
service rsyslog restart
描述:将history 命令记录发往Rsyslog服务器,即将Linux history 记录发往本地/远程Rsyslog 服务器的2种方法。
syslog日志收集:
描述:从bash4.1 版本开始支持Rsyslog,所以我们需要下载bash4.1以后版本修改bash源码支持syslog记录,首先下载bash源码可以从gnu.org下载,并且系统需要安装gcc等编译环境;
1.修改两处源码:
#bash_syslog_history 函数里面
void bash_syslog_history (line)
if (strlen(line) < SYSLOG_MAXLEN) {
syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: PID=%d UID=%d USER=%s CMD=%s", getpid(), current_user.uid, current_user.user_name,line);
}else{
strncpy (trunc, line, SYSLOG_MAXLEN);
trunc[SYSLOG_MAXLEN - 1] = '\0';
syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY (TRUNCATED): PID=%d UID=%d USER=%s CMD=%s", getpid(), current_user.uid, current_user.user_name,trunc);
}
#效果
HISTORY (TRUNCATED): PPID=%d PID=%d SID=%d UID=%d User=%s %s", getppid(), getpid(), getsid(getpid()), current_user.uid, current_user.user_name, trunc
# 里定义syslog的FACILITY为 user (用户级别的日志)级别为info
#define SYSLOG_HISTORY
#if defined (SYSLOG_HISTORY)
# define SYSLOG_FACILITY LOG_USER
# define SYSLOG_LEVEL LOG_INFO
# define OPENLOG_OPTS LOG_PID
#endif
#if defined (SYSLOG_HISTORY)
#define SYSLOG_SHOPT 1
#endif
2.编译与修改/etc/passwd 修改用户的登录shell (当然也可以直接替换原先的bash)
./configure --prefix=/usr/local/bash && make && make install
#修改用户的默认bash
root:x:0:0:root:/root:/usr/local/bash/bin/bash
f3:x:1004:1004::/home/f3:/usr/local/bash/bin/bash
#建立软连接
$ln -s /usr/local/bash/bin/bash /usr/bin/bash
3.修改/etc/rsyslog.conf最后重启rsyslog
#将FACILITY为user且日志级别为info的信息发往 远程rsyslog 服务器 10.1.100.1
user.info @@10.1.100.1
备注:
描述:不修改bash源码,利用trap和logger命令将执行命令记录发往远程Rsyslog 服务器
1.编辑/etc/profile文件:
# cat >> /etc/profile
function log2syslog(){
#过滤PS命令执行(每次执行都有) 或者采用 PROMPT_COMMAND 系统变量代替下面
if [ 'printf "\033]0;%[email protected]%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' != "$BASH_COMMAND" ];then
logger -p user.notice -t bash-$$ -i -n 192.168.1.88 -- "${SSH_CONNECTION} - ${USER} - ${PWD} - ${BASH_COMMAND}"
fi
}
trap log2syslog DEBUG
#函数解释一下:
我们知道用户登录之后shell 都会执行/etc/profile中的内容在shell中每执行一次命令都是一个activity,`trap log2syslog DEBUG`意为对shell中的每一个activity都执行一遍log2syslog 函数
logger 是一个向syslog发送日志的接口:-p 表示syslog的Facility -t 表示tag -n 表示远程syslog 地址 # 信息之间用— 隔开
$BASH_COMMAND 表示 最新执行的shell命令
$$ 表示当前shell的进程id
$SSH_CONNECTION 当前ssh连接的tcp socket 五元组信息
$USER 表示当前执行命令的用户
$PWD 表示执行命令时所在目录
2.vim /etc/rsyslog.conf
增加修改配置后user.* @@192.168.1.88
,重启rsyslog service rsyslog restart
#log日志服务器
user.* @@192.168.1.88:514
Aug 2 13:42:35 10.10.107.222 master local1 notice bash-12610[12650] 192.168.1.88 52965 10.10.107.222 22 - root - /root - grep --color=auto "12610"
注意事项: