欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux中将执行过的命令记录到日志并发送到服务器的方法

程序员文章站 2023-09-04 22:49:47
这篇文章主要介绍了Linux中将执行过的命令记录到日志并发送到日志服务器的方法,包括对缓存的删除处理等功能的实现,需要的朋友可以参考下... 15-12-18...

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

Linux中将执行过的命令记录到日志并发送到服务器的方法