檔案系統層面的防護是伺服器被 Rootkit 入侵後的最後一道防線。本文系統整理 chattr 不可變/僅追加屬性、關鍵目錄鎖定策略、SUID/SGID/孤兒檔案掃描、/tmp /var/tmp /dev/shm 掛載加固與 Loopback 檔案系統建立,構建纖深防禦體系。
| chattr 參數 | 效果 | 適用場景 |
|---|---|---|
+i | 不可變:不可修改、刪除、重命名、建立連結、寫入 | 核心二進位、關鍵設定檔 |
+a | 僅追加:只能在檔案末尾寫入,不可刪除/覆寫 | 日誌檔 |
+c | 透明壓縮 | 大型靜態檔案 |
+s | 安全刪除:刪除時覆寫磁碟區塊 | 敏感資料 |
+u | 刪除保留:保留資料區塊以便復原 | 重要文件 |
| 檢查項目 | 指令 | 處置 |
|---|---|---|
| 全域可寫檔案 | find / -type f -perm -o=w -o -perm -g=w ! -path "/proc/*" ! -path "/sys/*" -exec ls -la {} \; | 移除不必要的 o=w/g=w |
| 全域可寫目錄 | find / -type d -perm -o=w -o -perm -g=w ! -path "/proc/*" ! -path "/sys/*" -exec ls -ld {} \; | 加上 sticky bit chmod +t 或收回權限 |
| SUID 程式 | find / -type f -perm -4000 -exec ls -la {} \; | 非必要移除 chmod u-s |
| SGID 程式 | find / -type f -perm -2000 -exec ls -la {} \; | 非必要移除 chmod g-s |
| Root SUID/SGID + md5sum | find / -user root -perm -4000 -exec md5sum {} \; | 建立基線備份,定期比對 |
| 無擁有者檔案 | find / -nouser -o -nogroup | 刪除或指派擁有者 |
# /etc/fstab
UUID=xxxx /tmp ext4 rw,nosuid,noexec,nodev 0 0
mount -o remount /tmp
mv /var/tmp/* /tmp/
rmdir /var/tmp
ln -s /tmp /var/tmp
dd if=/dev/zero of=/var/tmpfs bs=1M count=10240 # 10GB
mkfs.ext4 /var/tmpfs
cp -a /tmp /tmp.bak
mount -o loop,noexec,nosuid,nodev,rw /var/tmpfs /tmp
chmod 1777 /tmp
mv /tmp.bak/* /tmp/
rm -rf /tmp.bak
echo "/var/tmpfs /tmp ext4 loop,nosuid,noexec,nodev,rw 0 0" >> /etc/fstab
# /etc/fstab
tmpfs /dev/shm tmpfs defaults,nosuid,noexec,nodev,rw 0 0
mount -o remount /dev/shm
# /tmp 測試
echo '#!/bin/sh\necho test' > /tmp/test.sh
chmod +x /tmp/test.sh
/tmp/test.sh
# 應報 Permission denied (noexec 生效)
# 安裝
apt-get install acl # Debian/Ubuntu
yum install acl # RHEL/CentOS
# 啟用 (掛載選項加 acl)
mount -o remount,acl /
# 設定
setfacl -m u:alice:rwx /data/project
setfacl -m g:dev:rx /data/project
getfacl /data/project
# 移除
setfacl -x u:alice /data/project
setfacl -b /data/project # 清除所有 ACL
