說明:藍色=命令名稱shell
淺綠=命令參數bash
淺藍=選項app
紫色=目錄ssh
系統環境:CentOS 5.8 x86_64ide
最近公司讓搞操做記錄,各類百度、google以後找到了一個比較不錯的方法:post
touch /var/log/command.loggoogle
chattr -a /var/log/command.logspa
在/etc/profile 或 /etc/bashrc 中添加以下代碼日誌
orm
#判斷是否爲 ssh 127.0.0.1 "ls" 相似的命令 if ! test -z "$BASH_EXECUTION_STRING" ; then
echo "===== $(date "+%F %T") $USER nologin cmd: $BASH_EXECUTION_STRING" >>/var/log/command.log
#判斷是否爲su 用戶 elif shopt -q login_shell ; then
printf "====== $(date "+%F %T") new login the last cmd: ">>/var/log/command.log
else
printf "====== $(date "+%F %T") su the last cmd: ">>/var/log/command.log
fi
#定義歷史記錄格式
export HISTTIMEFORMAT="%F %T $USER ${SSH_TTY:5} ${SSH_CLIENT%% *} " #定義輸出格式,並輸出到/var/log/command.log中
export PROMPT_COMMAND="history 1|tail -1|sed 's/^[ ]\+[0-9]\+ //'>> /var/log/command.log"
補充:
USER 環境變量,登陸的用戶名
SSH_TTY 環境變量,記錄登陸中端
SSH_CLIENT 環境變量,記錄登陸ip
HISTTIMEFORMAT bash的環境變量用來定義歷史記錄history 的格式
PROMPT_COMMAND 環境變量,這個變量會優先於 PS1 變量執行,屏幕上顯示完PROMPT_COMMAND定義的內容後,纔會顯示 PS1 提示符的內容;也就是說,按回車後,先輸出 PROMPT_COMMAND 的內容到屏幕上,而後才輸出。
BASH_EXECUTION_STRING 環境變量,存放遠程ssh執行的命令。
添加日誌切割:
mkdir -p /var/log/history
將下面腳本保存到/etc/logrotate.d/history 中 /var/log/command.log{ prerotate /usr/bin/chattr -a /var/log/command.log endscript compress delaycompress notifempty olddir /var/log/history rotate 1000 size 10M postrotate chmod 666 /var/log/command.log && /usr/bin/chattr +a /var/log/command.log && chmod 600 /var/log/history/* endscript }