緯育 2026-0402.2

出自頂極製作所

帳號與群組的管理概念

2026-0402-05.png

2026-0402-06.png

群組基本管理指令

  • 新增群組 (groupadd)
    • 基本用法:groupadd [群組名稱]。
    • 指定 GID:groupadd -g [GID] [群組名稱]。
    • 建立後可透過 cat /etc/group 檢視。
  • 修改群組 (groupmod)
    • 更改群組名稱:groupmod -n [新群組名稱] [原群組名稱]。
    • 更改 GID:groupmod -g [新GID] [群組名稱]。
  • 刪除群組 (groupdel)
    • 基本用法:groupdel [群組名稱]。
    • 若有成員正在使用該群組,系統會提示無法刪除。可使用 -f 強制刪除,但可能導致使用者程式出現問題。
    • 刪除後,使用者無法再透過 newgrp 登入該群組。

群組成員與密碼管理

  • 管理群組成員 (groupmems)
    • 新增成員:groupmems -a [使用者帳號] -g [群組名稱]。
    • 移除成員:groupmems -d [使用者帳號] -g [群組名稱]。
    • 列出成員:groupmems -l -g [群組名稱]。
  • 管理群組密碼與成員 (gpasswd)
    • 設定/變更群組密碼:gpasswd [群組名稱]。講師建議非必要不設定密碼,因不設密碼反而更安全。
    • 新增成員:gpasswd -a user1,user2 [群組名稱] 或 gpasswd -M user1,user2 [群組名稱] 可一次加入多位成員。注意:此操作會覆蓋原有的成員列表。
    • 移除成員:gpasswd -d [使用者帳號] [群組名稱]。
    • 設定群組管理者:gpasswd -A [管理者帳號] [群組名稱]。
  • 群組設定檔案
    • /etc/group:儲存群組基本資訊,包括群組名稱、GID 及成員列表。
    • /etc/gshadow:儲存群組的加密密碼與管理者資訊。使用指令管理會自動同步這兩個檔案。

群組切換與權限應用

  • 切換與識別使用者群組
    • groups [使用者名稱]:查詢指定使用者所屬的所有群組。不加參數則顯示當前使用者。
    • id:查看目前使用者詳細的群組資訊。
    • newgrp [群組名稱]:切換有效群組。若使用者已是群組成員,無需密碼;若非成員,且群組設有密碼,則需輸入密碼才能切換。
    • newgrp -:切換回使用者的主要群組。
    • exit:登出當前切換的群組,返回上一層狀態。
  • 群組管理者權限
    • 群組管理者的唯一功能是新增或移除群組內的其他成員(例如使用 gpasswd -d)。一般群組成員無此權限。
  • 應用場景與權限設定
    • 共享唯讀資料:將檔案權限設為群組唯讀(如 chmod 640 file),非群組成員則無權限。群組成員無需切換即可讀取。
    • 共用可讀寫專案:為實現群組協作(成員間可互相修改檔案),可建立一個共用目錄(如 chmod 770 dir),並要求成員使用 newgrp 切換到該群組後再建立檔案。這樣,新檔案的所屬群組會是共用群組,而非建立者個人的主要群組,確保了其他成員的寫入權限。
    • 管理需求:將一般使用者加入特定管理群組(如 netplan 目錄所屬群組),使其在不改變帳號本質的情況下,獲得該資源的管理能力。

使用者帳號建立補充

  • useradd -m 的重要性
    • 建立使用者時應使用 useradd -m [帳號],-m 參數會自動為使用者建立家目錄 (/home/[帳號])。
    • 若省略 -m,則需手動建立家目錄、複製設定檔、並修正擁有者與權限,過程繁瑣。
  • 家目錄預設檔案來源 (/etc/skel)
    • 新使用者家目錄中的預設檔案(如 .bashrc)是從 /etc/skel 目錄複製而來的。管理員可客製化此目錄以統一新使用者的預設環境。
  • 使用者預設值設定檔 (/etc/default/useradd)
    • useradd 指令的預設行為(如預設 Shell、家目錄根路徑等)定義在此檔案中。

