linux下歷史命令一般有兩大用處,一個是快速複用,另外是審計,快速複用在以前的文章linux命令行技巧中提過,有興趣的能夠去看看,今天主要說審計部分,分兩部分:記錄歷史命令和隱藏命令行歷史,分別針對運維防禦及入侵滲透,下面分別介紹linux
本來的linux默認記錄1000條歷史記錄,且只記錄命令,徹底沒辦法作審計,當遇到服務器入侵等狀況,作審計工做時,若是你沒有開啓audit,或其餘第三方審計工具,在經過history作審計的時候,即使命令不被清除,你也只能看到歷史命令,看不到其餘任何信息,審計很不方便shell
這邊直接上代碼服務器
history微信
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`less
if [ "$USER_IP" = "" ]運維
then編輯器
USER_IP=`hostname`工具
fi測試
if [ ! -d /tmp/dbasky ]flex
then
mkdir /tmp/dbasky
chmod 777 /tmp/dbasky
fi
if [ ! -d /tmp/dbasky/${LOGNAME} ]
then
mkdir /tmp/dbasky/${LOGNAME}
chmod 300 /tmp/dbasky/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date "+%Y-%m-%d_%H:%M:%S"`
export HISTFILE="/tmp/dbasky/${LOGNAME}/${USER_IP} dbasky.$DT"
chmod 600 /tmp/dbasky/${LOGNAME}/*dbasky* 2>/dev/null
簡單解釋一下,以上部分腳本是在/tmp目錄下建立一個dbasky目錄,用來存放全部的用戶的歷史命令,HISTSIZE設置爲4096條,能夠根據本身狀況自定義,在該目錄下,不一樣的用戶名分別在不一樣的文件夾下,歷史命令文件以用戶IP+日期的形式記錄
這樣在後期作審計的時候,能夠很快速的找到某用戶某時間的歷史命令
若是須要記錄哪條命令是哪一個時刻執行的,須要自定義HISTTIMEFORMAT,添加時間在命令以前
或者以爲上面的方法比較複雜,那你就直接用HISTTIMEFORMAT定義歷史記錄格式,而後經過修改HISTSIZE,增長曆史命令記錄數量
你還能夠在這裏增長用戶,以及客戶端IP等
相對於命令行記錄,隱藏命令行歷史,除了在滲透測試中使用,還有一些使用場景,好比特權命令不想被別人看到,或者比較重要的命令不但願在瀏覽歷史命令時被誤執行
這裏說的不是徹底意義上的禁用歷史命令記錄,若是你要那麼作,那你直接在環境變量/etc/profile中將HISTSIZE設置爲0便可
下面的幾個方法是臨時隱藏命令行歷史
在命令前插入空格
在命令行前插入空格是最簡單的方式,可是這個方式的前提是環境變量HISTCONTROL的支持,在HISTCONTROL中有四種模式
export HISTCONTROL=erasedups # 清除整個命令歷史中的重複條目
export HISTCONTROL=ignoredups # 忽略記錄命令歷史中連續重複的命令
export HISTCONTROL=ignorespace # 忽略記錄空格開始的命令
export HISTCONTROL=ignoreboth # 等價於ignoredups和ignorespace
在命令行前插入空格,而不記錄歷史命令,須要HISTCONTROL爲ignorespace或ignoreboth的狀況,默認HISTCONTROL爲ignoredups(CentOS六、7),因此須要先執行export設置HISTCONTROL爲上面說的兩種模式,以後在當前環境變量下執行命令不被記錄
HISTSIZE設置當前會話歷史命令記錄
在前面提到,經過HISTSIZE=0,能夠關閉歷史命令記錄,那麼咱們能夠經過export HISTSIZE=0的方式,關閉當前會話的歷史命令記錄,而不影響全局
經過set命令來配置關閉history
linux下set命令能夠用於設置shell環境變量和shell執行方式
set經過+或-號來設置選項關閉或開啓,o選項用於指定選項名
因此經過set +o history的方式,能夠關閉history,固然,也能夠在set前面加空格,那麼該命令也不會被記錄
而後再經過set -o history的方式,開啓history,這種方式的好處在於,你沒必要所有清除全部歷史命令,這樣在滲透過程當中能夠靈活屏蔽不想被記錄的命令,而不會被審計人員發現
history命令管理
最後這種方式就是直接經過history命令來清除部分或所有歷史命令
經過history -c命令能夠清除全部歷史命令,在操做完成以後,能夠經過這種方式清除全部歷史記錄,這種方式能夠完成隱藏,可是會露馬腳
另外就是經過history -d 命令行id的方式,刪除想要刪除的命令,不過最好在history命令前加空格,這樣作比較隱祕,這種方式首先須要經過history命令結合grep等查找命令,查尋要刪除命令的id,經過刪除這個id來刪除歷史命令
或者經過上下鍵翻找歷史命令,經過Ctrl+U來清除當前行的記錄
不過這種方式會留個小馬腳
ok,以上就是今天要介紹的linux下命令歷史記錄的保存及隱藏方式
更多精彩內容請掃描下方二維碼關注公衆號
本文分享自微信公衆號 - 運維研習社()。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。