安全運維之文件系統保護

在Linux系統中,若是一個進程以root權限運行或者一個用戶以root用戶身份登陸,那麼它的權限就再也不有任何限制,所以若是一旦root權限被黑客掌握,對於系統來講將會是一場災難,在這種狀況下,文件系統保護將會成爲系統的最後一道防線,合理的設置文件系統保護能夠最大限度的下降攻擊對系統形成的破壞。node

鎖定重要文件

若是系統中存在一些很是重要的文件,能夠經過chattr命令將其鎖定,這樣即便是root用戶也無法對文件進行修改和刪除。該命令能夠修改ext二、ext三、ext4文件系統下的文件屬性,並且這個命令只能由root用戶執行。對應的,lsattr能夠用來查詢文件屬性。
chattr命令的語法以下:shell

chattr [-RV] [-v version] [mode] /路徑/文件

主要參數以下:安全

  • -R:遞歸修改全部文件及子目錄
  • -V:詳細顯示修改內容,並打印輸出
  • mode:
    • +:追加參數
    • -:移除參數
    • =:更新爲指定參數
    • a:append,設定後只能添加數據,而不能刪除數據,只有root用戶能夠設置這個屬性。
    • c:compress,設定文件是否壓縮後再儲存。讀取時須要自動解壓。
    • i:immutable,設定文件不能被寫入、修改、刪除、重命名、設定軟硬連接。
    • s:安全刪除,文件被刪除後所有收回硬盤空間。
    • u:保留刪除,系統會保留其數據塊,以便恢復數據。

lsattr命令的語法以下:服務器

lsattr [-adiRvV] /路徑/文件

主要參數以下:app

  • -a:列出全部文件,包括"."開頭的文件
  • -d:顯示指定目錄的屬性
  • -R:以遞歸方式列出目錄下全部文件及子目錄的屬性
  • -v:顯示文件或目錄版本。

如下是建議進行保護的文件:oop

$ 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前,須要結合服務器的應用環境來權衡如何設置保護。ui

並且chattr命令不能保護/、/dev、/tmp、/var等目錄:日誌

  • 根目錄若是設置的不可修改屬性,那麼系統會沒法工做
  • /dev在工做時,syslog須要刪除並從新創建/dev/log下的套接字設備
  • /tmp會有不少程序和系統程序在這個目錄下創建臨時文件
  • /var是系統和程序的日誌目錄,若是將其設置爲不可修改,系統將沒法記錄日誌

文件權限檢查

不正確的設置文件權限會形成安全隱患,及時發現這些隱患能夠防範於未然。
如下是一些查找不安全權限的方法:code

  • 查找系統中任何用戶都有寫權限的文件和目錄:
#對文件:
$ 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
相關文章
相關標籤/搜索