現實生活中,有可能伺服器會遭到駭客的攻擊 而大部分的駭客都會把存在系統上的 history 記錄清掉 讓你搞不清楚他做了些什麼

這篇文章主要要記錄,如何透過 syslog 可以備份本地端的 history 到 遠端的 syslog server

1.下載 bash

$ wget http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz
$ tar zxvf bash-4.2.tar.gz -C /usr/local/bash-4.2
$ cd /usr/local/bash-4.2

2.修改 bashhist.c 內的 bashsysloghistory function 約在 708 行

去掉 bash-4.2/config-top.h 中的 define SYSLOG_HISTORY 的注釋

#if defined (SYSLOG_HISTORY)
#define SYSLOG_MAXLEN 600

void
bash_syslog_history (line)
     const char *line;
{
  char trunc[SYSLOG_MAXLEN];
  char vmip[20];

  get_local_ip(&vmip);

  if (strlen(line) < SYSLOG_MAXLEN)
    syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY: VMIP=%s PID=%d PPID=%d SID=%d User=%s CMD=%s", vmip, getpid(), getppid(), getsid(getpid()), current_user.user_name, line);
  else
    {
      strncpy (trunc, line, SYSLOG_MAXLEN);
      trunc[SYSLOG_MAXLEN - 1] = '\0';
      syslog (SYSLOG_FACILITY|SYSLOG_LEVEL, "HISTORY (TRUNCATED): VMIP=%s PID=%d PPID=%d SID=%d User=%s CMD=%s", vmip, getpid(), getppid(), getsid(getpid()), current_user.user_name, trunc);
    }
}
#endif

3.編譯安裝

$ ./configure
$ make
$ make install

4.把 User 的 bash 換成現在安裝的 bash4.1

這樣 log 就會記錄在 /var/log/syslog

$ vim /etc/passwd

    dongwm:x:501:501::/home/dongwm:/usr/local/bash_4.1/bin/bash

5.syslog server 配置(加入 syslog server 的位址)

$ vim /etc/rsyslog.conf

    .  @your.syslog.server.ip

Ref.

  • http://www.zdh1909.com/html/linux/17097.html
  • http://ftp.gnu.org/gnu/bash/