返回文章列表

Linux 系統安全強化實務

本文探討如何強化 Linux 系統安全性,涵蓋使用者帳戶管理、密碼策略、防火牆設定、加密技術與核心防護機制。文章提供實務,從使用者許可權控管到防火牆規則設定,並介紹 UFW、Firewalld、GPG、LUKS 等工具,以及 cgroups、名稱空間隔離等核心技術,旨在開發更安全的 Linux 系統環境。

系統管理 資安

隨著數位威脅與日俱增,強化 Linux 系統安全已成為系統管理員的首要任務。本文從使用者帳戶管理、密碼策略設定、防火牆組態到加密技術,提供全面的安全防護策略。文章將探討如何利用 sudo 提升使用者許可權,並避免直接使用 root 帳戶,同時介紹如何透過 pwquality 模組強制使用者設定強度更高的密碼,以及使用 pam_faillock 或 pam_tally2 模組防止暴力破解。此外,文章也將介紹 iptables 和 nftables 防火牆設定,並說明如何使用 UFW 和 Firewalld 等工具簡化防火牆管理,最後探討 GPG 和 LUKS 等加密技術,保護敏感資料安全。

加強 Linux 系統安全性的實務

前言

在當今網路威脅日益嚴峻的環境下,加強 Linux 系統的安全性已成為系統管理員的重要任務。本文將探討如何透過多種方法來增強 Linux 系統的安全性,從使用者帳戶管理到防火牆組態,提供全面性的安全防護策略。

使用者帳戶安全管理

root 使用者的風險

直接使用 root 使用者登入系統存在極大的安全風險。root 使用者擁有系統的最高許可權,一旦帳戶被破解,攻擊者將無所不能。

使用 sudo 提權

使用 sudo 命令可以讓普通使用者在不需要知道 root 密碼的情況下執行管理員許可權的操作。這不僅提高了安全性,也便於許可權管理。

# 為使用者設定 sudo 許可權
sudo usermod -aG sudo username

內容解密:

  • usermod 命令用於修改使用者帳戶屬性。
  • -aG 選項表示將使用者新增到指定的群組(此處為 sudo 群組)。
  • 這種方法允許使用者執行管理任務,同時避免直接使用 root 帳戶。

密碼策略與帳戶鎖定

強制密碼強度

透過安裝和組態 pwquality 模組,可以強制使用者設定符合安全要求的密碼。

# 在 Ubuntu 系統上安裝 pwquality
sudo apt-get install libpam-pwquality

內容解密:

  • libpam-pwquality 提供了密碼品品檢查功能。
  • 組態檔案通常位於 /etc/pam.d/common-password
  • 可以設定密碼長度、複雜度等要求。

帳戶鎖定策略

使用 pam_faillockpam_tally2 模組可以防止暴力破解密碼攻擊。

# 在 AlmaLinux 上組態 pam_faillock
sudo authconfig --enablefaillock --faillockdeny=3 --faillockunlocktime=900 --update

內容解密:

  • authconfig 命令用於組態認證模組。
  • --faillockdeny=3 表示連續三次錯誤登入後鎖定帳戶。
  • --faillockunlocktime=900 表示鎖定時間為 900 秒。

防火牆組態

iptables 防火牆基礎

iptables 是 Linux 系統上常用的防火牆工具,可以透過設定規則來控制進出流量的許可權。

# 阻止所有未允許的 ICMP 封包
sudo iptables -A INPUT -p icmp -j DROP

內容解密:

  • -A INPUT 表示將規則新增到 INPUT 鏈。
  • -p icmp 指定協定為 ICMP。
  • -j DROP 表示丟棄匹配的封包。

nftables:新一代防火牆系統

nftablesiptables 的後繼者,提供更靈活和高效的防火牆規則管理。

# 在 Ubuntu 上組態 nftables
sudo apt-get install nftables
sudo nft add table ip filter

內容解密:

  • nft add table ip filter 命令建立了一個新的表。
  • 可以透過 nft 命令新增鏈和規則。

加強 Linux 系統安全:防火牆組態與加密技術

隨著網路攻擊的日益頻繁,Linux 系統的安全性成為了系統管理員關注的焦點。本文將探討如何透過防火牆組態和加密技術來加強 Linux 系統的安全性。

