Linux 系統管理員常需面對各式資安威脅,限制未授權程式執行是提升系統安全的重要手段。本文介紹如何利用掛載選項 noexecnosuidnodev 限制檔案系統執行許可權,並搭配 fapolicyd 框架進一步控管程式執行,最後說明如何結合 STIG OpenSCAP 設定檔簡化安全設定流程,達到自動化組態 fapolicyd 和相關掛載選項的效果,有效提升系統防禦能力。

加強Linux系統安全:使用noexec、nosuid、nodev掛載選項與fapolicyd框架

簡介

在維護Linux系統的安全時,管理員需要採取多種措施來防止未經授權的程式執行。本文將探討如何使用noexecnosuidnodev掛載選項以及fapolicyd框架來增強系統安全性。

使用noexec、nosuid、nodev掛載選項

原理與應用

透過將系統和資料目錄分離到不同的分割區,並使用適當的掛載選項,可以有效防止惡意程式的執行。這些選項包括:

  • noexec:禁止在掛載的檔案系統中執行任何可執行檔。
  • nosuid:忽略設定使用者ID(SUID)和設定群組ID(SGID)位元,防止以其他使用者身份執行程式。
  • nodev:不允許在掛載的檔案系統中使用裝置檔案。

實際操作

在安裝作業系統時,套用STIG OpenSCAP設定檔可以自動啟用這些安全措施。如果需要手動設定,可以編輯/etc/fstab檔案,加入相應的掛載選項。例如:

UUID=xxx-xxx-xxx /var/log ext4 defaults,noexec,nosuid,nodev 0 2

內容解密:

  • UUID=xxx-xxx-xxx:代表檔案系統的UUID,需替換為實際值。
  • /var/log:掛載點,這裡以/var/log為例。
  • ext4:檔案系統型別。
  • defaults,noexec,nosuid,nodev:掛載選項,defaults為預設選項,後面跟著的三個選項用於增強安全性。
  • 0 2:dump和fsck檢查的順序。

fapolicyd框架

簡介與安裝

fapolicyd是一個用於控制程式執行的框架,目前主要在Red Hat及其衍生發行版中可用。它透過檢查程式的信任度來決定是否允許執行。要安裝fapolicyd,可以使用以下命令:

sudo dnf install fapolicyd
sudo systemctl enable --now fapolicyd

內容解密:

  • sudo dnf install fapolicyd:使用dnf套件管理器安裝fapolicyd
  • sudo systemctl enable --now fapolicyd:啟用並立即啟動fapolicyd服務。

結合STIG OpenSCAP設定檔

在安裝作業系統時套用STIG OpenSCAP設定檔,可以自動組態fapolicyd和相關的掛載選項,從而簡化安全設定的過程。

手動新增信任程式

如果需要執行fapolicyd預設不信任的程式,可以使用以下命令手動新增:

sudo fapolicyd-cli --file add /path/to/program

內容解密:

  • sudo fapolicyd-cli --file add /path/to/program:將指定路徑的程式新增至信任列表。

常見問題

  1. 以下哪個敘述是正確的?

    • A. 可以在任何Linux發行版上使用noexecnosuidnodev掛載選項。
    • B. 可以在任何Linux發行版上使用fapolicyd
    • C. 可以透過在 / 分割區使用 noexec 掛載選項來防止惡意程式執行。
    • D. 要使用 noexecnosuidnodev 掛載選項,需要編輯 /etc/mtab 檔案。

    答案:A

  2. 需要執行一個被fapolicyd阻止的程式,最好的處理方法是什麼?

    • A. 手動編輯 /etc/fapolicyd/fapolicyd.trust 檔案新增該程式。
    • B. 建立自定義規則新增該程式。
    • C. 使用 sudo fapolicyd-cli --file add 命令新增該程式。
    • D. 手動編輯 /etc/fapolicyd/fapolicyd.conf 檔案新增該程式。

    答案:C

  3. 套用STIG OpenSCAP設定檔後,新建檔案和目錄的預設許可權是什麼?

    • A. 檔案644,目錄755。
    • B. 檔案600,目錄700。
    • C. 檔案640,目錄750。
    • D. 檔案755,目錄755。

    答案:B

  4. 以下關於套用STIG OpenSCAP設定檔的敘述,哪一個是正確的?

    • A. 可以在任何Linux發行版的安裝過程中套用STIG設定檔。
    • B. 在安裝過程中套用STIG設定檔可以自動完成所有安全設定。
    • C. 在套用STIG設定檔之前,需要手動設定分割區方案,將某些目錄分離到獨立的分割區。
    • D. 在Red Hat型別的系統上,只能在系統安裝完成後套用STIG設定檔。

    答案:C

  5. fapolicyd在其信任檔案中使用哪種雜湊演算法?

    • A. SHA1
    • B. Blowfish
    • C. MD5
    • D. SHA256

    答案:D

系統服務稽核與安全強化技巧

