萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 用戶與組管理全攻略:從賬號創建到權限鎖定的系統級實戰

用戶與組管理是 Linux 系統安全的基石。本文系統梳理用戶分類、核心配置文件解析、創建/修改/刪除/鎖定全生命周期操作、組管理細節,並提供生產環境常用最佳實踐與自動化腳本模板。

一、用戶三大類別與 UID/GID 分配策略

類別用途UID 範圍登錄權限典型示例
超級用戶系統完全控制0是root
系統用戶/偽用戶運行服務進程、擁有文件1~999 (CentOS 7+)
1~499 (舊版)
否nginx, mysql, www-data
普通用戶人工登錄、業務操作>=1000 (現代)
>=500 (舊版)
是dev, admin, deploy

二、核心配置文件深度解析

1. /etc/passwd — 用戶基本信息(全局可讀)

用戶名:密碼佔位符(x):UID:GID:描述信息:家目錄:登錄Shell
lee:x:1001:1001:Lee Admin:/home/lee:/bin/bash

字段說明:

  • 密碼欄為 x 表示真實哈希存放在 /etc/shadow
  • GID 為主組 ID,附屬組在 /etc/group 中定義
  • Shell 設為 /sbin/nologin 或 /bin/false 可禁止登錄

2. /etc/shadow — 加密密碼與過期策略(僅 root 可讀)

用戶名:加密哈希:最後修改天數(1970起):最小間隔:最大間隔:警告天數:非活動天數:過期天數:保留
lee:$6$...:19500:0:99999:7::: 
# 0=可隨時改密碼, 99999=永不過期, 7=過期前7天警告

/etc/passwd 字段示意

/etc/shadow 字段示意

3. /etc/group — 組信息

組名:組密碼(x):GID:附屬用戶列表(逗號分隔)
admin:x:1001:lee,devops

/etc/group 結構示意

三、用戶生命周期管理命令大全

1. 創建用戶 useradd / adduser

# 標準創建:建家目錄、指定Shell、加入附屬組
useradd -m -s /bin/bash -G docker,sudo -c "DevOps Engineer" devops

# 系統服務賬號:無家目錄、UID<1000、禁止登錄
useradd -r -s /sbin/nologin -M -c "Nginx Service" nginx

# 參數速查
# -m  建家目錄 (默認複製 /etc/skel)
# -M  不建家目錄
# -d  指定家目錄路徑
# -s  指定登錄Shell
# -g  指定主組(GID或名稱)
# -G  指定附屬組(逗號分隔)
# -u  指定UID(需唯一)
# -e  過期日期 YYYY-MM-DD
# -f  密碼過期後寬限天數
# -r  創建系統賬號

2. 設置/修改密碼 passwd

passwd devops              # 交互式設置
echo "password" | passwd --stdin devops  # 腳本化(需 root)

3. 修改用戶屬性 usermod

usermod -L devops          # 鎖定賬號 (在 /etc/shadow 密碼前加 !)
usermod -U devops          # 解鎖賬號
usermod -aG docker devops  # 追加附屬組 (-a 必須,否則覆蓋)
usermod -d /newhome -m devops  # 遷移家目錄
usermod -s /bin/zsh devops # 修改Shell
usermod -l newname devops  # 重命名用戶 (需用戶未登錄)

useradd 示例

用戶信息查看

用戶刪除示例

用戶鎖定示例

用戶解鎖示例

用戶屬性修改

用戶登錄名修改

用戶登錄名修改2

密碼鎖定示例

4. 刪除用戶 userdel

userdel devops             # 僅刪除賬號,保留家目錄
userdel -r devops          # 連同家目錄、郵箱一併刪除
userdel -f devops          # 強制刪除(即使用戶在線)

5. 查看用戶信息

id devops                  # UID/GID/組列表
finger devops              # 詳細信息(需安裝 finger)
getent passwd devops       # 查詢 NSS 數據源(含 LDAP/SSSD)

四、組管理命令

groupadd docker                    # 創建組
groupadd -g 999 docker             # 指定 GID
groupmod -n containerd docker      # 重命名組
groupdel docker                    # 刪除組(需無用戶以此為主組)
gpasswd -a devops docker           # 加入組
gpasswd -d devops docker           # 移出組
gpasswd -A devops docker           # 設為組管理員

組創建刪除

組密碼管理

組密碼刪除

五、生產環境最佳實踐清單

  1. 禁用 root 遠程登錄:PermitRootLogin no (sshd_config)
  2. 強制密碼複雜度:配置 /etc/security/pwquality.conf 或 PAM pam_pwquality.so
  3. 定期審計:awk -F: '$3==0 {print $1}' /etc/passwd 檢查 UID=0 賬號
  4. 清理殭屍賬號:lastlog -b 90 找出 90 天未登錄用戶
  5. 最小權限原則:服務賬號 nologin、無家目錄、專用 UID/GID
  6. 集中認證:規模超 20 台建議接入 LDAP/AD/Keycloak

六、自動化批量創建腳本模板

#!/bin/bash
# batch-create-users.sh
# CSV 格式: username,uid,gid,groups,shell,comment

INPUT_FILE="users.csv"
while IFS=',' read -r user uid gid groups shell comment; do
    [[ "$user" == "username" ]] && continue  # 跳過表頭
    
    if id "$user" &>/dev/null; then
        echo "User $user exists, skipping"
        continue
    fi
    
    groupadd -g "$gid" "$user" 2>/dev/null || true
    useradd -u "$uid" -g "$gid" -G "$groups" -s "$shell" -c "$comment" -m "$user"
    echo "$user:Ch@ngeMe123" | chpasswd
    chage -d 0 "$user"  # 首次登錄強制改密
    
    echo "Created: $user ($uid:$gid)"
done < "$INPUT_FILE"

核心原則: 用戶管理自動化、審計化、最小權限化。手工操作只用於緊急處理,日常讓腳本和配置管理工具來做。

copyright © 萬盛學電腦網 all rights reserved