防火牆組態:UFW 與 Firewalld

Linux 系統提供了多種防火牆解決方案,其中最為常見的是 UFW(Uncomplicated Firewall)和 Firewalld。

UFW 組態

UFW 是 Ubuntu 系統預設的防火牆管理工具,其設計宗旨是簡化 iptables 的組態過程。以下是 UFW 的基本組態步驟:

  1. 啟用 UFW:執行 sudo ufw enable 命令來啟用防火牆。
  2. 允許特定服務:使用 sudo ufw allow <service> 命令允許特定的服務透過防火牆,例如 sudo ufw allow ssh
  3. 檢視狀態:透過 sudo ufw status 命令檢視當前防火牆的狀態。

Firewalld 組態

Firewalld 是 Red Hat 系統預設的防火牆管理工具,提供了一個動態的防火牆管理方式。以下是 Firewalld 的基本組態步驟:

  1. 驗證狀態:執行 sudo firewall-cmd --state 命令來驗證 Firewalld 的狀態。
  2. 新增服務:使用 sudo firewall-cmd --permanent --add-service=<service> 命令新增允許的服務,例如 sudo firewall-cmd --permanent --add-service=ssh
  3. 重新載入組態:執行 sudo firewall-cmd --reload 命令來重新載入防火牆組態。

加密技術:GPG 與 LUKS

加密技術是保護資料安全的關鍵手段,Linux 提供了多種加密工具,如 GPG 和 LUKS。

GPG 加密

GPG(GNU Privacy Guard)是一種根據 OpenPGP 標準的加密軟體,用於資料加密和簽名。以下是 GPG 的基本使用方法:

  1. 生成金鑰對:執行 gpg --full-generate-key 命令生成 GPG 金鑰對。
  2. 加密檔案:使用 gpg -c <file> 命令對檔案進行對稱加密。
  3. 解密檔案:執行 gpg -d <file>.gpg 命令解密檔案。

LUKS 加密

LUKS(Linux Unified Key Setup)是一種磁碟加密規範,用於保護儲存裝置上的資料。以下是 LUKS 的基本組態步驟:

  1. 加密磁碟分割區:執行 sudo cryptsetup luksFormat /dev/sdX 命令對磁碟分割區進行加密。
  2. 開啟 LUKS 分割區:使用 sudo cryptsetup luksOpen /dev/sdX cryptroot 命令開啟 LUKS 分割區。
  3. 自動掛載:在 /etc/crypttab 中新增相應的組態,以實作 LUKS 分割區的自動掛載。

SSH 安全加固

SSH(Secure Shell)是一種安全的遠端登入協定,透過以下措施可以加固 SSH 的安全性:

  1. 停用 SSH Protocol 1:在 /etc/ssh/sshd_config 中設定 Protocol 2 以停用 SSH Protocol 1。
  2. 使用金鑰登入:生成 SSH 金鑰對,並將公鑰上傳到伺服器,以實作無密碼登入。
  3. 啟用雙因素認證:組態雙因素認證,以增加登入的安全性。

核心防護:理解 Linux 核心防護與隔離技術

在現代 Linux 系統安全中,核心防護與程式隔離是保護系統免受惡意攻擊的關鍵技術。本文將探討 Linux 中的核心防護機制,包括控制群組(cgroups)、名稱空間隔離、核心能力、SECCOPM 以及系統呼叫等關鍵概念,並介紹如何在 Docker 容器中使用程式隔離技術,以及使用 Firejail、Snappy 和 Flatpak 進行沙箱化處理。

控制群組(cgroups)解析

控制群組(cgroups)是 Linux 核心提供的一種機制,用於限制、記錄和隔離行程群組的資源使用(如 CPU、記憶體、磁碟 I/O 等)。cgroups 為系統管理員提供了精細的資源控制能力,能夠有效防止某個行程過度佔用系統資源,進而影響整個系統的穩定性。

cgroups 的主要功能:

  1. 資源限制:限制行程群組可以使用的最大資源量。
  2. 資源優先順序設定:為不同的行程群組設定資源使用的優先順序。
  3. 資源統計:統計行程群組的資源使用情況。
  4. 行程群組隔離:將不同的行程群組隔離,以防止它們相互幹擾。

