Linux 系統安全加固涉及多個層面,從網路服務掃描到系統核心組態,都需要仔細考量。本文首先分析了使用 Nikto 等工具掃描 Web 伺服器後發現的常見漏洞,例如可瀏覽的密碼檔案、敏感目錄暴露等,並提出了相應的防護措施,包括移除風險高的可執行檔案、使用強制存取控制(MAC)機制如 SELinux 或 AppArmor、佈署 Web 應用防火牆(WAF)如 ModSecurity,以及定期更新系統和應用程式。接著,文章探討了 Linux 系統分割區的掛載選項,特別是 noexec、nodev 和 nosuid,解釋了這些選項如何限制程式執行、裝置檔案建立和 SUID/SGID 許可權,從而提升系統安全性。最後,文章詳細介紹了 fapolicyd 的功能和使用方法,包括規則檔案、信任清單管理、資料函式庫更新和服務重啟等,並透過實際案例演示瞭如何將應用程式加入信任清單以允許其執行。
網路安全掃描與防護措施
在前面的章節中,我們探討瞭如何設定Snort作為網路入侵偵測系統(NIDS),並介紹了Lynis、Greenbone Security Assistant和Nikto等工具,用於掃描系統漏洞和合規性問題。本章節將探討如何保護Web伺服器免受各種漏洞的侵害,並介紹如何阻止某些應用程式執行。
網路安全掃描結果分析
使用Nikto掃描某個真實的生產網站後,我們發現了多個潛在的安全問題,包括:
wwwboard/passwd.txt檔案可被瀏覽,這是一個嚴重的問題,因為它可能導緻密碼洩露。/stats/、/test.html、/webstats/和/cgi-bin/wwwboard.pl等目錄或檔案可能包含敏感資訊或可被利用的漏洞。- FrontPage可能已安裝,這可能導致額外的安全風險。
掃描WordPress網站時,我們發現了以下問題:
- HTTP TRACK方法已啟用,這可能使主機容易受到XST攻擊。
wordpress_test_cookiecookie未設定httponly標誌,這可能允許攻擊者竊取使用者憑證。
內容解密:
這些問題表明該網站存在多個安全漏洞,需要立即修復。對於wwwboard/passwd.txt檔案,應限制其存取許可權或刪除。對於其他目錄或檔案,應檢查其內容和許可權設定,確保沒有敏感資訊洩露。對於WordPress網站,應檢查是否有可用的更新來修復HTTP TRACK方法和cookie設定的問題。
防護措施
為了保護Web伺服器免受這些漏洞的侵害,我們可以採取以下措施:
- 確保沒有風險較高的可執行檔案:檢查Web伺服器上是否存在不必要或可疑的可執行檔案,如
.exe檔案,並確保它們不會對系統造成威脅。 - 使用強制存取控制(MAC):安裝SELinux或AppArmor等MAC系統,以限制惡意指令碼的存取許可權。
- 安裝Web應用防火牆(WAF):考慮安裝ModSecurity等WAF,以增強Web應用程式的安全性。
- 保持系統更新:定期更新系統和應用程式,特別是PHP為基礎的內容管理系統,如WordPress,以修復已知漏洞。
練習題
以下哪一項最能描述IPFire? A. 一個具有內建NIDS的主機型防火牆裝置 B. 一個具有內建NIDS的邊緣防火牆裝置
以下哪一種工具最適合用於掃描Sarbanes-Oxley合規性問題? A. Lynis B. Lynis Enterprise C. Greenbone Security Assistant D. OpenSCAP
答案
- B
- B
進一步閱讀
- Lynis首頁:https://cisofy.com/lynis/
- Greenbone首頁:https://securityonionsolutions.com/
- Snort首頁:https://www.snort.org/
- Nikto首頁:https://cirt.net/nikto2
- Security Onion首頁:https://securityonionsolutions.com/
阻止不想要的程式執行
在下一章中,我們將探討如何阻止某些應用程式執行,以進一步增強系統的安全性。敬請期待!
強化 Linux 系統安全:使用 noexec、nodev 和 nosuid 選項掛載分割區
在維護 Linux 系統安全時,正確組態分割區的掛載選項是非常重要的。根據美國政府的 STIG(Security Technical Implementation Guides)規範,某些系統目錄必須掛載在獨立的分割區上,並使用特定的掛載選項以增強安全性。
為何需要獨立掛載系統目錄?
將特定目錄掛載在獨立分割區有兩個主要原因:
- 防止根目錄滿溢:如果根目錄(/)滿了,可能會導致系統完全鎖死。將特定目錄掛載在獨立分割區可以有效避免這種情況。
- 符合安全規範要求:STIG 等安全規範要求某些分割區需以特定選項掛載,例如禁止執行檔執行、停用 SUID/SGID 許可權以及禁止裝置檔案建立。
掛載選項的作用
在安裝 Linux 系統(如 AlmaLinux 9)時,可以透過自定義分割區方案來實作上述需求。STIG 設定檔會自動為相關分割區新增以下掛載選項:
- noexec:禁止在該分割區執行任何可執行檔(包括 shell 指令碼,除非使用
sh執行)。 - nodev:禁止在該分割區建立裝置檔案。
- nosuid:使 SUID 和 SGID 許可權在該分割區失效。
實際組態範例
安裝完成後,/etc/fstab 檔案內容可能如下所示:
UUID=72d0a3b3-cd07-45c0-938e-4e3377750adb / xfs defaults 0 0
UUID=7bf3315e-525e-4940-b562-7e0b634d65de /boot xfs defaults,nosuid,nodev 0 0
UUID=4df2f723-e875-4194-9ccd-b4a2733fd617 /home xfs defaults,noexec,nosuid,nodev 0 0
UUID=d89b01b1-c3ee-48b6-bb40-0311fdd2838a /tmp xfs defaults,nodev,noexec,nosuid 0 0
UUID=d79889b0-1635-47d5-950d-8dbca088c464 /var xfs defaults,nodev 0 0
UUID=be9a3d41-0e07-4466-8eb7-57fb850df2d4 /var/log xfs defaults,nodev,noexec,nosuid 0 0
UUID=ed001588-333b-4027-bef1-754fcc5e868d /var/log/audit xfs defaults,nodev,noexec,nosuid 0 0
UUID=05c1b1e9-7f32-4791-9d41-492fce6f5166 /var/tmp xfs defaults,nodev,noexec,nosuid 0 0
UUID=c4fdabb8-7e45-4717-b7f5-1cad5f8e7720 none swap defaults 0 0
tmpfs /dev/shm tmpfs defaults,relatime,inode64,nodev,noexec,nosuid 0 0
內容解密:
這段 /etc/fstab 組態展示了各個系統目錄的掛載情況和對應的掛載選項。例如:
/home使用defaults,noexec,nosuid,nodev,表示禁止執行檔執行、SUID/SGID 無效及禁止建立裝置檔案。/tmp和/var/log等目錄同樣採用了多重安全選項,以滿足 STIG 合規性要求。
分割區大小規劃考量
在實際操作中,需根據業務需求合理規劃各分割區的大小。例如,若該機器主要作為 Samba 檔案伺服器,則 /home 分割區可適當調大;若是資料函式庫伺服器,則需根據資料函式庫需求進行調整。
值得注意的是,RHEL 9.1 的安裝程式存在一個已知問題,要求每個分割區至少為 1 GB,即使實際需求較小,否則安裝過程可能會失敗。
瞭解noexec掛載選項與fapolicyd的安全機制
在Linux系統中,安全性是管理員非常關注的一環。本文將探討noexec掛載選項和fapolicyd(File Access Policy Daemon)這兩種安全機制,並透過實際操作來展示它們的功能。
使用noexec掛載選項
noexec掛載選項用於禁止在掛載的檔案系統中執行任何可執行檔案。這種設定可以提高安全性,因為它可以防止在特定分割槽上執行惡意程式碼。
測試noexec的效果
首先,我們建立一個簡單的bash指令碼,內容如下:
#!/bin/bash
echo "This is a test of the noexec option."
exit
將此指令碼儲存為donnie_script.sh並賦予執行許可權:
chmod u+x donnie_script.sh
嘗試執行該指令碼:
./donnie_script.sh
如果該指令碼所在的分割槽被掛載為noexec,則會出現許可權被拒絕的錯誤:
-bash: ./donnie_script.sh: Permission denied
即使用sudo也無法執行:
sudo ./donnie_script.sh
sudo: unable to execute ./donnie_script.sh: Permission denied
然而,如果使用sh命令來執行指令碼,則可以繞過noexec限制:
sh ./donnie_script.sh
This is a test of the noexec option.
對編譯過的可執行檔案的影響
對於編譯過的可執行檔案,如DERO專案的derod-linux-amd64,noexec選項則能有效阻止其執行:
./derod-linux-amd64
-bash: ./derod-linux-amd64: Permission denied
內容解密:
noexec掛載選項能夠防止在指定分割槽上直接執行可執行檔案,從而提高系統安全性。- 對於shell指令碼,雖然
noexec限制了直接執行,但仍可透過呼叫shell直譯器(如sh)來執行,顯示出其限制的侷限性。 - 對於編譯過的可執行檔案,
noexec能夠有效阻止其執行,無論是普通使用者還是使用sudo。
瞭解fapolicyd
fapolicyd是Red Hat Enterprise Linux及其衍生版本中新加入的安全機制,用於控制檔案存取策略。它能夠根據預定義的規則允許或拒絕程式對檔案的存取。
測試fapolicyd的效果
移動DERO專案目錄到根目錄下:
sudo mv dero_linux_amd64/ /
並複製之前建立的指令碼到/usr/local/bin/:
sudo cp donnie_script.sh /usr/local/bin
檢視/usr/local/bin/下的指令碼許可權:
ls -l /usr/local/bin/donnie_script.sh
-rwx
---
---
. 1 root root 61 Dec 31 16:01 donnie_script.sh
由於STIG組態檔案設定了UMASK為077,因此新建立的檔案預設許可權為700。需要手動調整許可權以繼續演示:
chmod 755 /usr/local/bin/donnie_script.sh
內容解密:
- **
fapolicyd**透過控制檔案存取策略來增強系統安全性。 - STIG組態檔案自動設定了UMASK為077,從而影響新檔案的預設許可權設定。
- 許可權設定對於系統安全至關重要,需要根據實際需求進行適當調整。
fapolicyd 的應用與管理
fapolicyd 是一個強大的 Linux 安全模組,用於控制系統上執行的程式。本文將探討 fapolicyd 的規則、組態和管理。
理解 fapolicyd 的規則
fapolicyd 使用 /etc/fapolicyd/rules.d/ 目錄中的規則檔案來決定哪些程式可以執行。這些規則檔案按數字順序處理,因此順序很重要。
預設規則檔案
在 /etc/fapolicyd/rules.d/ 目錄中,有多個預設規則檔案,每個檔案都有特定的功能:
[donnie@localhost ~]$ sudo ls -l /etc/fapolicyd/rules.d
total 44
-rw-r--r--. 1 root fapolicyd 456 Dec 29 14:42 10-languages.rules
-rw-r--r--. 1 root fapolicyd 131 Dec 29 14:42 20-dracut.rules
-rw-r--r--. 1 root fapolicyd 192 Dec 29 14:42 21-updaters.rules
-rw-r--r--. 1 root fapolicyd 225 Dec 29 14:42 30-patterns.rules
-rw-r--r--. 1 root fapolicyd 101 Dec 29 14:42 40-bad-elf.rules
-rw-r--r--. 1 root fapolicyd 248 Dec 29 14:42 41-shared-obj.rules
-rw-r--r--. 1 root fapolicyd 71 Dec 29 14:42 42-trusted-elf.rules
-rw-r--r--. 1 root fapolicyd 143 Dec 29 14:42 70-trusted-lang.rules
-rw-r--r--. 1 root fapolicyd 96 Dec 29 14:42 72-shell.rules
-rw-r--r--. 1 root fapolicyd 76 Dec 29 14:42 90-deny-execute.rules
-rw-r--r--. 1 root fapolicyd 69 Dec 29 14:42 95-allow-open.rules
自訂規則與信任清單
雖然可以建立自訂規則,但建議將應用程式新增到信任清單中,以提高效能和安全性。
[donnie@localhost ~]$ sudo fapolicyd-cli --file add /dero_linux_amd64/derod-linux-amd64
此命令將指定的檔案及其 SHA256 雜湊值新增到 /etc/fapolicyd/fapolicyd.trust 檔案中。
[donnie@localhost ~]$ sudo cat /etc/fapolicyd/fapolicyd.trust
# AUTOGENERATED FILE VERSION 2
# This file contains a list of trusted files
# FULL PATH SIZE SHA256
/dero_linux_amd64/derod-linux-amd64 16750936 847ea80b83a1df887d245085db60a9b0626aacb6cd4f0f192eb2
更新資料函式庫與重啟服務
新增檔案到信任清單後,需要更新資料函式庫並重啟 fapolicyd 服務,以使變更生效。
[donnie@localhost ~]$ sudo fapolicyd-cli --update
Fapolicyd was notified
[donnie@localhost ~]$ sudo systemctl restart fapolicyd
示例程式碼執行
在新增 derod-linux-amd64 到信任清單並更新後,可以正常執行該程式。
[donnie@localhost ~]$ cd /dero_linux_amd64/
[donnie@localhost dero_linux_amd64]$ ./derod-linux-amd64
程式碼解析
以下是一個簡單的 shell 指令碼,用於測試 noexec 選項:
#!/bin/bash
echo "This is a test of the noexec option."
程式碼詳細解析
此指令碼簡單地輸出一段文字,用於測試 noexec 選項是否生效。
程式邏輯:
#!/bin/bash指定了指令碼的直譯器為 Bash。echo命令輸出指定的文字。
注意事項:
- 確保指令碼具有可執行許可權,否則無法直接執行。
- 指令碼的行為可能受到掛載選項(如 noexec)的影響。
圖表說明
此圖示展示了 fapolicyd 的工作流程:
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Linux 系統安全強化與防護措施
package "安全架構" {
package "網路安全" {
component [防火牆] as firewall
component [WAF] as waf
component [DDoS 防護] as ddos
}
package "身份認證" {
component [OAuth 2.0] as oauth
component [JWT Token] as jwt
component [MFA] as mfa
}
package "資料安全" {
component [加密傳輸 TLS] as tls
component [資料加密] as encrypt
component [金鑰管理] as kms
}
package "監控審計" {
component [日誌收集] as log
component [威脅偵測] as threat
component [合規審計] as audit
}
}
firewall --> waf : 過濾流量
waf --> oauth : 驗證身份
oauth --> jwt : 簽發憑證
jwt --> tls : 加密傳輸
tls --> encrypt : 資料保護
log --> threat : 異常分析
threat --> audit : 報告生成
@enduml圖表翻譯: 此圖展示了 fapolicyd 的基本工作流程,從初始化到檢查程式是否受信任,最終決定是否允許執行。