在Linux系統中,如果一個進程以root權限運行或者一個用戶以root用戶身份登錄,那么它的權限就不再有任何限制,因此如果一旦root權限被黑客掌握,對于系統來說將會是一場災難,在這種情況下,文件系統保護將會成為系統的最后一道防線,合理的設置文件系統保護可以最大限度的降低攻擊對系統造成的破壞。
chattr [-RV] [-v version] [mode] /路徑/文件
主要參數如下:
-R:遞歸修改所有文件及子目錄
-V:詳細顯示修改內容,并打印輸出
mode:
+:追加參數
-:移除參數
=:更新為指定參數
a:append,設定后只能添加數據,而不能刪除數據,只有root用戶可以設置這個屬性。
c:compress,設定文件是否壓縮后再儲存。讀取時需要自動解壓。
i:immutable,設定文件不能被寫入、修改、刪除、重命名、設定軟硬鏈接。
s:安全刪除,文件被刪除后全部收回硬盤空間。
u:保留刪除,系統會保留其數據塊,以便恢復數據。
lsattr命令的語法如下:
lsattr [-adiRvV] /路徑/文件
主要參數如下:
-a:列出所有文件,包括"."開頭的文件
-d:顯示指定目錄的屬性
-R:以遞歸方式列出目錄下所有文件及子目錄的屬性
-v:顯示文件或目錄版本。
以下是建議進行保護的文件:
$ 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
$ chattr +s /var/log/messages
$ chattr +s /var/log/stmp
為文件系統進行保護雖然可以提高系統安全性,但是也會在一些情況下造成不便,例如在一些軟件的安裝與升級時,可能需要去掉相關目錄的immutable屬性和append-only屬性,對日志文件設置了append-only屬性也可能會導致日志輪換(logrotate)無法進行。
所以在使用chattr前,需要結合服務器的應用環境來權衡如何設置保護。
而且chattr命令不能保護/、/dev、/tmp、/var等目錄:
根目錄如果設置的不可修改屬性,那么系統會無法工作
/dev在工作時,syslog需要刪除并重新建立/dev/log下的套接字設備
/tmp會有很多程序和系統程序在這個目錄下建立臨時文件
/var是系統和程序的日志目錄,如果將其設置為不可修改,系統將無法記錄日志
文件權限檢查
不正確的設置文件權限會造成安全隱患,及時發現這些隱患可以防范于未然。
以下是一些查找不安全權限的方法:
查找系統中任何用戶都有寫權限的文件和目錄:
#對文件:
$ find / -type f -perm -2 -o -perm -20 |xargs ls -al
#對目錄:
$ find / -type d -perm -2 -o -perm -20 |xargs ls -ld
查找系統中含有“s”位的程序:
$ find / -type f -perm -4000 -o -perm -2000 -print |xargs ls -al
查找系統中所有suid及sgid文件
#suid
$ find / -user root -perm -2000 -print -exec md5sum () \;
#sgid
$ find / -user root -perm -4000 -print -exec md5sum () \;
檢查系統中沒有屬主的文件
$ find / -nouser -o -nogroup
/TMP、/VAR/TMP、/DEV/SHM安全保護
在Linux系統中,/tmp和/var/tmp目錄用于存放臨時文件,但臨時文件對所有用戶來說都可讀可寫可執行,這就為系統安全留下了安全隱患,這些目錄可能被攻擊者留下惡意腳本進行信息收集或偽裝。但如果修改臨時文件的讀寫權限,就有可能影響系統和程序的正常運行。因此,這些目錄需要通過特殊設置來保護。
而/dev/shm是一個內存共享設備,在Linux啟動時會默認加載/dev/shm,/dev/shm在加載時,使用的是tmpfs文件系統,而tmpfs文件系統是一個內存文件系統,會將該文件系統中的文件全部主流進內存中。這樣通過/dev/shm就可以直接操控系統內存。
保護/tmp的方法:
如果/tmp是獨立磁盤分區的話,將/etc/fstab中的/tmp掛載屬性修改為如下:
LABEL=/tmp? ? /tmp? ?? ???ext3? ? rw,nosuid,noexec,nodey 0 0
其中,
* nosuid:不允許任何suid程序
* noexec:不允許執行腳本程序
* nodev:不存在設備文件
如果是/var分區下的一個目錄,那么可以先將/var/tmp中的數據移動到/tmp分區下,然后在/var做一個指向/tmp的軟連接即可:
$ mv /vat/tmp/* /tmp
$ ln -s /tmp /var/tmp
如果/tmp是根目錄下的一個目錄,可以通過創建一個loopback文件系統利用Linux內核中的loopback特性將文件系統掛載到/tmp下,然后在掛載時設定掛載選項:
$ dd if=/dev/zero of=/dev/tmpfs bs=1M count=10000
$ mke2fs -j /dev/tmpfs
$ cp -av /tmp /tmp.old
$ mount -o loop,noexec,nosuid,rw /dev/tmpfs /tmp
$ chmod 1777 /tmp
$ mv -f /tmp.old/* /tmp/
$ rm -rf /tmp.old
然后編輯/etc/fstab,添加如下內容:
/dev/tmpfs /tmp ext3 loop,nosuid,noexec,rw 0 0
完成后,建議驗證一下配置是否生效,在tmp文件夾下建立一個shell文件嘗試執行。
保護/dev/shm的方法:
/dev/shm是一個設備文件,所以也可以通過修改/etc/fstab實現,將/etc/fstab中掛載屬性修改為如下所示:
tmpfs /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0