一、爲什麼要管理用戶和用戶組?

在Linux系統中,每個用戶都有唯一的身份標識,用戶組則是用戶的集合。管理用戶和用戶組的核心目的是權限控制資源隔離

  • 安全隔離:不同用戶擁有不同權限,防止誤操作或惡意訪問(比如普通用戶不能修改系統配置,只有root可以)。
  • 協作共享:多個用戶可通過加入同一用戶組,共享文件或目錄的權限(比如開發團隊共用項目目錄)。
  • 系統管理:方便批量管理用戶(如按部門劃分用戶組,統一分配權限)。

二、基礎概念解析

1. 用戶(User)

  • 定義:系統的使用者,每個用戶有唯一的 UID(用戶ID)
  • 分類
  • root用戶:系統管理員,UID=0,擁有最高權限。
  • 系統用戶:UID=1~999,用於運行系統服務(如nobody用戶)。
  • 普通用戶:UID≥1000,由管理員創建,用於日常操作。

2. 用戶組(Group)

  • 定義:用戶的集合,用於批量分配權限,每個組有唯一的 GID(組ID)
  • 分類
  • 主組:用戶默認所屬的組,創建文件時默認繼承此組權限。
  • 附加組:用戶額外加入的組,可臨時獲得該組權限。

三、核心配置文件

Linux通過以下文件存儲用戶和組的信息,初學者需瞭解基本結構:

1. /etc/passwd(用戶基本信息)

  • 每行代表一個用戶,格式:用戶名:密碼佔位符:UID:GID:註釋:家目錄:登錄Shell
  • 示例:testuser:x:1000:1000::/home/testuser:/bin/bash
  • x:密碼字段(實際密碼存儲在/etc/shadow
  • 1000:用戶ID(UID),1000是普通用戶默認起始值
  • /home/testuser:用戶家目錄(登錄後默認目錄)
  • /bin/bash:用戶登錄後的Shell(/sbin/nologin表示禁止登錄)

2. /etc/group(用戶組信息)

  • 每行代表一個組,格式:組名:密碼佔位符:GID:組成員列表
  • 示例:dev:x:1001:testuser,alice
  • dev:組名
  • 1001:組ID(GID)
  • testuser,alice:組成員(多個用戶用逗號分隔)

3. /etc/shadow(用戶密碼)

  • 存儲加密後的密碼,僅root可查看,格式:用戶名:加密密碼:最後修改時間:密碼有效期:警告時間:過期時間:保留
  • 示例:testuser:$6$...:19500:0:99999:7:::

四、常用管理命令

1. 用戶管理

創建用戶:useradd

  • 基礎用法useradd 用戶名
  • 示例:useradd -m testuser-m:自動創建家目錄,否則無家目錄)
  • 常用參數
  • -d /home/newdir:指定家目錄
  • -g dev:指定主組(dev爲組名或GID)
  • -G dev,testgroup:添加附加組(多個組用逗號分隔)
  • -s /bin/bash:指定登錄Shell(默認/bin/bash

刪除用戶:userdel

  • 基礎用法userdel 用戶名(默認刪除家目錄和文件)
  • 保留家目錄userdel -r 用戶名-r:刪除用戶時同時刪除家目錄)

修改用戶:usermod

  • 示例
  • 修改家目錄:usermod -d /newdir testuser
  • 修改主組:usermod -g dev testuser(需確保dev組存在)
  • 添加附加組:usermod -aG testgroup testuser-a:追加,-G覆蓋原有附加組)

設置/修改密碼:passwd

  • 修改當前用戶密碼passwd(直接執行,輸入原密碼)
  • 設置其他用戶密碼(root權限):passwd testuser(直接輸入新密碼)

2. 用戶組管理

創建組:groupadd

  • 基礎用法groupadd 組名
  • 示例:groupadd dev(創建名爲dev的組)

刪除組:groupdel

  • 基礎用法groupdel 組名
  • 注意:若組內有成員,需先刪除成員再刪除組。

查看用戶所屬組:groups

  • 示例groups testuser(顯示用戶所有附加組和主組)

五、實際操作示例

1. 創建用戶並分配權限

步驟1:創建普通用戶testuser,指定主組dev

# 創建用戶並自動生成家目錄,主組爲dev(需先創建dev組)
groupadd dev
useradd -m -g dev -s /bin/bash testuser

步驟2:設置密碼

passwd testuser  # 輸入兩次密碼

步驟3:切換到普通用戶

su - testuser  # 切換到testuser,-表示切換環境變量

步驟4:將用戶加入附加組testgroup

groupadd testgroup
usermod -aG testgroup testuser  # 追加到testgroup

步驟5:查看用戶信息

id testuser  # 輸出:uid=1000(testuser) gid=1001(dev) groups=1001(dev),1002(testgroup)

2. 刪除用戶但保留文件

若需刪除用戶但保留其創建的文件(如日誌或配置),需:

userdel -r testuser  # 保留家目錄?-r參數會刪除家目錄,此處矛盾!
# 正確做法:先刪除用戶但保留家目錄,再手動清理
userdel testuser  # 僅刪除用戶,不刪家目錄
rm -rf /home/testuser  # 手動刪除家目錄

六、常見問題與注意事項

1. 忘記用戶密碼?

  • root用戶可重置密碼:passwd --stdin testuser(CentOS/RHEL需先安裝policycoreutils
  • 或:passwd testuser,輸入新密碼

2. 無法登錄用戶?

  • 檢查Shell是否正確:cat /etc/passwd | grep testuser(最後一列應爲/bin/bash而非/sbin/nologin

3. 多用戶共享目錄權限?

  • 方法:將所有用戶加入同一組,設置目錄屬組爲該組,並開啓組寫入權限
# 示例:創建共享目錄/data/project,用戶組爲dev
mkdir -p /data/project
chgrp dev /data/project
chmod g+rwx /data/project  # 組內用戶可讀寫執行

總結

用戶與用戶組管理是Linux系統安全與協作的基礎。通過本文,你已掌握核心命令(創建、刪除、修改)、配置文件(passwd/group/shadow)及實際操作流程。日常管理中,需結合idgroups等命令排查權限問題,避免誤刪用戶或組。實踐中多嘗試創建用戶、切換用戶,逐步熟悉權限分配邏輯,就能熟練掌控Linux用戶體系。

小夜