1、合理使用Shell歷史命令記錄功能ios
在Linux下可經過history命令查看用戶全部的歷史操做記錄,同時shell命令操做記錄默認保存在用戶目錄下的.bash_history文件中,經過這個文件能夠查詢shell命令的執行歷史,有助於運維人員進行系統審計和問題排查,同時,在服務器遭受黑客攻擊後,也能夠經過這個命令或文件查詢黑客登陸服務器所執行的歷史命令操做,可是有時候黑客在入侵服務器後爲了毀滅痕跡,可能會刪除.bash_history文件,這就須要合理的保護或備份.bash_history文件。下面介紹下history日誌文件的安全配置方法。shell
默認的history命令只能查看用戶歷史操做記錄,並不能區分每一個用戶操做命令的時間,這點對於排查問題十分不便,不過能夠經過下面的方法(加入四行內容)讓history命令自動記錄全部shell命令的執行時間,編輯/etc/bashrc文件:安全
HISTFILESIZE=4000 HISTSIZE=4000 HISTTIMEFORMAT='%F %T ' --->此處"T"後面有一空格,使命令顯示結果更美觀 export HISTTIMEFORMAT
經過這樣的設置後,執行history命令,就會顯示每一個歷史命令的詳細執行時間,例如:其中,HISTFILESIZE定義了在.bash_history文件中保存命令的記錄總數,默認值是1000,這裏設置爲4000;HISTSIZE定義了history命令輸出的記錄總數;HISTTIMEFORMAT定義時間顯示格式,這裏的格式與date命令後的「+"%F %T"」是一致的;HISTTIMEFORMAT做爲history的時間變量將值傳遞給history命令。bash
[root@server ~]# history 247 2013-10-05 17:16:28 vi /etc/bashrc 248 2013-10-05 17:16:28 top 249 2013-10-05 17:04:18 vmstat 250 2013-10-05 17:04:24 ps -ef 251 2013-10-05 17:16:29 ls -al 252 2013-10-05 17:16:32 lsattr 253 2013-10-05 17:17:16 vi /etc/profile 254 2013-10-05 17:19:32 date +"%F %T" 255 2013-10-05 17:21:06 lsof 256 2013-10-05 17:21:21 history
爲了確保服務器的安全,保留shell命令的執行歷史是很是有用的一條技巧。shell雖然有歷史功能,可是這個功能並不是針對審計目的而設計,所以很容易被黑客篡改或是丟失。下面再介紹一種方法,能夠實現詳細記錄登陸過系統的用戶、IP地址、shell命令以及詳細操做時間等,並將這些信息以文件的形式保存在一個安全的地方,以供系統審計和故障排查。服務器
將下面這段代碼添加到/etc/profile文件中,便可實現上述功能。運維
#history USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` HISTDIR=/usr/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
這段代碼將每一個用戶的shell命令執行歷史以文件的形式保存在/usr/share/.history目錄中,每一個用戶一個文件夾,而且文件夾下的每一個文件以IP地址加shell命令操做時間的格式命名。下面是user01用戶執行shell命令的歷史記錄文件,基本效果以下:ssh
[root@server user01]# pwd /usr/share/.history/user01 [root@server user01]# ls -al -rw------- 1 user01 wheel 56 Jul 6 17:07 192.168.12.12.history.20130706_164512 -rw------- 1 user01 wheel 43 Jul 6 17:42 192.168.12.12.history.20130706_172800 -rw------- 1 user01 wheel 22 Jul 7 12:05 192.168.12.19.history.20130707_111123 -rw------- 1 user01 wheel 22 Jul 8 13:41 192.168.12.20.history.20130708_120053 -rw------- 1 user01 wheel 22 Jul 1 15:28 192.168.12.186.history.20130701_150941 -rw------- 1 user01 wheel 22 Jul 2 19:47 192.168.12.163.history.20130702_193645 -rw------- 1 user01 wheel 22 Jul 3 12:38 192.168.12.19.history.20130703_120948 -rw------- 1 user01 wheel 22 Jul 3 19:14 192.168.12.134.history.20130703_183150
保存歷史命令的文件夾目錄要儘可能隱蔽,避免被黑客發現後刪除。
工具
[user01@unknown ~]$ more /etc/shadow /etc/shadow: Permission denied
若是要讓普通用戶user01可訪問這個文件,能夠在/etc/sudoers添加以下內容:
user01 ALL = /bin/more /etc/shadow 這樣,經過以下方式user01用戶就可訪問/etc/shadow文件: [user01@unknown ~]$ sudo more /etc/shadow [sudo] password for user01:
CENTREON ALL = NOPASSWD: /etc/init.d/nagios restart
這樣,普通用戶centreon就能夠執行nagios重啓的腳本而無需輸入密碼了。若是要讓一個普通用戶user02具備超級用戶的全部權限,而又不想輸入超級用戶的密碼,只需在/etc/sudoers添加以下內容便可:
user02 ALL=(ALL) NOPASSWD: ALL
這樣user02用戶登陸系統後,就能夠經過執行以下命令切換到超級用戶下:
[user02@unknown ~]$ sudo su - [root@unknown ~]# pwd /root
Banner /etc/issue.net