bash记录所有用户的历史记录,监控用户一举一动

转载 2016年06月01日 14:23:40

https://www.52os.net/articles/bash-log-all-history-to-syslog.html?utm_source=tuicool&utm_medium=referral

bash记录所有用户的历史记录

bash是多数Linux发行版默认的shell,虽然不及zsh好用,但比其它的shell好太多。
我们的生产服务器很多,没有用跳板机,又是多人共用root用户,为了审计用户操作,需要记录执行命令的用户、时间和ip等信息。本文之所以要优化,主要是因为bash默认配置存在以下几点不足:

  1. 历史记录保存数目有限,默认1000条
  2. 记录不详细,不记录命令执行时间/执行用户名/用户ip等
  3. 历史记录会丢失,主要有两种情况: 1. bash异常退出 2.同一用户多处登录或开了多个会话,只会记录最后退出的会话历史
上面这三点不足,都可以通过调整bashrc的参数解决,怎么做就不说了。服务器这么多,如何用最省事方法解决才是关键。我采用的是用syslog记录bash历史命令

一、常规配置syslog做法

1.1 配置全局bash历史记录格式
编辑/etc/bashrc(centos)或/etc/bash.bashrc(debian),增加:

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(who am i) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

1.2 配置rsyslog
新增文件/etc/rsyslog.d/bash.conf,内容:

local6.*    /var/log/bash_history.log

重启rsyslog :

service rsyslog restart

1.3 配置日志分割
虽然bash历史记录不会占用太多空间,但为了方便查看还是用logrotate分割一下。,按天切分日志,新建文件/opt/logrotate_bash.conf,内容:

/var/log/bash_history.log
{
   sharedscripts
   postrotate
   /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
  endscript
}

添加定时任务:

59 23 *  *  * root /usr/sbin/logrotate -f /opt/logrotate_bash.conf

如果不介意两天的日志混在一起,可以直接将/var/log/bash_history.log加入/etc/logrotate.d/syslog中即可。

二、使用logger命令记录到syslog

服务器这么多,这样配置有些麻烦,能不能更简单一点,答案是可以的。logger命令是一个shell接口,可以通过它使用Syslog日志系统。直接编辑/etc/profile文件,在最后加入:

    function log2syslog
    {
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] "
export PROMPT_COMMAND='\
  if [ -z "$OLD_PWD" ];then
        export OLD_PWD=$(pwd);
  fi;
  if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
        logger  `whoami`_shell_cmd "[$OLD_PWD]$(history 1)";
  fi ;
  export LAST_CMD="$(history 1)";
  export OLD_PWD=$(pwd);'
}   
trap log2syslog DEBUG

即可将bash的历史记录打入/var/log/message中,同时系统会自动切割,查看命令只需grep一下shell_cmd即可,美中不足是cronjob不是每天0点执行,所以日志不是按天分割,两天的日志会混在一起

三、直接打到指定文件

bash命令即使记录时间非常久也很小,不需要切割;同时为方便查看,不想bash历史日志和message日志混在一起,所以需要单独打到一个文件中。只需按第二种做法稍稍改变一下即可,同样编辑/etc/profile文件,在最后加入:

    function log2file
    {
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] "
export PROMPT_COMMAND='\
  if [ -z "$OLD_PWD" ];then
        export OLD_PWD=$(pwd);
  fi;
  if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
        echo  `whoami`_shell_cmd "[$OLD_PWD]$(history 1)" >>/var/log/bash_history.log;
  fi ;
  export LAST_CMD="$(history 1)";
  export OLD_PWD=$(pwd);'
}   
trap log2file DEBUG

将logger命令改成echo,即可将bash历史记录打到/var/log/bash_history.log

四、三种做法的效果

正常做法,使用syslog,日志输出到/var/log/bash_history.log ,格式:

Feb 20 01:44:07 Centos-Test root: root     pts/2        2016-02-20 01:44 (will-pc.52os.net) [17983]: ps -ef [0]
第二种方法,通过logger使用syslog,日志输出到/var/log/messages,格式:

Feb 20 01:37:44 Centos-Test root: root_shell_cmd [/etc/rsyslog.d] 1179  [2016-02-20 01:37:44] [will-pc.52os.net] ps -ef
第三种方法,不用syslog直接打到文件,日志输出到/var/log/bash_history.log,格式:

root_shell_cmd [/root] 76 [2016-03-27 07:27:41] [10.11.15.41] vim /var/log/messages

如何使linux系统下的root用户不保存终端历史记录到.bash_history中

———————————————— 1)history -c  //是把Linux下的/root/.bash_history  全给清了,实现不保存,作为黑客是不地道的。 再从其他终端倒腾回去: ...

如何实现用户的历史记录功能(最多n条)

实际案例很多应用程序都有浏览用户的历史记录的功能,如: 浏览器可以查看最近访问过的网页; 视频播放器可以查看最近播放过的视频文件; Shell可以查看用户输入过的命令; …… ...

Linux查看用户登陆历史记录(last命令的使用)

查看某用户 cat /home/username/.bash_history 的操作历史   使用root登陆使用last -x可查看用户登陆历史。   last 命令:   功能说明:列...

关于用户浏览商品的历史记录(cookie)

创建对象:用集合模拟数据库:创建一个简单的内容显示界面package com.cn.cookie; import java.io.IOException; import java.io.PrintW...

python 2-7 如何实现用户的历史记录功能(最多n条)collections.deque/pickle持久存储

2-7 如何实现用户的历史记录功能(最多n条)collections.deque/pickle持久存储 使用collections deque,设定最大元素个数N,如果超过N,就会把最早进入队列的元...

Linux下查看/管理当前登录用户及用户操作历史记录

一、查看及管理当前登录用户 1、使用w命令查看登录用户正在使用的进程信息,w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命...

Bash的应用--2.命令历史记录

Bash的应用   二、命令历史记录 Bash支持命令历史记录,这意味着Bash保留了一定数目的、先前在Bash中输入过的命令。这个数目取决于一个名为HISTSIZE的变量。 Bash将输入的...

悄悄记录用户一举一动

  • 2006年02月23日 09:05
  • 31KB
  • 下载

关于Unix/Linux下查看命令行历史记录(history/.bash_history)

关于Unix/Linux下查看命令行历史记录(history/.bash_history) 转自::http://blog.csdn.net/pan_tian/article/details/7...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bash记录所有用户的历史记录,监控用户一举一动
举报原因:
原因补充:

(最多只允许输入30个字)