返回文章列表

Linux系統群組與網路安全管理

本文探討 Linux 系統的群組管理與網路安全設定,涵蓋群組許可權設定、靜態與動態 IP 位址管理、網路服務安全強化、SSH 連線安全設定等導向,提供實務操作範例與安全強化建議,協助管理員建構更安全的 Linux 系統環境。

系統管理 資安

在 Linux 系統中,有效管理使用者群組和網路連線至關重要。透過正確設定群組許可權,可以控制不同使用者對系統資源的存取,確保資料安全。網路連線設定則決定了系統如何與其他裝置通訊,並影響整體網路效能和安全性。本文將探討如何設定靜態和動態 IP 位址,以及如何強化網路服務和 SSH 連線的安全性,以降低系統遭受攻擊的風險。實務操作範例涵蓋了 firewalldiptablesnftables 等防火牆工具的設定,並提供最佳實務建議,協助管理員有效管理 Linux 系統並提升其安全性。

管理群組與網路連線

群組管理實務演練

在前面的章節中,您已經學習瞭如何將使用者新增至補充群組。現在是時候練習將目錄新增至系統、新增群組帳戶、設定特定群組擁有該目錄的許可權,然後將使用者新增至該群組。您可以透過 su - username 切換至特定使用者來測試您的許可權設定。

以下是一個可能的場景,供您練習群組管理:

$ su - root
Password:
# mkdir /opt/finance
# chgrp finance /opt/finance
# ls -la /opt
total 0
drwxr-xr-x. 3 root root 21 Aug 11 21:56 .
dr-xr-xr-x. 18 root root 239 Aug 11 21:08 ..
drwxr-xr-x. 2 root finance 6 Aug 11 21:56 finance
# chmod 770 /opt/finance
# ls -la /opt
total 0
drwxr-xr-x. 3 root root 21 Aug 11 21:56 .
dr-xr-xr-x. 18 root root 239 Aug 11 21:08 ..
drwxrwx
---
. 2 root finance 6 Aug 11 21:56 finance
# exit
logout
$ cd /opt/finance
$ touch budget.txt
$ ls -la
total 0
drwxrwx
---
. 2 root finance 24 Aug 11 21:58 .
drwxr-xr-x. 3 root root 21 Aug 11 21:56 ..
-rw-rw-r--. 1 khess khess 0 Aug 11 21:58 budget.txt
$ chgrp finance budget.txt
$ ls -la
total 0
drwxrwx
---
. 2 root finance 24 Aug 11 21:58 .
drwxr-xr-x. 3 root root 21 Aug 11 21:56 ..
-rw-rw-r--. 1 khess finance 0 Aug 11 21:58 budget.txt
$ chmod 660 budget.txt
$ ls -la
total 0
drwxrwx
---
. 2 root finance 24 Aug 11 21:58 .
drwxr-xr-x. 3 root root 21 Aug 11 21:56 ..
-rw-rw
---
-. 1 khess finance 0 Aug 11 21:58 budget.txt

程式碼解析:

  1. su - root:切換至root使用者。
  2. mkdir /opt/finance:建立一個名為finance的目錄。
  3. chgrp finance /opt/finance:將finance目錄的群組擁有者變更為finance群組。
  4. chmod 770 /opt/finance:設定finance目錄的許可權為770,即群組成員可讀寫執行。
  5. touch budget.txt:在finance目錄下建立一個名為budget.txt的檔案。
  6. chgrp finance budget.txt:將budget.txt的群組擁有者變更為finance群組。
  7. chmod 660 budget.txt:設定budget.txt的許可權為660,即群組成員可讀寫。

如果您理解了這個範例中的所有操作,那麼您就可以繼續學習下一章。如果您尚未掌握這些概念,請再次練習本章的範例,並傳回此練習。請記住,建立使用者、群組和目錄以及更改許可權是系統管理員的日常任務,實踐這些技能是獲得它們並變得熟練的唯一方法。

網路連線

單獨的Linux系統功能強大,但其最終能夠實作的功能範圍是有限的。只有單一的操作員或管理員可以同時使用獨立系統。雖然系統仍然可以執行多個工作負載,但其服務僅限於本地存取。

