欢迎光临
我们一直在努力

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

摘要

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

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

history记录日志

赞(0) 打赏
主机商所有内容均来自网络,若无意侵犯到您的权利,请及时与联系 QQ 2232175042,将在48小时内删除相关内容!!主机测评网 » 用日志记录Linux用户执行的每一条命令(history)

主机商评测网 找服务器 更专业 更方便 更快捷!

专注IDC行业资源共享发布,给大家带来方便快捷的资源查找平台!

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