安全運維之:Linux系統帳戶和登陸安全

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

保存歷史命令的文件夾目錄要儘可能隱蔽,避免被黑客發現後刪除。
工具

2、合理使用su、sudo命令spa

su命令是一個切換用戶的工具,常常用於將普通用戶切換到超級用戶下,固然也能夠從超級用戶切換到普通用戶。爲了保證服務器的安全,幾乎全部服務器都禁止了超級用戶直接登陸系統,而是經過普通用戶登陸系統,而後再經過su命令切換到超級用戶下,執行一些須要超級權限的工做。經過su命令可以給系統管理帶來必定的方便,可是也存在不安全的因素,例如系統有10個普通用戶,每一個用戶都須要執行一些有超級權限的操做,就必須把超級用戶的密碼交給這10個普通用戶,若是這10個用戶都有超級權限,經過超級權限能夠作任何事,那麼會在必定程度上對系統的安全形成了威協。所以su命令在不少人都須要參與的系統管理中,並非最好的選擇,超級用戶密碼應該掌握在少數人手中,此時sudo命令就派上用場了。操作系統

sudo命令容許系統管理員分配給普通用戶一些合理的「權利」,而且不須要普通用戶知道超級用戶密碼,就能讓他們執行一些只有超級用戶或其餘特許用戶才能完成的任務,好比系統服務重啓、編輯系統配置文件等,經過這種方式不但能減小超級用戶登陸次數和管理時間,也提升了系統安全性。所以,sudo命令相對於權限無限制性的su來講,仍是比較安全的,因此sudo也被稱爲受限制的su,另外sudo也是須要事先進行受權認證的,因此也被稱爲受權認證的su。

sudo執行命令的流程是:將當前用戶切換到超級用戶下,或切換到指定的用戶下,而後以超級用戶或其指定切換到的用戶身份執行命令,執行完成後,直接退回到當前用戶,而這一切的完成要經過sudo的配置文件/etc/sudoers來進行受權。

例如,/etc/shadow文件普通用戶是沒法訪問的:

[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:
 

執行這個命令後,須要輸入user01用戶的密碼,而後就可訪問文件內容了。在這裏sudo使用時間戳文件來完成相似「檢票」的系統,當用戶輸入密碼後就得到了一張默認存活期爲5分鐘的「入場券」(默認值能夠在編譯的時候改變)。超時之後,用戶必須從新輸入密碼才能查看文件內容。

若是每次都須要輸入密碼,那麼某些自動調用超級權限的程序就會出現問題,此時能夠經過下面的設置,讓普通用戶無需輸入密碼便可執行具備超級權限的程序。例如,要讓普通用戶centreon具備/etc/init.d/nagios腳本重啓的權限,能夠在/etc/sudoers添加以下設置:

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
 

sudo設計的宗旨是:賦予用戶儘量少的權限但仍容許它們完成本身的工做,這種設計兼顧了安全性和易用性,所以,強烈推薦經過sudo來管理系統帳號的安全,只容許普通用戶登陸系統,若是這些用戶須要特殊的權限,就經過配置/etc/sudoers來完成,這也是多用戶系統下帳號安全管理的基本方式。


3、刪減系統登陸歡迎信息

系統的一些歡迎信息或版本信息,雖然能給系統管理者帶來必定的方便,可是這些信息有時候可能被黑客利用,成爲攻擊服務器的幫兇,爲了保證系統的安全,能夠修改或刪除某些系統文件,須要修改或刪除的文件有4個,分別是/etc/issue、/etc/issue.net、/etc/redhat-release和/etc/motd。


/etc/issue和/etc/issue.net文件都記錄了操做系統的名稱和版本號,當用戶經過本地終端或本地虛擬控制檯等登陸系統時,/etc/issue的文件內容就會顯示,當用戶經過ssh或telnet等遠程登陸系統時,/etc/issue.net文件內容就會在登陸後顯示。在默認狀況下/etc/issue.net文件的內容是不會在ssh登陸後顯示的,要顯示這個信息能夠修改/etc/ssh/sshd_config文件,在此文件中添加以下內容便可:

Banner /etc/issue.net
 


其實這些登陸提示很明顯泄漏了系統信息,爲了安全起見,建議將此文件中的內容刪除或修改。

/etc/redhat-release文件也記錄了操做系統的名稱和版本號,爲了安全起見,能夠將此文件中的內容刪除。

/etc/motd文件是系統的公告信息。每次用戶登陸後,/etc/motd文件的內容就會顯示在用戶的終端。經過這個文件系統管理員能夠發佈一些軟件或硬件的升級、系統維護等通告信息,可是此文件的最大做用就、是能夠發佈一些警告信息,當黑客登陸系統後,會發現這些警告信息,進而產生一些震懾做用。看過國外的一個報道,黑客入侵了一個服務器,而這個服務器卻給出了歡迎登陸的信息,所以法院不作任何裁決。

相關文章
相關標籤/搜索