Linux是一種多工、多使用者的作業系統。它最突出的價值之一是能夠與其他電腦聯網,以允許多個使用者同時執行各種工作負載。將Linux系統連線到網路,可以使其成為本地網路、網格、雲或全球網際網路的一部分。

在本章中,您將學習如何為您的網路選擇IP位址方案,以及靜態和動態選項的一些優缺點。您還將學習將系統連線到網路的安全隱患。您將學習如何透過實施良好的安全實踐(例如使用安全協定、關閉不必要的服務和守護程式以及保持系統修補和更新)來盡可能地防止安全漏洞。

連線至網路

將伺服器系統插入現有網路並不需要太多的技術。現在,當一個新系統上線時,動態主機組態協定(DHCP)伺服器會為其提供IP位址、子網路遮罩、閘道、網域名稱系統(DNS)伺服器和一些基本的路由資訊。

關於DHCP和伺服器,有兩種不同的看法。第一種認為所有伺服器系統都應該具有靜態IP位址,而第二種則認為所有系統都應該使用DHCP進行IP位址分配和管理。我一直將伺服器、印表機和網路裝置組態為具有靜態IP位址,位於IP位址池的較低端。對我來說,這樣做有很好的組織意義,而不是依賴DHCP和DNS服務來維護使用者賴以為重的服務的秩序。

在下面的章節中,我將描述兩種IP位址方案——靜態和動態——以及每種方案的優缺點。每個範例網路都具有以下IP位址資訊:

  • 網路:192.168.1.0/24 -閘道:192.168.1.254(靜態IP位址)
  • DNS:192.168.1.1、192.168.1.2(靜態IP位址)

這個範例網路僅用於學習目的,僅適用於最小的公司或使用者群體。此方案僅適用於小公司,因為在減去閘道位址和兩個DNS伺服器位址後,該網路上只有251個可用的IP位址(254 - 3 =251)。使用者可能有多達五個裝置消耗IP位址,很容易看出,不需要很長時間就可以耗盡如此小的池。

指派靜態IP位址

靜態IP位址是一種嵌入到組態檔中的“硬編碼”IP位址。除非手動更改,否則IP位址不會更改。靜態IP位址不依賴或使用DHCP服務。在為系統分配靜態IP位址時,您應該決定一個保留的IP位址區塊,用於伺服器、網路裝置(交換器、路由器、WiFi存取點)、印表機和任何非移動的具備IP功能的系統。工作站、筆記型電腦、平板電腦電腦、手機和其他移動裝置應使用DHCP。

例如,使用前一節中提到的網路引數,我保留192.168.1.1至192.168.1.25用於伺服器、網路裝置、印表機和其他固定系統。如您所注意到的,位址192.168.1.1和 .2已經在這個保留清單中使用。您可以在DHCP組態中排除一個IP位址範圍,以便這些位址不屬於可用的IP位址池。

使用靜態IP位址池的優點之一是網路服務穩定。如果您在網路上設定了一些庫存服務和監控,我強烈建議這樣做,擁有那些具有靜態位址的系統將為您節省一些麻煩。您將能夠隨著時間比較庫存,檢視發生了什麼變化,衡量成長,並為變化做好規劃。另一個優點是,即使DNS和DHCP宕機,您也可以找到關鍵系統。靜態IP位址提供了您所需的穩定性,無論其他服務的狀態如何。

網路服務與IP位址管理

在許多網路服務中,伺服器系統需要使用靜態IP位址(Static IP Address)。像是FTP、Web、VPN、資料函式庫、Active Directory和DNS等服務,都需要或建議使用靜態IP位址。主要的原因是,這些服務通常需要穩定的網路位置,以便客戶端或其他系統能夠可靠地連線。

靜態IP位址管理的缺點在於其管理複雜度。管理員需要手動分配和記錄靜態IP位址,這可能導致管理上的困難和潛在的IP衝突。然而,對於大多數系統管理員來說,這並不是一個大問題,因為伺服器裝置通常具有穩定的位置,不會頻繁移動。透過在DHCP範圍之外保留一個靜態IP位址池,可以有效避免與動態分配的IP位址發生衝突。