2026-0407-01.png

帳號與身份認知

  • Whoami/Id/Pwd 的基本辨識
    • 透過 whoami(或「Who Am I」)快速確認當前使用者身份;講者提及 id 指令已在前面章節講過,兩者皆可用於辨識。
    • 在共享環境或雲端登入時,常看不到完整提示,應用這類指令以自我確認「我是哪個帳號」與目前所在目錄(pwd)。
    • 提醒在雲端環境初次登入時,花約 30 秒用這些指令確認基本狀況。
  • 身份切換與授權的差異(概念引介)
    • 身份切換:切換成他者身份後,所有操作被完整視為該身份行為;若用於不當行為,追查會指向被切換的帳號。
    • 授權:保留自身帳號,授權他方執行特定操作;機制與概念不同,避免直接把帳號給對方。此為後續將深入的主題。

群組與帳號資訊查詢

  • finger 與 /etc/passwd 的資訊欄位
    • finger 可用來展示使用者資訊;/etc/passwd 第五欄為資訊欄,可分割為多欄位配合展示。
    • 現代環境較少使用 finger,但在學習歷史或環境檢視時可作補充。
  • 群組相關指令:groups 與 groupmems
    • groups:以帳號查所屬群組,可查自己或指定帳號(加上帳號或 ID)。
    • groupmems(或類似名稱,如講者口誤「Goover Members」):以群組查成員名單;區分「用帳號查群組」與「用群組查帳號」兩種向度。

線上使用者與主機狀態監控

  • users 指令
    • 顯示目前線上使用者列表,適合遠端登入後的第一步快速檢查。
    • 有些主機可能未收錄 users 指令,需改用 w 或 who。
  • w 指令的完整視圖與欄位解讀
    • 無需參數即可提供豐富資訊:當前時間、系統開機時間(up)、線上使用者數、Load average(三個期間的 CPU 負載)、每位使用者的終端、登入來源與時間、idle(閒置時間)、CPU 使用(JCPU/PCPU)、當前執行命令。
    • 時間與時區:示例中系統未調時區,顯示 3 點;台灣需加 +8,顯示 11 點。時間與時區另有專章。
    • 終端類型與來源:
    • tty 表示本機控制台登入;遠端登入則標示 pts/BTS(講者示例中提「BTS」字樣)與來源 IP(若為 public IP 可追查身分)。
    • 登入時間(Login at)與 idle:
    • Login at 顯示精確登入時間(如 3:13),idle 顯示未操作的持續時長(秒、分)。
    • CPU 負載解讀(Load average 三值:1 分鐘、5 分鐘、15 分鐘平均):
    • 單核心基準:1.0 代表 100%;0.5 代表 50%;2.0 代表已滿載且尚有等候作業排隊。
    • 多核心換算:雙核心 2.0 代表兩核心滿載;4.0 代表兩核心滿載且額外兩核心等候量。
    • 判讀策略:較少在意 1 分鐘瞬時值,重看 5 分鐘;若 1 分鐘高、5 分鐘低,可能是瞬間工作。若 1、5 都高,再看 15 分鐘以辨識是否長期滿載。
    • 手機類比(Android 開發者選項顯示核心與負載):
    • 若 8 核心手機跑遊戲時 Load 僅約 2.0,CPU 很輕鬆,lag 可能非 CPU 問題;若高達 12.x,表示 CPU 來不及處理。
    • 進程觀察與強制登出:
    • w 可配合顯示 PID(小 p 參數)定位某使用者進行的程序,如歷史查看(history、/etc/passwd 等)。
    • 因「everything is a file;process 也是 file」,可用 kill 直接處理特定 PID(例如 kill 1297)以強制結束程序或登出。
    • 日常操作偏好:
    • 遠端檢查通常以 w 為首選,或先 users 後 w;w 無參數已涵蓋多數需求。
  • who 指令(精簡版)
    • 顯示線上誰在用:帳號、時間、日期、來源 IP、終端(如 pts0/pts1、tty)。
    • who -b:顯示系統開機時間。
    • 顯示 UID/使用者 ID 等資訊;與 users/w 有重疊,依環境選用。

