Linux 系統安全設定仰賴多層次防護策略。本文除了探討關鍵目錄(/var/log/var/log/audit/home)的獨立分割槽組態,更深入分析特殊掛載選項(nodevnosuidnoexec)在 /dev/shm 和可移除媒體上的安全影響與設定方法。此外,文章也涵蓋了 sticky bit 的應用、自動掛載與 USB 儲存的停用,以及軟體更新來源的正確組態,以提升系統的整體安全性。最後,文章也說明瞭 GPG 金鑰組態的重要性以及 sudo 設定的最佳實務,以確保系統管理操作的安全性。

Linux 系統安全設定:確保關鍵目錄使用獨立分割槽

在 Linux 系統安全設定中,將關鍵目錄如 /var/log/var/log/audit/home 組態在獨立分割槽上是重要的安全措施。這種做法可以有效防止資源耗盡攻擊,並保護系統日誌和稽核資料的安全。

/var/log 建立獨立分割槽

/var/log 目錄用於存放系統服務的日誌資料。將其放在獨立分割槽上有兩個主要原因:

  1. 防止資源耗盡:日誌檔案可能會迅速增長,佔用大量磁碟空間,從而影響系統效能甚至導致服務中斷。
  2. 保護日誌資料:日誌資料對於系統安全稽核和故障排查至關重要,將其與系統其他部分分開存放,有助於防止日誌被意外或惡意刪除。

檢查 /var/log 是否為獨立分割槽

執行以下命令檢查 /var/log 是否掛載在獨立分割槽:

mount | grep -E '\s\/var\/log\s'

預期輸出類別似於:

/dev/sda2 on /var/log type ext4 (rw,nosuid,nodev,noexec,relatime)

修正措施

  • 新安裝系統:在安裝過程中自定義分割槽設定,為 /var/log 指定獨立分割槽。
  • 已安裝系統:建立新的分割槽,並相應地組態 /etc/fstab 檔案。

/var/log/audit 建立獨立分割槽

/var/log/audit 目錄存放稽核守護程式 auditd 的日誌。將其放在獨立分割槽上同樣根據資源保護和資料安全的考慮。

檢查 /var/log/audit 是否為獨立分割槽

執行以下命令檢查:

mount | grep -E '\s\/var\/log\/audit\s'

預期輸出:

/dev/sda3 on /var/log/audit type ext4 (rw,relatime,data=ordered)

修正措施

  • 新安裝系統:在安裝時自定義分割槽,為 /var/log/audit 建立獨立分割槽。
  • 已安裝系統:建立新分割槽並更新 /etc/fstab

/home 建立獨立分割槽

/home 目錄用於存放本地使用者的資料。為其建立獨立分割槽有助於保護系統免受使用者資料儲存失控的影響,並限制 /home 下的檔案型別。

檢查 /home 是否為獨立分割槽

執行命令:

mount | grep /home

預期輸出:

/dev/xvdf1 on /home type ext4 (rw,nodev,relatime,data=ordered)

修正措施

  • 新安裝系統:安裝過程中自定義分割槽,指定 /home 為獨立分割槽。
  • 已安裝系統:建立新分割槽並組態 /etc/fstab

/home 分割槽上啟用 nodev 選項

nodev 掛載選項禁止在檔案系統上建立或識別塊或字元特殊裝置。這對於非裝置支援的使用者分割槽(如 /home)尤為重要。

檢查 /home 是否啟用 nodev

執行:

mount | grep -E '\s/home\s' | grep -v nodev

如果有輸出,則表示 nodev 未被設定。

修正措施

編輯 /etc/fstab 檔案,在 /home 分割槽的掛載選項中新增 nodev

UUID=xxx-xxx-xxx /home ext4 defaults,nodev 0 2

然後重新掛載 /home

mount -o remount,nodev /home

加強 Linux 系統安全:確保特殊掛載選項的正確設定

在 Linux 系統管理中,確保檔案系統的掛載選項正確設定對於系統安全至關重要。本文將探討 /dev/shm 及可移除媒體的分割槽掛載選項設定,分析其安全影響並提供具體的修復建議。

1. 加強 /dev/shm 掛載選項的安全性

