在Linux系統中,若是一個進程以root權限運行或者一個用戶以root用戶身份登陸,那麼它的權限就再也不有任何限制,所以若是一旦root權限被黑客掌握,對於系統來講將會是一場災難,在這種狀況下,文件系統保護將會成爲系統的最後一道防線,合理的設置文件系統保護能夠最大限度的下降攻擊對系統形成的破壞。node
若是系統中存在一些很是重要的文件,能夠經過chattr
命令將其鎖定,這樣即便是root用戶也無法對文件進行修改和刪除。該命令能夠修改ext二、ext三、ext4文件系統下的文件屬性,並且這個命令只能由root用戶執行。對應的,lsattr
能夠用來查詢文件屬性。
chattr命令的語法以下:shell
chattr [-RV] [-v version] [mode] /路徑/文件
主要參數以下:安全
lsattr命令的語法以下:服務器
lsattr [-adiRvV] /路徑/文件
主要參數以下:app
如下是建議進行保護的文件: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等目錄:日誌
不正確的設置文件權限會形成安全隱患,及時發現這些隱患能夠防範於未然。
如下是一些查找不安全權限的方法:code
#對文件: $ find / -type f -perm -2 -o -perm -20 |xargs ls -al #對目錄: $ find / -type d -perm -2 -o -perm -20 |xargs ls -ld
$ find / -type f -perm -4000 -o -perm -2000 -print |xargs ls -al
#suid $ find / -user root -perm -2000 -print -exec md5sum () \; #sgid $ find / -user root -perm -4000 -print -exec md5sum () \;
$ find / -nouser -o -nogroup
在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
的方法:
/etc/fstab
實現,將/etc/fstab
中掛載屬性修改成以下所示:tmpfs /dev/shm tmpfs defaults,nosuid,noexec,rw 0 0