一、背景
Linux系统自带的shell窗口操作记录文件.bash_history,可以记录用户执行过的命令,但不足的是,记录的日志文件易于被删除,且信息量较少。有没有什么方式可以在各个Linux主机上留存shell窗口的操作记录,并且有丰富的说明信息(命令、执行人、执行时间、执行目录等)?
二、分析
考虑使用shell脚本来实现:
1、另存shell操作的日志内容
2、丰富日志内容的说明信息(命令、执行人、执行时间、执行目录等)
但不足的是,需要部署,机器少还好,可以单个部署,机器多了工作量就很大了,到时候应该考虑其他方式部署。
三、实现方案
(一)脚本准备
1、*.log 记录存储位置:
mkdir -p /usr/local/records
chmod 777 /usr/local/records/
chmod +t /usr/local/records/
2、*.sh 脚本存储位置:
mkdir -p /usr/local/system_script
3、编写脚本(记录用户执行过的命令):
vim /usr/local/system_script/bash_recorda.sh
# record cmd history # 1.prepare alias su='su -l ' HISTTIMEFORMAT="%F %T " # 2.mkdir if [ ! -d /usr/local/records/${LOGNAME} ] then mkdir -p /usr/local/records/${LOGNAME} chmod 300 /usr/local/records/${LOGNAME} fi # 3.log format and record *.log export HISTORY_FILE_DATE_NAME=`date "+%Y-%m-%d"` export HISTORY_FILE="/usr/local/records/${LOGNAME}/bash_history_${HISTORY_FILE_DATE_NAME}.log" export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print $1" "$2" "$5}") #### $(pwd) #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'
(二)部署脚本
1、使脚本可执行
chmod +x /usr/local/system_script/bash_recorda.sh
2、/etc/profile末尾追加内容:
vim /etc/profile
source /usr/local/system_script/bash_recorda.sh
(三)查看效果
1、执行一些命令
2、查看命令记录
cd /usr/local/records/
ll
cd 对应用户文件夹
vim 对应*.log日志