緯育 2026-0416
出自頂極製作所
Linux 系統管理:PAM 和 SHELL
本次講座聚焦於Linux的PAM(Pluggable Authentication Modules,可插拔驗證模組)機制。講師詳細說明PAM的設計理念、運作流程、設定檔結構與關鍵驗證模組。PAM提供統一驗證框架,讓應用程式僅需呼叫PAM而無需重複撰寫驗證邏輯。內容涵蓋四種驗證類型(Type)與四種控制旗標(Control Flag),並強調required旗標對最終驗證結果的決定性影響。此外介紹多個常用模組,如pamunix.so(標準帳號密碼驗證)、pamnologin.so(限制非root使用者登入)及其他強化安全的模組,並進行實作示範。
Shell (殼層) 的概念與設定
- Shell 的基本概念與類型
- Shell 是一支程式,作為使用者與作業系統核心溝通的介面。
- 主要分為兩大類型:文字模式 (CLI) 和圖形化 (GUI)。
- 文字模式 Shell (CLI)
- DOS: Shell 程式為 command.com。若刪除,系統將無法接收指令。
- UNIX-like 系統: 提供多種 Shell,如 sh, csh, tcsh, ksh,以及目前 Linux 普遍使用的 bash。
- 圖形化使用者介面 (GUI) Shell
- Windows: 核心程式為 explorer.exe,管理桌面、開始功能表、工作列等圖形元素。結束此程序會導致圖形介面消失。
- UNIX-like 系統: 擁有多樣化的桌面環境,如 KDE、GNOME、XFCE 等。
- Shell 組態檔與登入類型
- Shell 的行為由組態檔定義,分為位於 /etc 的共用組態與位於使用者家目錄的私用組態。
- 系統讀取哪些組態檔取決於登入方式:Login Shell(完整登入流程,如輸入帳密或 su -)與 Non-Login Shell(非完整登入的身份切換,如 su <帳號>),兩者會讀取不同的組態檔。
別名 (Alias)
- 定義與作用: 允許使用者自訂簡短名稱來取代複雜指令,優先級高於系統內建指令。
- 建立與查看: 使用 alias <名稱>='<指令>' 建立,單獨執行 alias 可查看所有已設定的別名。
- 取消別名: 使用 unalias <名稱> 指令可以取消已設定的別名。
- 應用與差異:
- 許多系統預設 alias ls='ls --color=auto',使檔案列表帶有顏色。
- CentOS 預設為 rm 和 mv 加上 -i 別名,在刪除或覆蓋檔案時會提示確認,增加安全性。
- Ubuntu 預設無此別名,操作會直接執行。
- 臨時建立的別名在重開機後會消失,需寫入設定檔(如 .bashrc)才能永久生效。
檔案連結 (Link)
- 連結的概念與用途: 類似 Windows 的「捷徑」,用於節省空間、提供不同存取名稱、方便存取深層路徑檔案。
- Linux 中的連結類型: 主要分為實體連結 (Hard Link) 與符號連結 (Symbolic Link)。
實體連結 (Hard Link)
- 原理: 讓多個檔名指向同一個 inode 編號,不消耗新的 inode 或資料區塊。
- 指令: ln [來源檔案] [目標連結檔名]。
- 特性與限制:
- 不能跨檔案系統 (File System)。
- 不能連結目錄,以防無窮迴圈。
- 刪除任一連結檔(包括原始檔)只會將 inode 的「連結計數 (link count)」減 1。只要計數不為 0,檔案內容依然存在且可透過其他連結存取。
- 觀察: 使用 ls -li 可查看 inode 編號,實體連結與來源檔案的 inode 編號相同,連結計數會增加。
符號連結 (Symbolic Link)
- 原理: 建立一個獨立的新 inode 和新資料區塊,該區塊儲存的內容是「原始檔案的路徑字串」。
- 指令: ln -s [來源檔案] [目標連結檔名]。
- 特性:
- 可以跨檔案系統。
- 可以連結目錄。
- 若原始檔案被刪除,符號連結會變成一個無法存取的「懸空連結」(dangling link)。
- 觀察: 使用 ls -l 查看時,檔案類型以 l 標示。
連結技術應用分析 (網盤推測)
- 實體連結模式: 若網盤使用此技術,使用者「儲存」他人分享的檔案僅是建立連結。即使原始分享者刪除檔案,只要還有其他使用者連結存在,檔案實體仍在伺服器上,可能引發隱私問題。
- 符號連結模式: 若使用此技術,當原始分享者刪除檔案或停止分享,所有其他使用者的連結會同時失效。
Linux 特殊裝置檔案
- /dev/null
- 一個「黑洞」或「空裝置」,任何寫入其中的資料都會被直接丟棄。
- 常用於重新導向程式不需要的輸出訊息,例如 2> /dev/null 將錯誤訊息丟棄。
- 可用於不精確的磁碟速度測試(dd if=/dev/sdX of=/dev/null),但結果會受系統快取影響而失準。
- /dev/zero
- 一個「零裝置」,會不斷產生零位元組 (0)。
- 主要用於快速建立一個指定大小且內容全為零的檔案,例如 dd if=/dev/zero of=somefile bs=1M count=10 會產生一個 10MB 的檔案。
- Null Block Device (敞板裝置)
- 一個虛擬裝置,對其讀寫會立即回報「空間已滿」,用於測試軟體在磁碟滿載時的錯誤處理能力。
Linux 系統管理與工具
- 使用者通訊
- write [使用者帳號]: 向另一位已登入的使用者傳送即時訊息。
- wall: 向所有在線上的使用者廣播訊息,常用於系統維護公告。
- 持續性工作管理 (Screen)
- 用途: screen 是一個終端機多工器,用於建立一個即使在使用者登出或連線中斷後,內部工作仍能持續執行的虛擬視窗 (session)。
- 解決問題: 避免長時間執行的任務因登出而中斷或變成無法控制的「孤兒程序」。
- 基本操作:
- screen: 啟動一個新的 screen session。
- Ctrl+A 後按 D: 分離 (detach) 目前的 session,使其在背景執行。
- screen -ls: 列出所有在背景運行的 sessions。
- screen -r [session_id]: 重新連接 (re-attach) 到指定的 session。
- 安全提醒: 離開前應確實登出或關閉 screen,否則會保留權限在終端機上,帶來安全風險。
硬碟資料清除與恢復
- 清除原理: 單純格式化或用 dd 寫入零值 (/dev/zero) 無法保證 100% 清除,專業機構仍可透過分析磁粉殘留訊號還原部分資料。
- 更安全的做法是重複寫入 0、寫入 1,再寫入隨機資料。
- 二手硬碟風險: 拍賣網站的二手硬碟通常只經快速格式化,資料極易恢復。公家機關汰換的硬碟資料雖可能被加密,但檔案列表仍可能洩漏資訊。
- 檢測方法: 可使用 dd 從硬碟隨機位置讀取一小塊資料,再用 hexdump 檢查。若內容為隨機資料,表示未被徹底清除;若全為 0,則表示已被覆寫。
- RAID 陣列: RAID 1 的單顆硬碟資料可恢復;RAID 0 或 RAID 5 等有條帶化的陣列,單顆硬碟資料不完整,無法直接讀取。