在Linux系統中,如果一個進程以root許可權運行或者一個用戶以root用戶身份登錄,那麼它的許可權就不再有任何限制,因此如果一旦root許可權被黑客掌握,對於系統來說將會是一場災難,在這種情況下,文件系統保護將會成為系統的最後一道防線,合理的設置文件系統保護可以最大限度的降低攻擊對系統造成的破壞。 鎖 ...
在Linux系統中,如果一個進程以root許可權運行或者一個用戶以root用戶身份登錄,那麼它的許可權就不再有任何限制,因此如果一旦root許可權被黑客掌握,對於系統來說將會是一場災難,在這種情況下,文件系統保護將會成為系統的最後一道防線,合理的設置文件系統保護可以最大限度的降低攻擊對系統造成的破壞。
鎖定重要文件
如果系統中存在一些非常重要的文件,可以通過chattr
命令將其鎖定,這樣即使是root用戶也沒法對文件進行修改和刪除。該命令可以修改ext2、ext3、ext4文件系統下的文件屬性,而且這個命令只能由root用戶執行。對應的,lsattr
可以用來查詢文件屬性。
chattr命令的語法如下:
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