/dev/shm 是 Linux 系統中的一個臨時檔案系統,用於分享記憶體。正確設定其掛載選項可以有效防止惡意程式的執行和特權提升。

1.1 設定 nodev 選項

安全原則: 禁止在 /dev/shm 上掛載裝置檔案。

風險分析: 如果允許在 /dev/shm 上建立特殊裝置,可能會導致非特權使用者存取敏感裝置檔案,如 /dev/kmem 或原始磁碟分割槽,從而繞過安全控制。

稽核方法:

mount | grep -E '\s/dev/shm\s' | grep -v nodev

若輸出結果不為空,表示 nodev 選項未被設定。

修復建議:

  1. 編輯 /etc/fstab 檔案,在 /dev/shm 的掛載選項中新增 nodev
  2. 執行以下命令重新掛載 /dev/shm
    mount -o remount,nodev /dev/shm
    

1.2 設定 nosuid 選項

安全原則: 禁止在 /dev/shm 上執行具有 setuid 位元的程式。

風險分析: 若允許 setuid 程式在 /dev/shm 上執行,可能會導致非特權使用者執行特權程式,造成許可權提升。

稽核方法:

mount | grep -E '\s/dev/shm\s' | grep -v nosuid

若輸出結果不為空,表示 nosuid 選項未被設定。

修復建議:

  1. 編輯 /etc/fstab 檔案,在 /dev/shm 的掛載選項中新增 nosuid
  2. 執行以下命令重新掛載 /dev/shm
    mount -o remount,nosuid /dev/shm
    

1.3 設定 noexec 選項

安全原則: 禁止在 /dev/shm 上執行二進位檔案。

風險分析: 若允許在 /dev/shm 上執行程式,可能會導致惡意軟體的執行,進而危害系統安全。

稽核方法:

mount | grep -E '\s/dev/shm\s' | grep -v noexec

若輸出結果不為空,表示 noexec 選項未被設定。

修復建議:

  1. 編輯 /etc/fstab 檔案,在 /dev/shm 的掛載選項中新增 noexec
  2. 執行以下命令重新掛載 /dev/shm
    mount -o remount,noexec /dev/shm
    

2. 加強可移除媒體的安全性

對於可移除媒體(如 USB 裝置、光碟機等),正確設定其掛載選項同樣重要。

2.1 在可移除媒體上設定 nodevnosuidnoexec

安全原則: 禁止在可移除媒體上掛載特殊裝置、執行 setuid 程式及二進位檔案。

風險分析: 若未正確設定這些選項,可能會導致惡意軟體透過可移除媒體傳播,或是未授權存取敏感裝置檔案。

稽核方法:

mount

檢查所有可移除媒體的分割槽是否已設定 nodevnosuidnoexec 選項。

修復建議:

  1. 編輯 /etc/fstab 檔案,在可移除媒體的分割槽掛載選項中新增 nodevnosuidnoexec
  2. 對應調整已掛載的可移除媒體分割槽的掛載選項。

加強 Linux 系統安全:檔案系統與軟體更新的關鍵組態

在維護 Linux 系統的安全性時,正確組態檔案系統許可權和軟體更新機制是至關重要的。本文將探討如何透過設定 sticky bit、停用自動掛載和 USB 儲存、以及正確組態軟體更新來源來增強系統安全性。

1. 設定 Sticky Bit 於全域可寫目錄

全域可寫目錄(如 /tmp)若未設定 sticky bit,可能導致使用者刪除或重新命名不屬於自己的檔案。設定 sticky bit 可防止此類別操作,增強安全性。

檢查與修復

  1. 檢查:執行以下指令以驗證全域可寫目錄是否已設定 sticky bit:

    df --local -P | awk '{if (NR!=1) print $6}' | xargs -I '{}' find '{}' -xdev -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null
    

    若無輸出,表示所有全域可寫目錄均已正確設定 sticky bit。

  2. 修復:若發現未設定 sticky bit 的目錄,執行以下指令進行修復:

    df --local -P | awk '{if (NR!=1) print $6}' | xargs -I '{}' find '{}' -xdev -type d \( -perm -0002 -a ! -perm -1000 \) 2>/dev/null | xargs -I '{}' chmod a+t '{}'
    