動態IP位址管理

使用DHCP(動態主機設定協定)服務可以大幅簡化IP位址的管理。在DHCP出現之前,管理靜態IP位址是一項繁瑣的工作。隨著筆記型電腦、平板電腦電腦和智慧型手機的普及,靜態IP位址變得越來越不切實際。因為這些裝置經常在不同網路之間切換,使用靜態IP位址可能會導致IP衝突,或者需要在不同網路之間手動切換設定。

例如,如果筆記型電腦在公司網路中使用靜態IP位址192.168.1.50,當它被帶到家中或其他網路環境時,可能會與該環境中的其他裝置發生IP衝突,或者根本無法連線網路。而使用DHCP服務,裝置可以在不同網路之間無縫切換,無需任何手動組態。

DHCP的另一個優勢是,一旦設定了DHCP範圍,後續的維護工作相對較少。管理員只需要決定租約期限(Lease Duration),並偶爾清理過期的租約即可。租約期限的長短取決於組織的需求,通常在24小時到30天之間。

切換網路介面卡設定

如果需要更改網路介面卡(NIC)的設定,例如從DHCP切換到靜態IP位址,需要重新啟動介面卡以使變更生效。可以使用以下命令重新啟動介面卡:

$ sudo ifdown adapter_name
$ sudo ifup adapter_name

其中adapter_name是網路介面卡的名稱,例如eth0enp0s3

網路安全考量

一個Linux系統的安全性取決於其連線網路的方式。未連線網路的系統基本上是安全的,但其使用價值有限。一旦系統連線到網路,就會面臨來自網路的攻擊威脅。惡意攻擊者不斷掃描IP位址範圍,尋找可利用的漏洞。

雖然許多伺服器位於防火牆保護的區域網路或DMZ中,但它們仍然面臨來自內部和外部的攻擊威脅。此外,建立使用者帳戶也可能降低系統安全性,因為弱密碼、網路網路釣魚攻擊和社交工程攻擊都可能導致帳戶被盜用。

網路安全管理最佳實踐

為確保系統安全,管理員應採取以下最佳實踐:

  • 限制對系統的物理存取
  • 使用防火牆保護網路
  • 定期更新系統和軟體以修補安全漏洞
  • 使用強密碼和多因素身份驗證
  • 監控系統日誌和網路流量,以便及時發現異常行為

透過採取這些措施,可以有效提高系統的安全性,降低被攻擊的風險。

網路安全防護措施

為確保系統安全,管理員必須採取以下措施:

  • 僅授予使用者工作所需的許可權(最小許可權原則)
  • 對密碼、金鑰或多因素身份驗證實施強大的安全策略
  • 定期修補和更新系統
  • 對所有系統、網路裝置和存取公司資源的裝置進行定期安全稽核

準備系統連線網路

當系統管理員組態新系統並將其安裝到機架上時,插入網路纜線或將虛擬機器連線到虛擬網路是標準做法。我們經常依賴他人來審查系統的功能、用途和安全選項。然而,情況並非總是如此。新系統安裝通常透過從準備好的作業系統映像中組態“標準構建”來自動執行,這些映像可能已經過時數月或數年。使用舊映像是一種糟糕的安全做法。如果系統在完全更新和安全之前就連線到網路,則在開始其在網路上的常規職責之前就容易受到攻擊和損害。

解決方案是在私有網路上組態新系統,使其可以從內部儲存函式庫接收更新、修補程式和安全組態,然後再將其置於生產網路中。

系統精簡

精簡意味著從系統中移除任何不必要的服務和守護程式。沒有必要透過執行多個服務來為自己製造問題,這些服務可能沒人使用,但可能使系統容易受到攻擊。只需安裝提供服務給使用者或其他系統所需的元件。至少,您需要在系統上執行SSH守護程式,以便您可以遠端登入和管理它們。如果您發現某些使用者需要某種特殊服務,而該服務僅偶爾使用,或者使系統處於不太安全的狀態,則可以在需要時開啟該服務,並在使用完畢後關閉,或者將該服務放在一個安全的網路上,使其只能從有限數量的系統中存取。