登入歷史、最後登入與紀錄檔位置

  • last 指令(講者口誤與變體說明:laster/lastlog)
    • last:列出最近登入紀錄,可加 -n(或 -N、講者以「最後十筆」用語描述)限制顯示筆數;可指定終端(tty1、tty2、…)或帳號(如 user4)。
    • 顯示內容含:帳號、登入來源(BTS/pts 與 IP)、時間範圍(起訖)、持續時長(例如 0 分 0 秒代表登入失敗或極短會話)。
    • 實務中可能因 OS(如不同 distro,如 CentOS)有顯示差異或 bug,部分 tty 看不到;非指令問題,而是作業系統層面。
    • 常見流程:遠端登入後先用 w 檢視,再用 last 查看最近登入狀態與時間是否合理(例如發現昨天非上班日仍有登入需追查)。
  • last 的資料檔案位置與格式
    • 檔案位於 /var/log/wtmp(講者以「RAR 底下 Log 底下 Wtemp/wtemplar」口語讀法,意指 /var/log/wtmp)。
    • 該檔非純文字檔,不能用 cat;需以對應工具(如 last)讀取,格式類似資料庫。
    • 若檔案被刪除或清空,相關指令輸出會變空白;駭客入侵離開前常會刪除此類檔案,需知路徑以便取證或監控。
  • lastlog 指令(每帳號最後登入時間)
    • 以帳號為主鍵,列出所有帳號的最後登入時間清單;未曾登入者標示 Never logged in。
    • 可能配合選項如 -t(例如 T3 表示三天範圍)過濾時間,但講者認為此用法較少用。
    • 資料來源於 /var/log/lastlog,亦非純文字檔。
  • 清除紀錄的風險與不建議操作
    • 使用「truncate -s 0」等方式可清空檔案內容,但一般不建議;在練習環境可嘗試了解後果。
    • 清除會造成監控失效,實務上應保留紀錄以利稽核與事件溯源。

登入失敗偵測與防禦思路

  • lastb 指令(登入失敗紀錄)
    • 顯示登入失敗的帳號、時間、終端、來源;資料檔位於 /var/log/btmp(講者稱「BAR 底下 LOCKER 底下 BETEMP」)。
    • 駭客傾向刪除此檔以掩蓋爆破紀錄;管理者應熟悉路徑與檔案性質。
    • 常見情境:一早遠端登入先跑 lastb;若看到大量且密集的失敗紀錄,可能有人嘗試暴力破解(踹)。
    • 示範:嘗試以不存在帳號(如 user999、use888)與錯誤密碼登入,lastb 即顯示 TTY1(本機)或遠端 pts 對應的失敗事件。
  • 批次統計與告警
    • 以管線統計嘗試次數:lastb | wc -l 可快速得知失敗嘗試筆數(例如 10 次)。
    • 自動化腳本思路(後續課程以 shell script 實作):每小時掃描 lastb,篩選特定帳號或來源(遠端/本機),若超過閾值(如 100 或 1000 次),觸發動作。
    • 因應動作:最強硬的是直接關機(poweroff),以阻斷持續爆破;也可先記錄、告警(寄信、訊息),再由管理者決策。
    • 在無額外防禦系統的情況下,可自主建立基本偵測與防護。

實務快速檢查流程總結

  • 遠端登入初步檢視步驟(數秒至數分鐘)
    • users:快速看線上有誰。
    • w:詳看負載、使用者、終端類型、來源 IP、登入時間、idle、目前執行的命令。
    • last:檢視最近登入紀錄與時間是否合理;必要時限定筆數或查特定 tty/帳號。
    • lastb:檢視近期登入失敗事件量與時間密度,判斷是否遭暴力嘗試。
    • 錯誤或可疑狀況出現時,進一步追查或採取對應措施(例如 kill 程序、通知、隔離、關機)。

2026-0407-02.png

