工做中,须要把用户执行的每个命令都记录下来,并发送到日志服务器的需求,为此我作了一个简单的解决方案。这个方案会在每一个用户退出登陆 时把用户所执行的每个命令都发送给日志守护进程rsyslogd,你也可经过配置“etcrsyslog.conf”进一步将日志发送给日志服务器linux
第一种方法shell
# vi etcprofile缓存
#设置history格式bash
export HISTTIMEFORMAT=[%Y-%m-%d %H%M%S] [`who am i 2devnull 服务器
awk '{print $NF}'sed -e 's[()]g'`] 并发
#记录shell执行的每一条命令运维
export PROMPT_COMMAND='tcp
if [ -z $OLD_PWD ];thenspa
export OLD_PWD=$PWD;.net
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 etcprofile
#用户登陆时执行此脚本
#设置history显示格式
export HISTTIMEFORMAT=[%Y-%m-%d %H%M%S] [`who am i 2devnull
awk '{print $NF}'sed -e 's[()]g'`]
#登陆时清空当前缓存 echo .bash_history
第二步:不一样用户分别设置
# source etcprofile
# vi homeuser1.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 etcrsyslog.conf
#增长以下行,IP本身换,也能够用域名,@表示用UDP协议,@@表示用TCP协议
. @192.168.0.1
不足之处:
1. 不能实时记录命令并发送log
2. 要记录终端桌面下的命令须要重启。
免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/
学PHP、Linux、HTML五、UI、Android等视频教程(课件+笔记+视频)!联系Q2430675018
兄弟连linux课堂实录视频,领取联系Q2430675018