網路守護程式的安全防護

決定要安裝和支援哪些網路守護程式通常很容易,因為每次構建系統時,您都知道系統的預期用途。如果是網頁伺服器,您就知道要安裝像Apache或NGINX這樣的網頁服務。如果系統是資料函式庫伺服器,您將安裝MySQL、MariaDB或其他資料函式庫軟體。問題是,為了使系統有用,它必須暴露對應的TCP埠供其服務使用。這些網路守護程式容易受到攻擊,因此必須加以保護。

有多種方法可以保護網路守護程式和服務,但安裝您想要提供的服務的安全版本是最簡單的方法。例如,如果您的新系統是DNS伺服器,請使用DNSSEC。如果您組態輕量級目錄存取協定(LDAP)伺服器,請使用LDAPS。並且始終對具有憑證保護的網頁伺服器使用HTTPS。

安全Shell守護程式

幾乎每個Linux系統上最常見的網路守護程式是安全Shell(SSH)守護程式。SSH提供了一個安全(加密)的連線到Linux系統的網路連線。儘管SSH守護程式(SSHD)透過其加密通道具有內建的安全性,但其通訊仍然容易受到攻擊。有多種方法可以保護SSHD,使攻擊者的攻擊收效甚微。

限制特定主機存取SSHD

管理員可以使用兩個檔案來限制對任何守護程式的存取:/etc/hosts.allow/etc/hosts.deny。它們不需要重新啟動服務,因為它們不是設定檔,系統每次在客戶端存取服務時都會檢查它們。/etc/hosts.allow檔案更為重要,因為其中的設定會覆寫/etc/hosts.deny檔案中的設定。

要啟用來自單一IP地址(192.168.1.50)的SSH連線,/etc/hosts.allow檔案中的條目如下所示:

sshd: 192.168.1.50
sshd: ALL: DENY

此條目只允許來自192.168.1.50的SSH連線,並拒絕來自所有其他IP地址的連線。如果您發現設定此類別條目在/etc/hosts.allow中不起作用,那麼您需要檢查sshd中是否整合了tcp_wrapper,使用以下命令:

$ sudo ldd /path/to/binary | grep libwrap

如果您沒有收到任何回應,則您的sshd未編譯支援tcp_wrappers,並且可能已被棄用於您的發行版中。許多封裝的sshd安裝都是這種情況。您正在尋找的回應類別似於以下內容:

$ sudo ldd /usr/sbin/sshd | grep libwrap
libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007fc6c2ab2000)

如果您的sshd不支援tcp_wrappers,您有三個選項:

  • 使用其他方法來保護sshd(防火牆規則、iptables、nftables)
  • 編譯支援tcp_wrappers的openssh_server
  • 找到並替換當前支援tcp_wrappers的openssh_server套件

實施firewalld規則

如果您使用firewalld,請首先從firewalld的規則中刪除ssh服務:

$ sudo firewall-cmd --permanent --remove-service=ssh

使用iptables或nftables規則

您可以考慮使用iptables或nftables命令來執行類別似於將條目新增到/etc/hosts.allow/etc/hosts.deny的功能。

安全協定範例

下表顯示了部分安全服務的範例:

協定描述
https443/tcpTLS/SSL上的HTTP協定
https443/udpTLS/SSL上的HTTP協定
ldaps636/tcpSSL上的LDAP
ldaps636/udpSSL上的LDAP
imaps993/tcpSSL上的IMAP
imaps993/udpSSL上的IMAP
pop3s995/tcpSSL上的POP-3
pop3s995/udpSSL上的POP-3

使用安全協定和加密並不能保證安全,但總比使用沒有加密的非安全協定要好。即使對於安全的應用程式和協定,也經常會出現漏洞。保持系統更新和修補有助於防止安全漏洞。

網路安全存取控制:SSH 連線的安全性強化

在現代網路環境中,SSH(Secure Shell)是管理遠端伺服器的標準工具。然而,不當的設定可能會導致嚴重的安全風險。本章節將探討如何強化 SSH 連線的安全性,包括限制存取來源、停用 root 登入以及使用金鑰驗證取代密碼驗證。

