系統基礎知識II:如何避免系統在網路上裸奔?

diverwil1995
6 min readSep 26, 2024

--

Photo by Kasia Derenda on Unsplash

隨著網路威脅日漸複雜,確保我們的系統和資料安全是不可或缺的。本文將探討兩個對後端開發極為重要的安全概念:檔案權限管理和SSH(Secure Shell)。這些工具和技術不僅能幫助我們建立更安全的系統,還能在面對潛在威脅時提供有效的防禦機制。

檔案權限管理

檔案權限的重要性

檔案權限是Unix/Linux系統安全的關鍵。它們提供了一種機制,可以精確控制誰可以存取、修改或執行系統中的文件和目錄。正確的檔案權限設置可以:

  1. 保護敏感資料免受未授權存取
  2. 防止重要系統文件被意外或惡意變更
  3. 限制某些使用者或程式的操作範圍
  4. 有助於維護系統的整體穩定性和安全性

檔案權限的基本概念

在Unix/Linux系統中,每個文件和目錄都有三種基本權限:

  • 讀取(Read, r):允許查看文件內容或列出目錄中的文件
  • 寫入(Write, w):允許修改文件或在目錄中創建、刪除文件
  • 執行(Execute, x):允許執行文件或存取目錄

這些權限分別應用於三類使用者:

  • 所有者(Owner):文件或目錄的創建者
  • 群組(Group):與文件關聯的使用者組
  • 其他人(Others):不屬於所有者或群組的所有其他使用者

chmod

chmod(change mode)是用來修改文件或目錄權限的命令。以下是常見的使用方式:

使用三個數字來表示權限,每個數字分別代表擁有者、群組和其他使用者的權限。

  • 4:代表讀取權限 (r)
  • 2:代表寫入權限 (w)
  • 1:代表執行權限 (x)

透過數字相加來表示不同組合權限:

  • 7 (4+2+1) 表示讀取 + 寫入 + 執行
  • 6 (4+2) 表示讀取 + 寫入
  • 5 (4+1) 表示讀取 + 執行
  • 4 表示只有讀取權限
  • 0 表示無權限

例如:

chmod 755 script.sh # 所有者可讀寫執行,群組和其他人可讀和執行
chmod 644 config.txt # 所有者可讀寫,群組和其他人只能讀取
chmod 400 id_rsa # 只有所有者可讀取,常用於保護私鑰文件

常見權限設置及其應用場景

  • 755(rwxr-xr-x):常用於可執行檔案或腳本
    例如:chmod 755 /home/user/scripts/backup.sh
  • 644(rw-r — r — ):常用於設定檔案或普通文字檔案
    例如:chmod 644 /etc/ssh/sshd_config
  • 700(rwx — — — ):用於只允許擁有者存取的腳本或目錄
    例如:chmod 700 /home/user/.ssh
  • 600(rw — — — -):用於只允許擁有者讀寫的敏感檔案,如 SSH 私鑰
    例如:chmod 600 /home/user/.ssh/id_rsa
  • 400(r — — — — ):用於只允許擁有者讀取的高度敏感檔案,如 SSH 公鑰
    例如:chmod 400 /home/user/secrets/encryption_key.pem

SSH簡介

SSH的重要性和基本概念

SSH(Secure Shell)是一種加密的網路協定,用於在不安全的網路中安全地執行網路服務。它主要用於遠端登入和命令執行,但也支援通道、埠號轉發和文件傳輸等功能。

SSH的主要用途

  1. 安全的遠端系統管理
  2. 安全文件傳輸(使用scp或sftp)
  3. 埠號轉發和通道
  4. 安全的應用程式資料傳輸

如何使用SSH

  • 基本連接:
ssh username@hostname
  • 使用非標準埠號:
ssh -p 2222 username@hostname
  • 使用私鑰認證:
ssh -i /path/to/private_key username@hostname
  • 執行遠端命令:
ssh username@hostname 'ls -l /var/www'
  • 使用SCP傳輸文件:
scp local_file.txt username@hostname:/path/to/remote/directory/
  • 設置SSH配置文件:
    ~/.ssh/config 文件中新增常用連接設置,簡化連接過程。
  • 本地埠號轉發:
    將本地8080埠號轉發到遠端主機的80埠號。
ssh -L 8080:localhost:80 username@hostname

SSH金鑰管理

  • 生成SSH密鑰對:
ssh-keygen -t rsa -b 4096
  • 將公鑰新增到遠端伺服器:
ssh-copy-id username@hostname
  • 使用ssh-agent管理多個密鑰:
eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa

常見的SSH攻擊方式及防護

暴力破解攻擊

攻擊原理:駭客嘗試大量可能的使用者名稱和密碼組合,希望通過反覆嘗試來猜中正確的憑證。

防護措施:

  • 使用高強度密碼:建議使用長度至少12位,包含大小寫字母、數字和特殊字元的複雜密碼。
  • 金鑰認證:使用SSH金鑰對進行認證,而不是密碼。
ssh-keygen -t rsa -b 4096
ssh-copy-id user@host
  • 使用fail2ban工具:自動偵測和阻擋重複失敗的登入嘗試。
sudo apt-get install fail2ban
sudo systemctl enable fail2ban

中間人攻擊

攻擊原理:駭客試圖在客戶端和伺服器之間攔截或修改通訊內容,例如修改購物網站。

防護措施:

  • 驗證主機金鑰:首次連線時仔細檢查伺服器的指紋。
  • 使用已知主機檔案:保持 ~/.ssh/known_hosts 檔案更新,並在連線時驗證。
ssh -o "StrictHostKeyChecking=yes" user@host

權限提升攻擊

攻擊原理:攻擊者獲得低權限帳戶後,嘗試利用系統漏洞或錯誤配置來獲得更高的權限,最終達到 root 權限。

防護措施:

  • 定期更新系統和應用程式,修補已知的安全漏洞。
  • 正確設置文件和目錄權限,特別是敏感的系統文件。
  • 限制 sudo 權限,只給予必要的使用者最小權限。

檔案權限管理錯誤導致的安全問題案例

網站配置文件權限過寬

  • 問題:Apache配置文件設置為全局可讀(644)
  • 風險:敏感訊息(如資料庫密碼)可能被洩露
  • 解決:將權限改為600,只允許root使用者讀寫

使用者主目錄權限過寬

  • 問題:使用者主目錄設置為777
  • 風險:其他使用者可以存取、修改甚至刪除文件
  • 解決:將權限改為700或750,限制其他使用者的存取

結語

作為後端工程師,正確管理文件權限及掌握SSH的使用是不可或缺的。以下統整一些安全要領:

  1. 堅持遵循最小權限原則
  2. 定期審查和更新系統權限
  3. 採用SSH密鑰而非密碼進行認證
  4. 保持系統和軟體的最新狀態

通過認真實施這些安全措施,可以大幅提升系統的安全性,為使用者資料和服務提供更好的保護!

--

--

diverwil1995

我是小鬼,擅長跨領域學習和挑戰、樂於分享,最近在強迫自己養成寫文章的習慣,用於記錄自己的成長歷程。 軟體工程師、威士忌侍酒師、進階水域潛水員、 0-1 外圍拳擊手。