安全運維之:文件系統安全

1、鎖定系統重要文件node

系統運維人員有時候可能會遇到經過root用戶都不能修改或者刪除某個文件的狀況,產生這種狀況的大部分緣由多是這個文件被鎖定了。在Linux下鎖定文件的命令是chattr,經過這個命令能夠修改ext二、ext三、ext4文件系統下文件屬性,可是這個命令必須有超級用戶root來執行。和這個命令對應的命令是lsattr,這個命令用來查詢文件屬性。shell

經過chattr命令修改文件或者目錄的文件屬性可以提升系統的安全性,下面簡單介紹下chattr和lsattr兩個命令的用法。安全

chattr命令的語法格式以下:bash

chattr [-RV] [-v version] [mode] 文件或目錄服務器

 

主要參數含義以下:app

-R:遞歸修改全部的文件及子目錄。運維

-V:詳細顯示修改內容,並打印輸出。工具

其中mode部分用來控制文件的屬性,經常使用參數以下表所示:oop

 

參數 含義性能

+ 在原有參數設定基礎上,追加參數

- 在原有參數設定基礎上,移除參數

= 更新爲指定參數

a 即append,設定該參數後,只能向文件中添加數據,而不能刪除。經常使用於服務器日誌文件安全,只有root用戶才能設置這個屬性

c 即compresse,設定文件是否經壓縮後再存儲。讀取時須要通過自動解壓操做

i 即immutable,設定文件不能被修改、刪除、重命名、設定連接等,同時不能寫入或新增內容。這個參數對於文件系統的安全設置有很大幫助

s 安全的刪除文件或目錄,即文件被刪除後硬盤空間被所有收回

u 與s參數相反,當設定爲u時,系統會保留其數據塊以便之後可以恢復刪除這個文件。這些參數中,最經常使用到的是a和i,a參數經常使用於服務器日誌文件安全設定,而i參數更爲嚴格,不容許對文件進行任何操做,即便是root用戶

 

lsattr用來查詢文件屬性,用法比較簡單,其語法格式以下:

lsattr [-adlRvV] 文件或目錄

經常使用參數以下表所示。

 

參數 含義

-a 列出目錄中的全部文件,包括以.開頭的文件

-d 顯示指定目錄的屬性

-R 以遞歸的方式列出目錄下全部文件及子目錄以及屬性值

-v 顯示文件或目錄版本

 

在Linux系統中,若是一個用戶以root的權限登陸或者某個進程以root的權限運行,那麼它的使用權限就再也不有任何的限制了。所以,攻擊者經過遠程或者本地攻擊手段得到了系統的root權限將是一個災難。在這種狀況下,文件系統將是保護系統安全的最後一道防線,合理的屬性設置能夠最大限度地減少攻擊者對系統的破壞程度,經過chattr命令鎖定系統一些重要的文件或目錄,是保護文件系統安全最直接、最有效的手段。

對一些重要的目錄和文件能夠加上「i」屬性,常見的文件和目錄有:

chattr -R +i /bin /boot /lib /sbin

chattr -R +i /usr/bin /usr/include /usr/lib /usr/sbin

chattr +i /etc/passwd

chattr +i /etc/shadow

chattr +i /etc/hosts

chattr +i /etc/resolv.conf

chattr +i /etc/fstab

chattr +i /etc/sudoers

 

對一些重要的日誌文件能夠加上「a」屬性,常見的有:

chattr +a /var/log/messages

chattr +a /var/log/wtmp

對重要的文件進行加鎖,雖然可以提升服務器的安全性,可是也會帶來一些不便,例如,在軟件的安裝、升級時可能須要去掉有關目錄和文件的immutable屬性和append-only屬性,同時,對日誌文件設置了append-only屬性,可能會使日誌輪換(logrotate)沒法進行。所以,在使用chattr命令前,須要結合服務器的應用環境來權衡是否須要設置immutable屬性和append-only屬性。

另外,雖然經過chattr命令修改文件屬性可以提升文件系統的安全性,可是它並不適合全部的目錄。chattr命令不能保護/、/dev、/tmp、/var等目錄。

根目錄不能有不可修改屬性,由於若是根目錄具備不可修改屬性,那麼系統根本沒法工做:/dev在啓動時,syslog須要刪除並從新創建/dev/log套接字設備,若是設置了不可修改屬性,那麼可能出問題;/tmp目錄會有不少應用程序和系統程序須要在這個目錄下創建臨時文件,也不能設置不可修改屬性;/var是系統和程序的日誌目錄,若是設置爲不可修改屬性,那麼系統寫日誌將沒法進行,因此也不能經過chattr命令保護。

雖然經過chattr命令沒法保護/dev、/tmp等目錄的安全性,可是有另外的方法能夠實現,在面將作詳細介紹。

 

2、文件權限檢查和修改

不正確的權限設置直接威脅着系統的安全,所以運維人員應該能及時發現這些不正確的權限設置,並馬上修正,防患於未然。下面列舉幾種查找系統不安全權限的方法。

(1)查找系統中任何用戶都有寫權限的文件或目錄

查找文件:find / -type f -perm -2 -o -perm -20 |xargs ls -al