2. 停用自動掛載與 USB 儲存

自動掛載功能可能導致未經授權的裝置被掛載,從而引入安全風險。停用自動掛載和 USB 儲存可減少此類別風險。

檢查與修復

  1. 檢查自動掛載

    systemctl is-enabled autofs
    

    若輸出為 “enabled”,表示自動掛載功能已啟用。

  2. 修復自動掛載:執行以下指令停用自動掛載:

    systemctl --now disable autofs
    

    或者移除 autofs 套件:

    apt purge autofs
    
  3. 檢查 USB 儲存

    modprobe -n -v usb-storage
    lsmod | grep usb-storage
    

    第一條指令應輸出 install /bin/true,第二條指令不應有輸出。

  4. 修復 USB 儲存:編輯或建立 /etc/modprobe.d/usb_storage.conf,加入以下內容:

    install usb-storage /bin/true
    

    然後執行 rmmod usb-storage 以解除安裝 usb-storage 模組。

3. 正確組態軟體更新來源

正確組態軟體更新來源對於確保系統獲得最新的安全補丁至關重要。

檢查與修復

  1. 檢查:執行以下指令以驗證軟體來源組態正確:

    apt-cache policy
    
  2. 修復:根據組織的安全政策組態軟體更新來源。

加強系統安全性:GPG 金鑰組態與 sudo 設定最佳實踐

在維護系統安全性的過程中,正確組態 GPG 金鑰和使用 sudo 是至關重要的。本文將探討如何確保 GPG 金鑰的正確組態,以及如何安全地使用 sudo 來提升系統的安全性。

1.2.2 確保 GPG 金鑰已正確組態(手動)

適用範圍:

  • 第一級 - 伺服器
  • 第一級 - 工作站

描述:

大多數套件管理器使用 GPG 金鑰簽名來驗證安裝過程中的套件完整性。確保更新來源的真實性對於防止惡意軟體的無意安裝至關重要。

風險評估:

未正確組態 GPG 金鑰可能導致系統從不可信的來源更新,從而使系統暴露於惡意軟體的風險中。

稽核方法:

驗證 GPG 金鑰是否正確組態:

# apt-key list

修復措施:

根據站點政策更新套件管理器的 GPG 金鑰。

CIS 控制措施:

  • 版本 7
    • 3.4 佈署自動化作業系統補丁管理工具:確保作業系統執行最新的安全更新。
    • 3.5 佈署自動化軟體補丁管理工具:確保所有系統上的第三方軟體執行最新的安全更新。

1.3 組態 sudo

sudo 允許授權使用者以超級使用者或其他使用者的身份執行命令,具體取決於安全策略的規定。預設的安全策略是 sudoers,透過 /etc/sudoers 檔案進行組態。

1.3.1 確保 sudo 已安裝(自動化)

適用範圍:

  • 第一級 - 伺服器
  • 第一級 - 工作站

描述與原理:

sudo 的靈活性在於其支援外掛架構,允許第三方開發和分發自己的安全策略和 I/O 日誌外掛。預設的安全策略是 sudoers,該策略決定了使用者執行 sudo 的許可權。

稽核方法:

檢查 sudo 是否已安裝:

# dpkg -s sudo
# 或
# dpkg -s sudo-ldap

修復措施:

安裝 sudosudo-ldap

# apt install sudo
# 或
# apt install sudo-ldap

參考資料:

  1. SUDO(8)
  2. http://www.sudo.ws/

CIS 控制措施:

  • 版本 7
    • 4.3 確保使用專用管理帳戶:確保所有具有管理帳戶存取權的使用者在進行提升許可權的操作時使用專用或次要帳戶。

使用 sudo 的最佳實踐

進一步的安全措施包括組態 sudo 使用偽終端(pseudo-pty)和設定自定義日誌檔案。

1.3.2 確保 sudo 命令使用 pty(自動化)

設定 sudo 只允許從偽終端執行命令,以防止惡意程式在背景執行。

稽核方法:
# grep -Ei '^\s*Defaults\s+([^#]+,\s*)?use_pty(,\s+\S+\s*)*(\s+#.*)?$' /etc/sudoers /etc/sudoers.d/*
修復措施:

