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

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

第一种方法

#vi etcprofile

#设置history格式

exportHISTTIMEFORMAT=[%Y-%m-%d %H%M%S] [`who am i 2devnull

awk'{print $NF}'sed -e 's[()]g'`]

#记录shell执行的每一条命令

exportPROMPT_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;

exportLAST_CMD=$(history 1);

exportOLD_PWD=$PWD;'

第二种方法

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

#vi etcprofile

#用户登录时执行此脚本

#设置history显示格式

exportHISTTIMEFORMAT=[%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

whileread 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.要记录终端桌面下的命令需要重启。

学PHP、Linux、HTML5、UI、Android等视频教程(课件+笔记+视频)!联系Q2430675018

兄弟连linux课堂实录视频,领取联系Q2430675018

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值