身份切換的必要性與概念

  • 為何需要切換帳號
  • 權限控管考量:在實務上,應盡量避免直接使用 root 帳號進行日常操作。通常會使用權限較低的帳號來執行任務,以降低對系統的影響範圍。
  • 安全考量:為特定的服務(如 FTP、web server)配置專屬的系統使用者(system user)來進行管理,可以增強安全性。
  • 系統維護需求:執行備份、升級等系統維護工作時,可能需要切換到擁有特定權限的專屬帳號。
  • 軟體本身限制:某些軟體(如 Telnet、SSH)為了安全,預設會限制或禁止高權限帳號(如 root)直接登入,因此必須先以低權限帳號登入後再進行身份切換。
  • 帳號使用的基本概念
  • 最小權限原則:除非絕對必要,否則應避免使用 root 帳號。
  • 安全切換流程:若確實需要使用 root 權限,應由一般使用者登入後再透過 su 指令切換身份。這種方式增加了破解難度,是目前主流作業系統(如 CentOS)的標準做法。
  • 權限足夠即可:在操作時,應使用權限「低到足夠」的帳號來完成任務。
  • 授權機制:可以使用授權機制(將在後續章節講述)來取代直接切換帳號,這樣無需共享 root 密碼。
  • 監控與記錄:應建立完整的帳號監控機制、登入記錄與查詢系統。
  • SSH 登入限制範例
  • 講師以 Party(應為 PuTTY)軟體示範,當嘗試使用 root 帳號直接透過 SSH (Port 22) 登入時會失敗。
  • 失敗原因並非密碼錯誤,而是基於安全考量,軟體預設不允許 root 帳號直接遠端登入。
  • 正確的操作是先使用一個低權限的一般使用者帳號(如 user)登入,成功後再使用 su 指令切換到 root 帳號。

su(Switch User)指令詳解

  • su 指令基本用法
  • su 是 Switch User 的縮寫,用於切換使用者身份。
  • su:不帶任何參數,預設切換到 root 帳號,需要輸入 root 的密碼。
  • su [帳號名稱]:切換到指定的帳號,需要輸入目標帳號的密碼。
  • su 的環境切換差異(* 參數)
  • 不帶減號(su [帳號]):僅切換使用者「身份」與權限,但工作環境(如目前所在目錄、環境變數)沿用切換前帳號的設定,稱為「不完整切換」。
  • 帶減號(su * [帳號]):身份、權限與工作環境皆完整切換為目標帳號的預設環境,稱為「完整切換」。例如,切換後當前目錄會變為目標使用者的家目錄(home directory),如同該使用者重新登入系統。
  • su 的權限切換規則
  • 高權限切換至低權限:root 切換到任何一般使用者帳號時,不需要輸入對方的密碼。
  • 低權限切換至高權限/其他帳號:一般使用者切換到 root 或其他使用者帳號時,必須輸入目標帳號的正確密碼。
  • su 的其他常用參數
  • -c [指令]:允許以切換後的身分執行單一指令,執行完畢後自動回到原使用者身份,無需手動登出。例如:su * root -c 'ls -la /root'。
  • -s [Shell 路徑]:在切換身份時指定要使用的 Shell。例如,當目標使用者的預設 Shell 不是 bash 時,可用 su user1 -s /bin/bash 強制使用 bash 環境。

補充技巧:列出系統帳號與群組

  • 傳統方法:解析設定檔
  • 透過讀取系統設定檔並搭配指令達成。
  • 列出所有帳號:cut -d: -f1 /etc/passwd。此指令讀取 /etc/passwd(儲存所有帳號資訊),以冒號 : 為分隔符,取出第一欄位(帳號名稱)。
  • 列出所有群組:cut -d: -f1 /etc/group。原理同上,但讀取的是群組設定檔 /etc/group。
  • Bash 內建指令:compgen
  • 在 bash 環境下,可使用更簡單的內建指令 compgen。
  • 列出所有帳號:compgen -u。
  • 列出所有群組:compgen -g。
  • 限制:compgen 僅存在於 bash。在其他 Shell(如 sh、csh 或 macOS 預設的 zsh)中無法使用,需改採用傳統的 cut 方法。

2026-0407-03.png

2026-0407-04.png