工作中,需要把用户执行的每一个命令都记录下来,并发送到日志服务器的需求,为此我做了一个简单的解决方案。这个方案会在每个用户退出登录 时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,你也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器
第一种方法
export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [` who am i 2>/dev/null| \ |
awk '{print $NF}' | sed -e 's/[()]//g' `] " |
if [ -z "$OLD_PWD" ]; then |
if [ ! -z "$LAST_CMD" ] && [ "$(history 1)" != "$LAST_CMD" ]; then |
logger -t ` whoami `_shell_cmd "[$OLD_PWD]$(history 1)" ; |
export LAST_CMD= "$(history 1)" ; |
第二种方法
第一步:全局设置(这是一次性设置,需要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
第二步:不同用户分别设置
tmpfile= "/tmp/`whoami`_history.tmp" |
logger -t ` whoami `_shell_cmd "$line" |
(如果还有其它用户需要监控,则重复第二步骤)
第三步:把日志发送给远程主机(可选)
不足之处:
1. 不能实时记录命令并发送log
2. 要记录终端桌面下的命令需要重启。
=========
history记录日志