cgroups 的實際應用範例:

# 建立一個名為 my_cgroup 的控制群組,並限制其記憶體使用上限為 512MB
sudo cgcreate -g memory:my_cgroup
sudo echo 512M > /sys/fs/cgroup/memory/my_cgroup/memory.limit_in_bytes

# 將目前的 shell 行程加入到 my_cgroup 控制群組中
sudo cgexec -g memory:my_cgroup bash

內容解密:

上述指令首先建立了一個名為 my_cgroup 的控制群組,並設定其記憶體使用上限為 512MB。接著,使用 cgexec 指令將目前的 shell 行程加入到 my_cgroup 中,所有在此 shell 中啟動的行程都將受到該控制群組的資源限制。

名稱空間隔離技術

名稱空間(Namespaces)是 Linux 核心提供的一種隔離機制,用於將系統資源(如行程 ID、主機名稱、網路介面等)隔離,使不同的名稱空間中的行程看不到或無法存取其他名稱空間中的資源。

名稱空間的主要型別:

  1. PID 名稱空間:隔離行程 ID,使不同名稱空間中的行程具有獨立的行程 ID 空間。
  2. 網路名稱空間:隔離網路介面、路由表等網路相關資源。
  3. 掛載名稱空間:隔離檔案系統掛載點,使不同名稱空間中的行程具有不同的檔案系統檢視。

名稱空間的實際應用範例:

# 建立一個新的 PID 名稱空間
sudo unshare --pid --fork --mount-proc bash

# 檢視目前的行程 ID
echo $$

內容解密:

上述指令使用 unshare 指令建立了一個新的 PID 名稱空間,並在其中啟動了一個新的 bash shell。在這個新的名稱空間中,echo $$ 指令輸出的行程 ID 將與主機上的其他行程 ID 隔離。

使用 Docker 容器進行程式隔離

Docker 是目前最流行的容器化平台之一,它利用 Linux 核心的名稱空間和 cgroups 等技術,為應用程式提供了一個輕量級、隔離的執行環境。

Docker 容器的隔離特性:

  1. 檔案系統隔離:每個容器都有自己的獨立檔案系統。
  2. 行程隔離:容器中的行程執行在獨立的 PID 名稱空間中。
  3. 網路隔離:容器可以擁有獨立的網路介面和路由表。

Docker 的實際應用範例:

# 提取一個 Ubuntu 映象
docker pull ubuntu

# 以互動模式啟動一個 Ubuntu 容器
docker run -it ubuntu /bin/bash

內容解密:

上述指令首先從 Docker Hub 提取了一個 Ubuntu 映象,接著以互動模式啟動了一個 Ubuntu 容器,並在其中啟動了一個 bash shell。這個容器中的行程與主機上的其他行程是隔離的。

沙箱化技術:Firejail、Snappy 和 Flatpak

除了 Docker 以外,還有多種沙箱化技術可用於隔離應用程式,如 Firejail、Snappy 和 Flatpak。

Firejail 簡介

Firejail 是一款根據 Linux 名稱空間和 seccomp 的沙箱化工具,可以用於限制應用程式的資源存取。

Snappy 簡介

Snappy 是 Canonical 公司開發的一款套件管理工具,它利用 AppArmor 和其他安全機制,為應用程式提供了一個安全的執行環境。

Flatpak 簡介

Flatpak 是另一款流行的沙箱化套件管理工具,它同樣利用了名稱空間和 seccomp 等技術,為應用程式提供了一個隔離的執行環境。

為何需要研究 Linux 安全

你可能會問自己:為何需要研究 Linux 安全?難道 Linux 不是已經很安全了嗎?畢竟,它不是 Windows。但事實上,有很多原因需要關注 Linux 安全。