在伺服器管理中,無論使用何種作業系統,一個基本原則是絕不安裝任何非必要的元件。尤其是網路服務,因為這可能為惡意攻擊者提供額外的入侵途徑。本章將介紹如何稽核系統服務、密碼保護 GRUB2 組態、BIOS/UEFI 安全設定,以及使用檢查清單進行初始系統設定。

稽核系統服務

確保系統上沒有執行不必要的網路服務是伺服器安全管理的基本要求。我們將探討幾種不同的方法來稽核系統服務。

使用 systemctl 稽核系統服務

在根據 systemd 的 Linux 系統上,systemctl 是一個多功能指令,可以控制系統服務並顯示其狀態。

sudo systemctl -t service --state=active

上述指令的解析:

  • -t service:檢視系統上的服務(即過去所謂的 daemon)。
  • --state=active:顯示目前正在執行的系統服務狀態。

部分輸出範例如下:

UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
after-local.service loaded active exited /etc/init.d/after.local
alsa-restore.service loaded active exited Save/Restore Sound Card
apparmor.service loaded active exited Load AppArmor profiles
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
cron.service loaded active running Command Scheduler
...

使用 netstat 稽核網路服務

netstat 指令可用於檢查目前系統上執行的網路服務。

netstat -lp -A inet

上述指令的解析:

  • -lp-l 表示檢視正在監聽的網路埠,-p 表示顯示監聽埠的程式或服務名稱及 PID。
  • -A inet:僅顯示 inet 系列的網路通訊協定資訊,即 rawtcpudp 等,不顯示 Unix 域通訊端。

部分輸出範例如下:

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ideafarm-door *:* LISTEN -
tcp 0 0 localhost:40432 *:* LISTEN 3296/SpiderOakONE
tcp 0 0 *:ssh *:* LISTEN -
tcp 0 0 localhost:ipp *:* LISTEN -
tcp 0 0 localhost:smtp *:* LISTEN -
tcp 0 0 *:db-lsp *:* LISTEN 3246/dropbox
...

輸出結果顯示了目前正在監聽的網路服務及其對應的本地位址和埠號。

#### 內容解密:

此段落中,我們使用了 netstat 指令來檢查目前正在監聽的網路服務。其中,-lp 引數用於顯示正在監聽的網路埠及其對應的程式或服務名稱和 PID,而 -A inet 引數則用於指定僅顯示 inet 系列的網路通訊協定資訊。輸出的結果中,我們可以看到多個正在監聽的網路服務,例如 ideafarm-doorsshipp 等。這些資訊對於稽核系統服務和檢查是否有惡意程式在監聽網路連線至關重要。

圖表翻譯:

此圖示展示了使用 netstat 指令檢查網路服務的流程。

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Linux系統安全強化掛載選項與Fapolcyd框架

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

圖表翻譯: 此圖示呈現了使用 netstat 指令檢查網路服務的程式與過程。首先,執行 netstat -lp -A inet 指令,然後顯示正在監聽的網路服務,接著檢查本地位址和埠號,最後識別對應的程式或服務名稱及 PID。透過這個流程,可以有效地稽核系統上的網路服務。

網路連線狀態監控:深入理解 netstat 指令

在 Linux 系統管理中,瞭解網路連線狀態是確保系統安全與效能的關鍵步驟。netstat 是一個強大的命令列工具,可用於顯示系統的網路連線、路由表和網路介面統計資訊。本文將探討 netstat 的使用方法及其輸出結果的解讀。

檢視監聽中的網路連線

要檢視目前正在監聽的網路連線,可以使用 netstat -l 命令。這將顯示所有正在監聽的 TCP 和 UDP 連線。

TCP 連線範例

netstat -lpn -A inet

輸出結果:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:902           0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:40432       0.0.0.0:*               LISTEN      3296/SpiderOakONE
tcp        0      0 0.0.0.0:22            0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:631         0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:25          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:17500         0.0.0.0:*               LISTEN      3246/dropbox
tcp        0      0 0.0.0.0:37468         0.0.0.0:*               LISTEN      3296/SpiderOakONE
tcp        0      0 127.0.0.1:17600       0.0.0.0:*               LISTEN      3246/dropbox

UDP 連線範例

netstat -lpn -A inet | grep udp

輸出結果:

udp        0      0 192.168.204.1:ntp     *:*                     -
udp        0      0 172.16.249.1:ntp      *:*                     -
udp        0      0 linux-0ro8:ntp        *:*                     -
udp        0      0 *:58102               *:*                     5598/chromium --pas
udp        0      0 *:db-lsp-disc         *:*                     3246/dropbox
udp        0      0 *:43782               *:*                     5598/chromium --pas
udp        0      0 *:36764               *:*                     -
udp        0      0 *:21327               *:*                     3296/SpiderOakONE
udp        0      0 *:mdns                *:*                     5598/chromium --pas

程式碼說明