查找目錄:find / -type d -perm -2 -o -perm -20 |xargs ls –ld

(2)查找系統中全部含「s」位的程序

find / -type f -perm -4000 -o -perm -2000 -print | xargs ls –al

含有「s」位權限的程序對系統安全威脅很大,經過查找系統中全部具備「s」位權限的程序,能夠把某些沒必要要的「s」位程序去掉,這樣能夠防止用戶濫用權限或提高權限的可能性。

(3)檢查系統中全部suid及sgid文件

find / -user root -perm -2000 -print -exec md5sum {} \;

find / -user root -perm -4000 -print -exec md5sum {} \;

將檢查的結果保存到文件中,可在之後的系統檢查中做爲參考。

(4)檢查系統中沒有屬主的文件

find / -nouser -o –nogroup

沒有屬主的孤兒文件比較危險,每每成爲黑客利用的工具,所以找到這些文件後,要麼刪除掉,要麼修改文件的屬主,使其處於安全狀態。

 

3、/tmp、/var/tmp、/dev/shm安全設定

 

在Linux系統中,主要有兩個目錄或分區用來存放臨時文件,分別是/tmp和/var/tmp。存儲臨時文件的目錄或分區有個共同點就是全部用戶可讀寫、可執行,這就爲系統留下了安全隱患。攻擊者能夠將病毒或者木馬腳本放到臨時文件的目錄下進行信息收集或假裝,嚴重影響服務器的安全,此時,若是修改臨時目錄的讀寫執行權限,還有可能影響系統上應用程序的正常運行,所以,若是要兼顧二者,就須要對這兩個目錄或分區就行特殊的設置。

/dev/shm是Linux下的一個共享內存設備,在Linux啓動的時候系統默認會加載/dev/shm,被加載的/dev/shm使用的是tmpfs文件系統,而tmpfs是一個內存文件系統,存儲到tmpfs文件系統的數據會徹底駐留在RAM中,這樣經過/dev/shm就能夠直接操控系統內存,這將很是危險,所以如何保證/dev/shm安全也相當重要。

對於/tmp的安全設置,須要看/tmp是一個獨立磁盤分區,仍是一個根分區下的文件夾,若是/tmp是一個獨立的磁盤分區,那麼設置很是簡單,修改/etc/fstab文件中/tmp分區對應的掛載屬性,加上nosuid、noexec、nodev三個選項便可,修改後的/tmp分區掛載屬性相似以下:

LABEL=/tmp     /tmp          ext3    rw,nosuid,noexec,nodev   0 0

其中,nosuid、noexec、nodev選項,表示不容許任何suid程序,而且在這個分區不能執行任何腳本等程序,而且不存在設備文件。

在掛載屬性設置完成後,從新掛載/tmp分區,保證設置生效。

對於/var/tmp,若是是獨立分區,安裝/tmp的設置方法是修改/etc/fstab文件便可;若是是/var分區下的一個目錄,那麼能夠將/var/tmp目錄下全部數據移動到/tmp分區下,而後在/var下作一個指向/tmp的軟鏈接便可。也就是執行以下操做:

[root@server ~]# mv /var/tmp/* /tmp

[root@server ~]# ln -s  /tmp /var/tmp

若是/tmp是根目錄下的一個目錄,那麼設置稍微複雜,能夠經過建立一個loopback文件系統來利用Linux內核的loopback特性將文件系統掛載到/tmp下,而後在掛載時指定限制加載選項便可。一個簡單的操做示例以下:

[root@server ~]# dd if=/dev/zero of=/dev/tmpfs bs=1M count=10000

[root@server ~]# mke2fs -j /dev/tmpfs

[root@server ~]# cp -av /tmp /tmp.old

[root@server ~]# mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp

[root@server ~]# chmod 1777 /tmp

[root@server ~]# mv -f /tmp.old/* /tmp/

[root@server ~]# rm -rf /tmp.old

最後,編輯/etc/fstab,添加以下內容,以便系統在啓動時自動加載loopback文件系統:

/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0

爲了驗證一下掛載時指定限制加載選項是否生效,能夠在/tmp分區建立一個shell文件,操做以下:

[root@tc193 tmp]# ls -al|grep shell

-rwxr-xr-x   1 root root    22 Oct  6 14:58 shell-test.sh

[root@server ~]# pwd

/tmp

[root@tc193 tmp]# ./shell-test.sh 

-bash: ./shell-test.sh: Permission denied

能夠看出,雖然文件有可執行屬性,可是已經在/tmp分區沒法執行任何文件了。

最後,再來修改一下/dev/shm的安全設置。因爲/dev/shm是一個共享內存設備,所以也能夠經過修改/etc/fstab文件設置而實現,在默認狀況下,/dev/shm經過defaults選項來加載,對保證其安全性是不夠的,修改/dev/shm的掛載屬性,操做以下:

tmpfs   /dev/shm    tmpfs   defaults,nosuid,noexec,rw  0 0

經過這種方式,就限制了任何suid程序,同時也限制了/dev/shm的可執行權限,系統安全性獲得進一步提高。

相關文章
相關標籤/搜索