標籤(空格分隔): Linux shellshell
在 Linux 下面能夠使用 history
命令查看用戶的全部歷史操做,同時 shell 命令操做記錄默認保存在用戶目錄的 .bash_history
文件中。經過這個文件能夠查詢 shell 命令的執行歷史,有助於運維人員進行系統審計和問題排查,同時在服務器遭受黑客攻擊後,也能夠查詢黑客登陸服務器的歷史命令操做。可是黑客在入侵後,爲了抹除痕跡,會刪除 .bash_history
文件,這個就須要合理備份這個文件了。安全
默認的 history
命令只能查看用戶的歷史操做記錄,可是不能區分每一個用戶操做命令的時間。這點對於問題排查至關的不方便。解決辦法是在 /etc/bashrc
文件中加入如下四行來讓 history
命令自動記錄全部 shell 命令的執行時間:bash
HISTFILESIZE=4000 HISTSIZE=4000 HISTTIMEFORMAT='%F %T' export HISTTIMEFORMAT
HISTFILESIZE
表示在 .bash_history
文件中保存命令的記錄總數,默認值是 1000;HISTSIZE 定義了 history
命令輸出的記錄總數;HISTTIMEFORMAT
定義了時間顯示格式,該格式與 date
命令後的 「+"%F %T"」 是同樣的;HISTTIMEFORMAT
做爲 history
的時間變量將值傳遞給 history
命令。服務器
高級技巧架構
上面那個雖然能夠記錄時間,可是沒法做爲審計目的使用,很容易被黑客篡改或者丟失。下面這種方法詳細記錄了登陸過系統的用戶、IP 地址、shell 命令以及詳細操做的時間。並將這些信息以文件的形式保存在一個安全的地方,以供系統審計和故障排查。運維
把如下代碼放入 /etc/profile
文件中,便可實現上述功能。性能
#Record history operation USER_IP=`who -u am i 2>/dev/null |awk '{print $NF}' |sed -e 's/[()]//g'` LOGNAME=`who -u am i |awk '{print $1}'` HISTDIR=/user/share/.history if [ -z $USER_IP] then USER_IP=`hostname` fi if [ ! -d $HISTDIR] then mkdir -p $HISTDIR chmod 777 $HISTDIR fi if [ ! -d $HISTDIR/${LOGNAME}] then mkdir -p $HISTDIR/${LOGNAME} chmod 300 $HISTDIR/${LOGNAME} fi export HISTSIZE=4000 DT=`date +"%Y%m%d_%H%M%S"` export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}.history.$DT" export HISTTIMEFORMAT="[%Y.%m.%d %H:%M:%S]" chmod 600 $HISTDIR/${LOGNAME}/*.history* 2>/dev/null
參考資料code