在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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/145051.html
標籤:Linux
