Linux歷史命令的記錄與隱藏


linux下歷史命令一般有兩大用處,一個是快速複用,另外是審計,快速複用在以前的文章linux命令行技巧中提過,有興趣的能夠去看看,今天主要說審計部分,分兩部分:記錄歷史命令和隱藏命令行歷史,分別針對運維防禦及入侵滲透,下面分別介紹linux





記錄全部用戶歷史命令




本來的linux默認記錄1000條歷史記錄,且只記錄命令,徹底沒辦法作審計,當遇到服務器入侵等狀況,作審計工做時,若是你沒有開啓audit,或其餘第三方審計工具,在經過history作審計的時候,即使命令不被清除,你也只能看到歷史命令,看不到其餘任何信息,審計很不方便shell


這邊直接上代碼服務器

PS1="`whoami`@`hostname`:"'[$PWD]'

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


將以上命令複製到/etc/profile下面,source /etc/profile 使生效,從新登錄就能夠看到歷史命令記錄

簡單解釋一下,以上部分腳本是在/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下命令歷史記錄的保存及隱藏方式




精彩推薦


牛逼運維經常使用工具系列-1
牛逼運維經常使用工具系列-2


更多精彩內容請掃描下方二維碼關注公衆號


掃描二維碼
關注咱們吧



本文分享自微信公衆號 - 運維研習社()。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索