通过syslog远程发送bash 命令日志

来源:互联网 发布:windows phone系统 编辑:程序博客网 时间:2024/05/14 23:16
2008-12-08 15:50

 

实现bash bash history日志通过syslog远程发送的方式很多,主要有以下3种:

1、在/etc/bashrc全局配置文件添加

2、修改bash源码

3、加载内核模块

1,2方法只是记录与history类似的命令执行日志,无法记录通过程序或者脚本执行命令。3方法一般通过拦截系统调用exec实现,可以记录所有通过exec系统调用的命令执行情况,但是无法记录bash 内嵌命令的执行。另外在内核进行修改,需要考虑稳定性以及性能影响问题,测试时间较长。

1、在/etc/bashrc全局配置文件添加

//记录命令日志到用户目录下的.history-timestamp目录

export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y;});user=$(whoami); echo $(date "+%Y-%m-%d %H:%M:%S"):$user:$msg:$(
who am i); } >> $HOME/.history-timestamp'

//记录命令日志到syslog

export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y;});user=$(whoami); logger $(date "+%Y-%m-%d %H:%M:%S"):$user:$msg:$(whoam i); }'

2、修改bash源码(lib/下)

    通过给bash加patch也可以实现,网上可以查到的现成的patch都是针对特定bash版本的,如果刚好可以找到所须版本,使用配置会比较方便。

以下以bash-3.0.16为例,说明如何直接修改bash代码实现。(lib/readline/history.c)

   1) 代码修改

     history.c文件中add_history (string)负责完成命令日志记录,因此如果只是想简单的通过syslog远程发送history,在此函数中添加远程日志发送功能即可。下面红色标识代码为添加部分

注:syslog日志记录,当前用户名,登录用户名 终端 命令

/* Place STRING at the end of the history list. The data field
   is set to NULL. */
void
add_history (string)
     const char *string;
{
HIST_ENTRY *temp;

if (strlen(string)<600) {
   syslog(LOG_LOCAL5 | LOG_INFO, "%s %s %s %s",getenv("LOGNAME"),getlogin(),ttyname(0),string);

    }
    else {
      char trunc[600];
      strncpy(trunc,string,sizeof(trunc));
      trunc[sizeof(trunc)-1]='/0';
    syslog(LOG_LOCAL5, LOG_INFO, "%s %s %s %s(++TRUNC)",getenv("LOGNAME"),getlogin(),ttyname(0), trunc);
    }


if (history_stifled && (history_length == history_max_entries))
    {

.............................

   2)编译 ./configure --prefix=/usr/local/bash-syslog-3.0.16;make;make install

   3)创建测试帐号 useradd -s =/usr/local/bash-syslog-3.0.16/bin/bash simple

   4) 以test帐号远程登录,执行命令,然后su 到root,可在/var/log/message中看到类似日志:

Dec 9 18:58:26 hostname bash: simple liuruihong /dev/pts/0 exit
Dec 9 18:58:30 hostname bash: simple liuruihong /dev/pts/0 crontab -e
Dec 9 18:59:18 hostname bash: simple liuruihong /dev/pts/0 date
Dec 9 18:59:25 hostname bash: simple liuruihong /dev/pts/0 crontab -e
Dec 9 18:59:37 hostname bash: simple liuruihong /dev/pts/0 crontab -e
Dec 9 18:59:45 hostname bash: simple liuruihong /dev/pts/0 date

Dec 9 18:57:18 hostname bash: root simple /dev/pts/2 echo "ssssssss"
Dec 9 18:57:18 hostname bash: root simple /dev/pts/2 echo "llllllllllll"
Dec 9 18:57:18 hostname bash: root simple /dev/pts/2 exit
Dec 9 18:57:18 hostname bash: root simple /dev/pts/2 ls

3、加载内核模块

http://www.securityfocus.com/tools/877

http://www.securityfocus.com/tools/1667

注: script命令也可以

资源:

http://bugs.gentoo.org/attachment.cgi?id=57967&action=edit

原创粉丝点击