隨著 Linux 在企業伺服器、政府關鍵基礎建設與嵌入式裝置的普及,系統安全防護已非選修課題。本文整理十大進階安全管理實務,涵蓋檔案系統屬性強化、備份驗證策略、核心層級緩衝區溢出防護、存取控制擴充、蜜罐偵測部署等核心領域,助管理員構建纵深防禦體系。
將 /、/usr、/usr/local、/var、/home、/tmp、/boot、/lib、/sbin 等目錄劃分為獨立分區,並針對性質設定掛載參數:
/usr、/boot、/lib、/sbin、/usr/local — 任何檔案異動即觸發告警。/var、/tmp、/home、/dev/shm — 防止惡意腳本/二進制執行。/dev 分區 — 防止建立偽裝裝置節點。範例 /etc/fstab 片段:
/dev/sda3 /usr ext4 ro,nodev,nosuid 0 2
/dev/sda5 /var ext4 rw,noexec,nosuid,nodev 0 2
/dev/sda6 /tmp ext4 rw,noexec,nosuid,nodev 0 2
/dev/sda7 /home ext4 rw,noexec,nosuid,nodev 0 2
透過 chattr 設定關鍵系統檔案與日誌檔案屬性:
chattr +i /bin/ls /etc/passwd /etc/shadow /lib/libc.so.6 ... — 連 root 也無法修改/刪除/重命名,需先 chattr -i 解除。chattr +a /var/log/messages /var/log/secure /var/log/audit/audit.log — 僅允許在檔案末尾寫入,防止日誌被竄改/刪除。查看屬性:lsattr /bin/ls /var/log/messages。這兩屬性結合唯讀分區,迫使入侵者必須重開機並進入單用戶模式才能破壞,大幅增加攻擊成本與被發現機率。
在 /etc/logrotate.d/syslog 或自訂腳本中,於輪替後對舊日誌設定 +i,對新日誌設定 +a,確保歷史日誌不可竄改、當前日誌只能追加。
安裝完成並硬化後,製作可開機的唯讀光碟映像(含 /、/boot、/usr、/lib、/sbin、/etc 關鍵目錄)。定期(如每日/每週)以光碟為基準,使用 mtree、rpm -Va、debsums、aide 或 tripwire 進行完整性比對。
對於唯讀分區,可定期以 mount -o loop,ro /mnt/cdrom/usr.img /usr 方式重新掛載,確保執行檔未被植入後門。
除光碟外,亦可備份至異地伺服器(rsync over SSH)、磁帶庫、加密外接硬碟,並建立離線備份輪換機制。
啟用核心支援的 NX bit (No-eXecute) / XD bit 硬體特性(現代 x86_64 CPU 皆支援),配合核心配置 CONFIG_X86_PAE、CONFIG_STRICT_DEVMEM、CONFIG_DEBUG_RODATA 等,標記資料區段不可執行,從根本上阻斷 shellcode 執行。
歷史上的 Solaris Designer non-exec stack patch、PaX、grsecurity 提供更積極的記憶體保護(ASLR 隨機化、mprotect 限制、堆疊/堆區不可執行、RPF 反向路徑過濾等)。現代主流發行版核心已整合大部分防護(如 CONFIG_RANDOMIZE_BASE、CONFIG_DEBUG_SET_MODULE_RONX、CONFIG_HARDENED_USERCOPY、CONFIG_FORTIFY_SOURCE、CONFIG_CC_STACKPROTECTOR_STRONG)。
以 -fstack-protector-strong 重新編譯關鍵服務(sshd、httpd、named、ftpd 等),在函數序言/結語插入 canary 值檢測堆疊破壞。性能損耗約 1-3%,換取強力防護。
核心 2.6+ 完整支援 setfacl/getfacl,突破傳統「擁有者/群組/其他」三元模型,允許針對任意使用者/群組設定精細權限。掛載選項需加 acl(ext4 預設啟用)。
提供類似 SELinux 的強制存取控制(MAC)框架,支援多種政策模型(AUTH, RC, FD, CAP, MS, PM...),可實現 B1 級安全需求。適合極高安全要求環境,但學習曲線陡峭。
現代企業級 Linux(RHEL/Fedora/CentOS 採用 SELinux;openSUSE/Ubuntu 採用 AppArmor)已內建 MAC 系統,強烈建議維持 Enforcing 模式,並針對自訂服務撰寫/調整政策,而非關閉。
模擬脆弱服務(Telnet、FTP、SSH、HTTP、SMB、MySQL 等),記錄攻擊者指令、下載惡意碼樣本、分析攻擊手法。部署於 DMZ 或內網閒置 IP,作為早期預警感測器。
phf CGI 腳本、舊版脆弱 IMAP/POP3 服務、預設密碼的資料庫/管理介面。iptables -A INPUT -s $ATTACKER_IP -j DROP)。建立關鍵檔案(/bin, /sbin, /lib, /etc, /usr/bin, 核心模組等)的資料庫指紋,定期排程掃描並告警任何未授權變更。
systemctl disable --now servicename)。systemd 的 PrivateTmp=yes, ProtectSystem=strict, ReadWritePaths=..., CapabilityBoundingSet=, NoNewPrivileges=yes 等強化選項。--read-only, --cap-drop=ALL, --security-opt no-new-privileges、seccomp 過濾器。PasswordAuthentication no、PermitRootLogin prohibit-password)。/etc/passwd, /etc/shadow, /etc/sudoers, /etc/ssh/sshd_config。編輯 /etc/sysctl.d/99-hardening.conf 套用關鍵參數:
# 網路層防護
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv6.conf.all.disable_ipv6 = 1 # 若不使用 IPv6
# 核心記憶體保護
kernel.randomize_va_space = 2
kernel.yama.ptrace_scope = 1
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
kernel.perf_event_paranoid = 3
kernel.modules_disabled = 1 # 禁用模組動態載入(生產環境視情況)
# 檔案系統保護
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
fs.suid_dumpable = 0
套用:sysctl --system。
auditd,制定規則監控關鍵系統呼叫(execve, openat, unlink, setuid, mount 等)。chattr +a,並配置 logrotate 輪替後自動簽名/上傳異地。yum update --security/apt upgrade 定期執行。Linux 安全非一次性設定,而是持續的「防護-偵測-響應-改進」循環。將上述技巧整合至自動化部署流程與日常運維規範中,方能構建經得起實戰考驗的可信任系統。