在上述範例中,我們使用了 netstat 命令的不同選項來顯示網路連線狀態。下面是這些選項的詳細說明:

  • -l:僅顯示正在監聽的連線。
  • -p:顯示與每個連線相關聯的程式 ID 和名稱。
  • -n:以數值形式顯示 IP 地址和埠號,而不是使用名稱解析。
  • -A inet:指定要顯示的網路協定家族。在此例中,我們指定了 inet,表示 IPv4 網路協定。

理解 netstat 輸出結果

netstat 的輸出結果包含多個欄位,包括協定型別、接收佇列、傳送佇列、本地地址、遠端地址、連線狀態以及相關聯的程式 ID 和名稱。

  • Proto:網路協定型別(TCP 或 UDP)。
  • Recv-QSend-Q:接收和傳送佇列的大小。
  • Local AddressForeign Address:本地和遠端地址,包括 IP 地址和埠號。
  • State:TCP 連線的狀態(例如 LISTEN、ESTABLISHED、CLOSE_WAIT 等)。UDP 連線沒有特定的狀態。
  • PID/Program name:與連線相關聯的程式 ID 和名稱。

詳細解說

在 TCP 連線中,常見的狀態包括:

  • LISTEN:伺服器正在監聽特定埠上的連線請求。
  • ESTABLISHED:已建立的連線,雙方正在進行資料傳輸。
  • CLOSE_WAIT:遠端主機已關閉連線,本地主機正在等待關閉通訊端。
  • SYN_SENT:本地主機正在嘗試建立連線,向遠端主機傳送了 SYN 請求。

在 UDP 連線中,由於 UDP 是無連線的協定,因此沒有特定的狀態列位。

安全考量

使用 netstat 可以幫助系統管理員發現潛在的安全問題,例如未經授權的網路服務或可疑的連線活動。定期檢查 netstat 的輸出結果,可以幫助您及時發現和回應安全事件。

安全最佳實踐

  • 監控網路連線:定期執行 netstat 命令,以監控系統上的網路連線活動。
  • 檢查可疑連線:對於未知或可疑的連線,進一步調查其來源和目的。
  • 限制不必要的服務:關閉不必要的網路服務,以減少潛在的安全風險。

網路服務稽核:使用 netstat 與 Nmap

在維護網路安全時,稽核網路服務是至關重要的一步。這涉及到檢查系統上正在執行的服務,以及這些服務是否安全。在本篇文章中,我們將探討如何使用 netstatNmap 來稽核網路服務。

使用 netstat 稽核網路服務

netstat 是一個用於顯示網路連線、路由表和網路介面統計的命令列工具。透過 netstat,管理員可以檢視哪些網路服務正在監聽連線,以及目前的連線狀態。

檢視網路服務

要檢視正在監聽連線的網路服務,可以使用以下命令:

netstat -lp -A inet
netstat -lpn -A inet

第一個命令顯示正在監聽的 TCP 連線,而第二個命令則增加了 -n 引數,以數字形式顯示地址和埠號,避免 DNS 查詢。

檢視已建立的連線

要檢視已建立的連線,可以使用以下命令:

netstat -p -A inet
netstat -pn -A inet

同樣,第二個命令使用 -n 引數以數字形式顯示地址和埠號。

實驗:使用 netstat 檢視網路服務

  1. 檢視正在監聽連線的網路服務列表。
  2. 檢視已建立的連線列表。
  3. 開啟瀏覽器並存取任意網站,重複步驟 2。
  4. 重複步驟 2,但使用 sudo 執行命令,觀察輸出結果的差異。
  5. 從主機透過 SSH 登入虛擬機器,重複步驟 2。

使用 Nmap 稽核網路服務

雖然 netstat 可以提供有關本機網路服務的資訊,但當需要遠端稽核多台主機上的網路服務時,Nmap 則是更好的選擇。Nmap(Network Mapper)是一個開源的網路掃描工具,可用於檢測主機上的開放埠和服務。

安裝 Nmap

Nmap 可在多數主要作業系統上執行,包括 Linux、Windows 和 macOS。可以從 Nmap 官方網站 下載並安裝。

使用 Nmap 進行 SYN 封包掃描

要在 Linux 或 macOS 上使用 Nmap 進行 SYN 封包掃描,可以執行以下命令:

sudo nmap -sS 192.168.0.37

這裡,-sS 表示進行 SYN 封包掃描,而 192.168.0.37 是目標主機的 IP 地址。

理解 Nmap 的輸出結果

Nmap 的輸出結果會顯示目標主機上開放的埠和相關服務。例如:

PORT     STATE SERVICE
22/tcp   open  ssh
515/tcp  open  printer
631/tcp  open  ipp
5900/tcp open  vnc

這表明目標主機上開放了 SSH、列印服務、IPP 和 VNC 等服務。

埠狀態

Nmap 掃描會將目標主機的埠標記為以下三種狀態之一:

  • filtered:表示埠被防火牆阻擋。
  • open:表示埠未被防火牆阻擋,且相關服務正在執行。
  • closed:表示埠未被防火牆阻擋,但相關服務未執行。