把用户执行的每一个命令都记录下来,然后在每个用户退出登录时把用户所执行的每一个命令都发送给日志守护进程rsyslogd,也可通过配置“/etc/rsyslog.conf”进一步将日志发送给日志服务器
方法一:
vim /etc/profile
#设置history格式 export HISTTIMEFORMAT="[%Y-%m-%d %H:%M:%S] [`who am i 2>/dev/null| \ awk '{print $NF}'|sed -e 's/[()]//g'`] " #记录执行的每一条命令 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;'
编辑完成后运行命令source /etc/profile使之生效
方法二:
1、全局设置(这是一次性设置,需要root用户权限)
vim /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使之生效
2、不同用户分别设置
vim /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
运行命令:less /var/log/messages查看日志
不足之处:
1. 不能实时记录命令并发送log
2. 要记录终端桌面下的命令需要重启。

聂扬帆博客
一个分享IT运维相关工作经验和实战技巧的个人博客
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