shell 歷史命令記錄功能

shell 歷史命令記錄功能

標籤(空格分隔): 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

  • <<高性能 Linux 服務器構建實戰 - 系統安全、故障排查、自動化運維與集羣架構>> 這本書
相關文章
相關標籤/搜索