Linux 相較於 Windows 在安全方面確實有一些優勢。這些優勢包括:

  • Linux 從一開始就被設計為多使用者作業系統,因此使用者安全性相對較好。
  • Linux 對管理使用者和非特權使用者有更好的區隔,這使得入侵者更難入侵系統,同時也降低了使用者無意中感染惡意軟體的風險。
  • Linux 比 Windows 更能抵抗病毒和惡意軟體的感染。某些 Linux 發行版內建了諸如 Red Hat 和其免費克隆版中的 SELinux,以及 Ubuntu 和 SUSE 中的 AppArmor 等機制,能夠幫助防止入侵者控制系統。
  • Linux 是自由和開源軟體,這使得任何具有相關技能的人都可以稽核 Linux 程式碼,尋找漏洞或後門。

然而,即使具備這些優勢,Linux 仍然不完美,就像人類創造的其他事物一樣。

本章節將涵蓋以下主題:

  • 檢視威脅格局
  • 為何每位 Linux 管理員都需要學習 Linux 安全
  • 一些關於威脅格局的例子,說明攻擊者如何能夠入侵 Linux 系統
  • 取得最新 IT 安全新聞的資源
  • 實體、虛擬和雲端設定之間的差異
  • 使用 VirtualBox 設定 Ubuntu Server 和 Red Hat 型別的虛擬機器,並在 Red Hat 型別虛擬機器中安裝 Extra Packages for Enterprise Linux (EPEL) 儲存函式庫
  • 建立虛擬機器快照
  • 在 Windows 主機上安裝 Cygwin,以便 Windows 使用者可以從其 Windows 主機連線到虛擬機器
  • 使用 Windows 10/11 Bash shell 存取 Linux 系統
  • 如何保持 Linux 系統更新

讓我們從討論威脅開始。

檢視威脅格局

如果你過去幾年一直關注 IT 技術新聞,你可能已經看到了至少幾篇關於攻擊者入侵 Linux 伺服器的文章。例如,雖然 Linux 對病毒感染確實不太敏感,但已經有多起案例表明攻擊者在 Linux 伺服器上植入了其他型別的惡意軟體。以下是一些例子:

  • 機器人網路惡意軟體:這會導致伺服器加入由遠端攻擊者控制的機器人網路。其中一個較著名的案例涉及將 Linux 伺服器加入對其他網路發起拒絕服務(DoS)攻擊的機器人網路。
  • 勒索軟體:這類別惡意軟體旨在加密使用者資料,直到伺服器所有者支付贖金。然而,即使支付了贖金,也不能保證資料能夠被還原。
  • 加密貨幣挖礦軟體:這會導致被植入軟體的伺服器的 CPU 工作更為繁重並消耗更多能源。被挖掘出的加密貨幣會進入植入軟體的攻擊者的帳戶。

當然,還有很多不涉及惡意軟體的入侵事件,例如攻擊者找到方法竊取使用者憑證、信用卡資料或其他敏感資訊。

一些安全漏洞是由於純粹的粗心大意造成的。以下是一個例子,一位 Adobe 管理員不小心將公司的私有安全金鑰放在公開的安全部落格上: https://arstechnica.com/information-technology/2017/09/in-spectacular-fail-adobe-security-team-posts-private-pgp-key-on-blog/

現在,讓我們進一步討論安全漏洞。

為何會發生安全漏洞?

無論你執行的是 Linux、Windows 還是其他作業系統,安全漏洞的原因通常是相同的。它們可能是作業系統中的安全漏洞,也可能是執行在該作業系統上的應用程式中的安全漏洞。通常,如果管理員能夠及時應用安全更新,與漏洞相關的安全漏洞本可以被避免。

另一個大問題是組態不當的伺服器。Linux 伺服器的標準出廠組態實際上相當不安全,可能會引起很多問題。伺服器組態不當的一個原因是缺乏受過適當培訓的人員來安全管理 Linux 伺服器。(當然,這對本文的讀者來說是個好訊息,因為——相信我——IT 安全領域的工作機會非常多。)

現在,除了伺服器和桌面上的 Linux,我們還在物聯網(IoT)裝置上看到了 Linux 的身影。這些裝置存在許多安全問題,很大程度上是因為人們不知道如何安全地組態它們。

在這本文中,我們將探討如何正確地進行安全管理,使我們的伺服器盡可能地安全。其中一件我們可以做的事情就是關注與安全相關的新聞。

關注安全新聞

如果你從事 IT 行業,即使你不是安全管理員,你也會想要了解最新的安全新聞。在網路時代,這很容易做到。

