用日志记录Linux用户执行的每一条命令(history)
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>第一种方法</li><li>第二种方法<ul class="second_class_ul"><li>第一步:全局设置(这是一次性设置,需要root用户权限)</li><li>第二步:不同用户分别设置</li><li>第三步:把日志发送给远程主机(可选)</li></ul></li></ul></div><span class="abstract"><fieldset><legend>摘要</legend>
<p>工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录 时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器</p>
<div class="clear"></div>
</fieldset></span>
<p>工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录 时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器</p>
<p class="maodian"></p><h2>第一种方法</h2>
<p></p><pre class="brush:bash;toolbar:false"> # 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;'</pre><p></p>
<p class="maodian"></p><h2>第二种方法</h2>
<p class="maodian"></p><h3>第一步:全局设置(这是一次性设置,需要root用户权限)</h3>
<p></p><pre class="brush:bash;toolbar:false"># 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</pre><p></p>
<div>
<p class="maodian"></p><h3>第二步:不同用户分别设置</h3>
<p></p><pre class="brush:bash;toolbar:false"># 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</pre><p></p>
<div>(如果还有其它用户需要监控,则重复第二步骤)</div>
<p class="maodian"></p><h3>第三步:把日志发送给远程主机(可选)</h3>
<div><pre class="brush:bash;toolbar:false"># vi /etc/rsyslog.conf
#增加如下行,IP自己换,也可以用域名,@表示用UDP协议,@@表示用TCP协议
*.* @192.168.0.1</pre><br><pre class="brush:bash;toolbar:false"></pre><div>不足之处:</div>
<div>1. 不能实时记录命令并发送log</div>
<div>2. 要记录终端桌面下的命令需要重启。<br>
=========</div>
<div>
<div id="attachment_9514" class="wp-caption alignnone">
<img title="用日志记录Linux用户执行的每一条命令(history)" class="wp-image-9514" src="https://zhuji.jb51.net/uploads/img/20230517/d3c1da08df775aaad7967e0fb6c02989.jpg" width="690" height="309"><p class="wp-caption-text">history记录日志</p>
</div>
</div>
</div>
</div>
頁:
[1]