在 linux 下面可以使用 history 指令查看使用者的所有歷史操作,同時 shell 指令操作記錄預設會儲存在使用者目錄的 .bash_history 檔案中。透過這個檔案可以查詢 shell 指令的執行歷史,有助於維運人員進行系統稽核和問題排查,同時在伺服器遭受駭客攻擊後,也可以查詢駭客登入伺服器的歷史命令操作。但是駭客在入侵後,為了抹除痕跡,會刪除 .bash_history 文件,這就需要合理備份這個文件了。
預設的 history 指令只能查看使用者的歷史操作記錄,但不能區分每個使用者操作指令的時間。這點對於問題排查相當的不方便。解決方法是在/etc/bashrc 檔案中加入以下四行來讓history 指令自動記錄所有shell 指令的執行時間:
複製程式碼 程式碼如下:
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}
# mkdir -p $histdir/${logname}
chmod 300 $histdir/${logname}
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
以上是linux shell歷史指令記錄功能怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!