用日志记录Linux用户执行的每一条命令(history)

工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器

第一种方法

# vi /etc/profile

		#设置history格式
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] "
#记录shell执行的每一条命令
export PROMPT_COMMAND='\
if [ -z "$OLD_PWD" ];then
    export OLD_PWD=$PWD;
fi;
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then
    logger -t `whoami`_shell_cmd "[$OLD_PWD]$(history 1)";
fi ;
export LAST_CMD="$(history 1)";
export OLD_PWD=$PWD;'		 

=====下面是第二种方法,较笨=====

第一步:全局设置(这是一次性设置,需要root用户权限

命令# vi /etc/profile #用户登录时执行此脚本 #设置history显示格式 export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`] " #登录时清空当前缓存 echo "" > .bash_history

第二步:不同用户分别设置

命令# source /etc/profile

命令# vi /home/user1/.bash_logout

#当用户退出登录时会执行此脚本 tmpfile="/tmp/`whoami`_history.tmp" #把格式化的history记录到文件里 history > $tmpfile #读取文件,一行一行把文件内容发送到给syslogd。 #不要试图用"history | logger"或"logger -f $tmpfile"来替代下面的代码,否则将只能记录前200行。 k=1 while read line; do ((k++)) logger -t `whoami`_shell_cmd "$line" done < $tmpfile rm -f $tmpfile (如果还有其它用户需要监控,则重复第二步骤) 第三步:把日志发送给远程主机(可选)

# vi /etc/rsyslog.conf

#增加如下行,IP自己换,也可以用域名,@表示用UDP协议,@@表示用TCP协议

*.* @192.168.0.1

不足之处:

1. 不能实时记录命令并发送log

2. 要记录终端桌面下的命令需要重启。 ==========

原创文章,转载请保留原文链接:http://www.wenwenyun.com/opration/shell/2015/0429/3686.html

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-07-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏禁心尽力

持久层框架之MyBatis

1、mybatis框架介绍:   MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software founda...

28650
来自专栏Janti

Mysql双机热备配置(超详细多图版)

一、双击热备介绍 1.基本概念 双机热备特指基于高可用系统中的两台服务器的热备(或高可用),双机高可用按工作中的切换方式分为:主-备方式(Active-Sta...

1.4K60
来自专栏云计算教程系列

如何在Ubuntu 14.04上将Symfony应用程序部署到生产环境中

Symfony是一个用PHP编写的开源Web框架,适用于构建任何规模的项目。它提供了一个基于可重用组件的精心设计的结构,您可以在其上构建自己的PHP应用程序。

33920
来自专栏张善友的专栏

linux下增加磁盘改变指定文件路径分区挂载点和迁移数据

Centos7 系统上原有目录/data 挂载根目录下,空间有点小,我们需要把/data目录挂载到另一个磁盘,同时把数据迁移。 1.查看分区情况 fdisk ...

26950
来自专栏抠抠空间

解决redis远程连接不上的问题

redis现在的版本开启redis-server后,redis-cli只能访问到127.0.0.1,因为在配置文件中固定了ip,因此需要修改redis.conf...

1.7K30
来自专栏张善友的专栏

linux下增加磁盘改变指定文件路径分区挂载点和迁移数据

45950
来自专栏JetpropelledSnake

在Pycharm中配置Github

Pycharm是当前进行python开发,尤其是Django开发最好的IDE。GitHub是程序员的圣地,几乎人人都在用。

10120
来自专栏程序员同行者

mongodb主从配置及备份

26420
来自专栏刘君君

MySQL5.7安装常见问题

36740
来自专栏酷玩时刻

安装Mysql5.7并修改初始密码

Centos 安装MySQL可以参考之前写的一篇文章 Centos7.3 安装Mysql5.7并修改初始密码

18520

扫码关注云+社区

领取腾讯云代金券