首先,有很多網站專門報導網路安全新聞,例如 Packet Storm Security 和 The Hacker News。普通的科技新聞網站和 Linux 新聞網站,如 Ars Technica、Fudzilla、The Register、ZDNet 和 LXer,也會報導網路安全漏洞相關的新聞。而且,如果你更喜歡看影片而不是閱讀,你會發現很多好的 YouTube 頻道,例如 BeginLinux Guru。

虛擬化技術與 Linux 發行版介紹

在探討 Linux 安全之前,我們先來瞭解虛擬機器的概念及其在學習過程中的重要性。虛擬機器允許我們在現有的作業系統上執行另一個作業系統,這意味著無論你的主機是 Windows、macOS 還是 Linux,你都可以安裝一個 Linux 虛擬機器來進行實踐操作,而不必擔心破壞系統。

虛擬機器與雲端設定的差異

現代伺服器硬體具備龐大的記憶體、儲存空間以及多核心 CPU,這使得在單一伺服器上執行多個虛擬機器成為可能,每個虛擬機器都可以執行特定的任務。然而,這也帶來了額外的安全挑戰,不僅需要保護實體伺服器的安全,還需要確保每個虛擬機器的安全,並防止虛擬機器之間的互相干擾,尤其是那些包含敏感資料的虛擬機器。

雲端服務的安全考量

許多企業和個人使用雲端服務來佈署 Windows 或 Linux 例項。在雲端設定 Linux 發行版時,需要立即採取措施來增強安全性。此外,雲端伺服器通常會面臨更多的安全威脅,因為它們直接連線到網際網路。

介紹 VirtualBox 和 Cygwin

為了進行實際操作,我們將使用 Oracle 的 VirtualBox 作為虛擬化軟體。VirtualBox 支援 Windows、Linux 和 Mac 主機,並且免費提供。它具備建立虛擬機器快照等功能,非常適合我們的學習需求。

在 VirtualBox 中安裝虛擬機器

對於初次使用 VirtualBox 的使用者,以下是簡要的:

  1. 下載並安裝 VirtualBox 及其擴充套件包。
  2. 下載 Ubuntu Server 22.04、CentOS 7、AlmaLinux 8 和 AlmaLinux 9 的安裝 ISO 檔案。
  3. 啟動 VirtualBox,點選 New 圖示,並根據需求填寫資訊。將虛擬磁碟大小增加到 20 GB,其他設定保持預設。
  4. 啟動新的虛擬機器,並選擇下載的 ISO 檔案進行安裝。
  5. 根據提示完成作業系統的安裝。注意,Ubuntu Server 不會安裝桌面介面,而 CentOS 7 和 AlmaLinux 則提供桌面選項。

內容解密:

上述步驟指導使用者如何在 VirtualBox 中建立並安裝 Linux 虛擬機器。首先,我們需要下載必要的軟體和 ISO 檔案。然後,透過 VirtualBox 的圖形介面建立新的虛擬機器並選擇適當的設定。最後,啟動虛擬機器並使用下載的 ISO 檔案進行 Linux 發行版的安裝。這樣的設定允許使用者在不影響主機系統的情況下進行 Linux 操作和實驗。

Linux 發行版的選擇

本文將重點介紹 Red Hat Enterprise Linux (RHEL)、Ubuntu Linux 和 SUSE Linux。由於 RHEL 是企業級使用的主流,而 Ubuntu 則在雲端佈署中非常流行,我們將使用 CentOS 7、AlmaLinux 8 和 AlmaLinux 9 作為 RHEL 的免費替代品,並重點介紹 Ubuntu 22.04 LTS 版本。

為何選擇這些發行版?

  • RHEL 是企業級市場的重要參與者,其相關的發行版(如 CentOS 和 AlmaLinux)提供了免費的替代方案。
  • Ubuntu Server 是佈署雲端應用程式最廣泛使用的 Linux 發行版,其 LTS 版本提供了長期支援和穩定性。

結語

透過虛擬化技術,我們可以在單一主機上執行多個 Linux 發行版,這不僅方便了學習和測試,也為企業級佈署提供了靈活的解決方案。在後續章節中,我們將探討如何加強 SSH 安全以及其他 Linux 安全實踐。