編輯 /etc/sudoers/etc/sudoers.d/ 中的檔案,並新增以下行:

Defaults use_pty

1.3.3 確保 sudo 日誌檔案存在(自動化)

設定自定義的 sudo 日誌檔案以簡化稽核。

稽核方法:
# grep -Ei '^\s*Defaults\s+logfile=\S+' /etc/sudoers /etc/sudoers.d/*
修復措施:

編輯 /etc/sudoers/etc/sudoers.d/ 中的檔案,並新增以下行:

Defaults logfile="/var/log/sudo.log"

1.4 檔案完整性監控設定

檔案完整性監控是確保系統安全的關鍵步驟。透過監控檔案系統的狀態,可以檢測出被竄改的檔案,以防止或限制因意外或惡意組態變更或二進位檔案修改所造成的風險。

1.4.1 確保 AIDE 已安裝(自動化)

適用範圍:

  • 第一級 - 伺服器
  • 第一級 - 工作站

描述:

AIDE(Advanced Intrusion Detection Environment)會對檔案系統的狀態進行快照,包括修改時間、許可權和檔案雜湊值。這些資訊可用於與目前檔案系統狀態進行比較,以檢測系統的修改。

理由:

透過監控檔案系統狀態,可以檢測出被竄改的檔案,以防止或限制因意外或惡意組態變更或二進位檔案修改所造成的風險。

稽核:

驗證 AIDE 是否已安裝:

# dpkg -s aide | grep 'Status: install ok installed'
Status: install ok installed
# dpkg -s aide-common | grep 'Status: install ok installed'
Status: install ok installed

修復:

使用適當的套件管理器或手動安裝 AIDE:

# apt install aide aide-common

根據您的環境適當地組態 AIDE,請參考 AIDE 檔案以瞭解相關選項。

初始化 AIDE:

# aideinit
# mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

CIS 控制:

版本 7
14.9 對敏感資料的存取或變更強制詳細日誌記錄
強制對敏感資料的存取或變更進行詳細稽核日誌記錄(使用檔案完整性監控或安全資訊和事件監控等工具)。

1.4.2 確保定期檢查檔案系統完整性(自動化)

適用範圍:

  • 第一級 - 伺服器
  • 第一級 - 工作站

描述:

需要定期檢查檔案系統的完整性,以檢測對檔案系統的變更。

理由:

定期檢查檔案允許系統管理員定期確定關鍵檔案是否被未經授權的方式修改。

稽核:

執行以下命令以確定是否排程了 cron 工作來執行 aide 檢查。

# crontab -u root -l | grep aide
# find /etc/cron.* /etc/crontab -name 'aide' -type f

確保傳回符合網站策略的 cron 工作。

或者,執行以下命令以驗證 aidecheck.serviceaidecheck.timer 是否已啟用且 aidecheck.timer 正在執行。

# systemctl is-enabled aidecheck.service
# systemctl is-enabled aidecheck.timer
# systemctl status aidecheck.timer

修復:

如果使用 cron 排程和執行 aide 檢查:

# crontab -u root -e

在 crontab 中新增以下行:

0 5 * * * /usr/bin/aide.wrapper --config /etc/aide/aide.conf --check

或者,如果使用 aidecheck.serviceaidecheck.timer 排程和執行 aide 檢查: 建立或編輯檔案 /etc/systemd/system/aidecheck.service 並新增以下行:

[Unit]
Description=Aide Check

[Service]
Type=simple
ExecStart=/usr/bin/aide.wrapper --config /etc/aide/aide.conf --check

[Install]
WantedBy=multi-user.target

建立或編輯檔案 /etc/systemd/system/aidecheck.timer 並新增以下行:

[Unit]
Description=Aide check every day at 5AM

[Timer]
OnCalendar=*-*-* 05:00:00
Unit=aidecheck.service

[Install]
WantedBy=multi-user.target

執行以下命令:

# chown root:root /etc/systemd/system/aidecheck.*
# chmod 0644 /etc/systemd/system/aidecheck.*
# systemctl daemon-reload
# systemctl enable aidecheck.service
# systemctl --now enable aidecheck.timer