前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用日志记录Linux用户执行的每一条命令(history)

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

作者头像
小小科
发布2018-05-02 17:08:31
2.5K0
发布2018-05-02 17:08:31
举报

工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录时把用户所执行的每一个命令都发送给日志守护进程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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一种方法
  • =====下面是第二种方法,较笨=====
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档