限制 SSH 存取來源

為了降低未授權存取的風險,必須限制哪些 IP 位址或網段可以連線到 SSH 服務。以下是使用不同防火牆工具進行設定的方法:

使用 firewall-cmd 設定 SSH 存取規則

首先,建立一個新的防火牆區域(zone)並將特定的 IP 位址加入該區域:

$ sudo firewall-cmd --permanent --new-zone=SSH_zone
$ sudo firewall-cmd --permanent --zone=SSH_zone --add-source=192.168.1.50
$ sudo firewall-cmd --permanent --zone=SSH_zone --add-service=ssh

內容解密:

  1. --new-zone=SSH_zone:建立一個名為 SSH_zone 的新防火牆區域,用於專門管理 SSH 連線。
  2. --add-source=192.168.1.50:將來源 IP 192.168.1.50 加入 SSH_zone,允許該 IP 存取 SSH 服務。
  3. --add-service=ssh:在 SSH_zone 中開放 SSH 服務。

完成設定後,必須重新載入防火牆規則:

$ sudo firewall-cmd --reload

使用 iptables 限制 SSH 存取

若使用 iptables,可透過以下指令限制特定 IP 存取 SSH:

$ sudo iptables -A INPUT -p tcp -s 192.168.1.50 --dport 22 -j ACCEPT

內容解密:

  1. -A INPUT:將規則新增到 INPUT 鏈,用於處理進入的連線。
  2. -p tcp:指定協定為 TCP。
  3. -s 192.168.1.50:僅允許來源 IP 為 192.168.1.50 的連線。
  4. --dport 22:指定目標埠為 22(SSH 預設埠)。
  5. -j ACCEPT:接受符合條件的連線。

使用 nftables 設定 SSH 存取規則

若使用 nftables,可新增以下規則:

$ sudo nft insert rule ip filter input ip saddr 192.168.1.50 tcp dport 22 accept

若出現錯誤,可能需要先建立新的 table 和 chain:

$ sudo nft add table ip filter
$ sudo nft add chain ip filter input { type filter hook input priority 0\; }
$ sudo nft insert rule ip filter input ip saddr 192.168.1.50 tcp dport 22 accept

內容解密:

  1. add table ip filter:建立一個名為 filter 的 IPv4 table。
  2. add chain ip filter input:在 filter table 中建立名為 input 的 chain,並設定其型別和優先順序。
  3. insert rule:在 input chain 中插入允許特定 IP 連線到 SSH 的規則。

完成變更後,重啟 nftables 服務:

$ sudo systemctl restart nftables

停用 root 使用者的 SSH 登入

根據安全考量,應停用 root 使用者直接透過 SSH 登入。編輯 /etc/ssh/sshd_config 檔案,將 PermitRootLogin 設定為 no

PermitRootLogin no

然後重啟 SSH 服務:

$ sudo systemctl restart sshd

內容解密:

  1. PermitRootLogin no:禁止 root 使用者透過 SSH 登入,提高系統安全性。
  2. 重啟 sshd 服務使變更生效。

使用金鑰驗證取代密碼驗證

密碼驗證存在被暴力破解的風險,使用金鑰驗證(Public Key Authentication)可大幅提升安全性。需進行以下設定:

  1. 編輯 /etc/ssh/sshd_config,確保以下設定正確並重啟 sshd

    PasswordAuthentication no
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    

    然後重啟服務:

    $ sudo systemctl restart sshd
    
  2. 使用者端需生成金鑰對並將公鑰複製到遠端伺服器:

    $ ssh-keygen -t rsa
    $ ssh-copy-id [email protected]
    

內容解密:

  1. ssh-keygen -t rsa:生成 RSA 金鑰對,用於無密碼登入。
  2. ssh-copy-id:將公鑰複製到遠端主機的 authorized_keys,實作金鑰驗證登入。

綜合建議

除了上述措施,還應定期更新使用者端與伺服器軟體,並設定自動更新機制,以確保系統始終處於最新且最安全的狀態。綜上所述,透過限制 SSH 存取來源、停用 root 登入以及使用金鑰驗證,可顯著提升 SSH 連線的安全性。