駭客入侵後常將惡意程式(Rootkit、反向 Shell 等)寫入 /tmp 或 /var/tmp 並嘗試執行。由於這兩目錄預設全域可寫,若能禁止其執行位元,即可大幅降低提權成功率。本文說明如何針對獨立分區與非獨立分區兩種情境,分別掛載 noexec、nosuid 選項,並處理 /var/tmp 符號連結。
noexec 掛載選項會讓 execve() 直接回傳 EACCES。noexec 限制,故仍需配合 SELinux/AppArmor 或檔案完整性監控(AIDE、Tripwire)纵深防禦。/tmp 分區/etc/fstab# 原始
LABEL=/tmp /tmp ext4 defaults 1 2
# 修改為
LABEL=/tmp /tmp ext4 rw,nosuid,noexec,relatime 1 2
relatime 可減少 atime 寫入,提升效能。
mount -o remount,rw,nosuid,noexec /tmp
若系統繁忙無法重掛載,可排程於維護視窗重啟。
/tmp 分區(建立回環裝置)以 100 MB 為例,實際大小視記憶體與負載調整:
# 1. 建立稀疏檔案(不佔實際空間,或用 fallocate)
dd if=/dev/zero of=/var/tmpFS bs=1M count=100
# 或 fallocate -l 100M /var/tmpFS
# 2. 格式化為 ext4
mkfs.ext4 /var/tmpFS
# 3. 備份原 /tmp 資料
cp -a /tmp /tmp_backup
# 4. 掛載並還原資料
mount -o loop,noexec,nosuid,rw /var/tmpFS /tmp
cp -a /tmp_backup/* /tmp/
# 5. 恢復權限與 sticky bit
chmod 1777 /tmp
將上述掛載指令加入 /etc/rc.local 或 systemd tmp.mount 單元以實現開機自動掛載。
/var/tmp:建議改為指向 /tmpmv /var/tmp/* /tmp/
rm -rf /var/tmp
ln -s /tmp /var/tmp
如此 /var/tmp 同樣受 noexec 保護,且避免雙目錄管理。
mount | grep /tmp 確認 noexec,nosuid 生效。/tmp/test_bin 應回傳 Permission denied。auditd 記錄 execve 失敗事件:auditctl -a exit,always -F arch=b64 -S execve -F dir=/tmp -F key=tmp_exec。/tmp 執行腳本(如 dpkg 的 postinst),升級前可暫時 mount -o remount,exec /tmp。gcc、go build)預設輸出至 /tmp,需設定 TMPDIR 指向可執行目錄。實施上述措施後,惡意程式在 /tmp、/var/tmp 落地即無法直接執行,迫使攻擊者尋找更困難的落點,顯著提升系統防禦深度。
Linux 常見故障處理小彙總:圖形介面、密碼、投影、升級、資源不顯示
Linux Samba 服務器深度配置指南:從基礎到進階實戰
Linux 下查看 PDF 方案:Adobe Reader 8 安裝與桌面啟動器建立
Shell 重定向深度解析:`/dev/null 2>&1` 為什麼這麼寫?
解決 Tomcat 啟動報「Neither JAVA_HOME nor JRE_HOME is defined」環境變數配置
CentOS 5.8 iptables 防火牆管理實戰:解決 8080 端口無法訪問
阿里雲 Linux 一鍵部署 LNMP 環境完整圖文教學:xshell/xftp 連線、安裝包解壓、install.sh 互動選單、目錄規劃、卸載指令