Linux 用户与组管理全解析

Linux 用户与组管理

一、用户和组的基本概念

1. 用户账号类型

  • 超级用户(root):默认拥有系统最高权限(UID=0),仅建议用于系统管理与维护,日常操作应使用普通用户。
  • 普通用户:由管理员创建,权限受限,通常仅在自身家目录拥有完整权限。
  • 程序用户(服务用户) :为系统服务(如nginxmysql)创建的专用账号,一般不允许登录系统。

2. 组账号类型

  • 基本组:用户创建时默认所属的组,每个用户至少属于一个基本组。
  • 附加组:用户额外加入的组,用于获取该组的权限集合。

3. UID 与 GID

  • UID(用户 ID)

    :系统识别用户的唯一标识,范围:

    • 0:超级用户(root)
    • 1~999:系统预留(程序用户)
    • 1000~60000:普通用户
  • GID(组 ID):系统识别组的唯一标识,范围与 UID 对应,root 组 GID=0。

二、用户和组的核心配置文件

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

  • 作用:存储用户名称、UID、GID、家目录、登录 Shell 等信息,所有用户可读取,仅 root 可修改。
  • 格式 :7 个字段用冒号分隔
    用户名:密码占位符(x):UID:GID:描述信息:家目录:登录Shell
    例:zhangsan:x:1001:1001:张三:/home/zhangsan:/bin/bash

2. /etc/shadow(用户密码信息)

  • 作用:存储用户密码(加密形式)及密码策略,仅 root 可读取。

  • 格式

    :9 个字段用冒号分隔

    复制代码
    用户名:加密密码:最近改密天数:密码不可改天数:密码有效期:警告天数:宽限天数:账号失效日期:保留
    • 加密密码:*!!表示账号锁定,空值表示无需密码登录。
    • 日期计算:以 1970 年 1 月 1 日为起始点(如1900表示 1970 年 1 月 1 日后第 1900 天)。

3. /etc/group(组基本信息)

  • 作用:存储组名称、GID、组成员等信息。
  • 格式 :4 个字段用冒号分隔
    组名:组密码占位符:GID:组成员列表
    例:dev:x:1002:zhangsan,lisi

4. /etc/gshadow(组密码信息)

  • 作用:存储组密码及管理员信息,仅 root 可读取。

  • 格式

    :4 个字段用冒号分隔

    复制代码
    组名:组加密密码:组管理员:组成员
    • 组密码为空或!表示无密码,组管理员可管理组成员。

三、用户和组管理命令

1. 用户管理

(1)创建用户(useradd
bash 复制代码
# 创建普通用户,指定UID、家目录、基本组、附加组、登录Shell
useradd -u 1005 -d /home/wangwu -g dev -G admin -s /bin/bash wangwu
  • 选项说明:
    • -u:指定 UID
    • -d:指定家目录
    • -g:指定基本组(必须已存在)
    • -G:指定附加组(多个组用逗号分隔)
    • -s:指定登录 Shell(/sbin/nologin表示禁止登录)
(2)设置密码(passwd
bash 复制代码
# 为用户设置密码
passwd wangwu

# 锁定/解锁用户
passwd -l wangwu  # 锁定
passwd -u wangwu  # 解锁

# 清空用户密码(允许无密码登录)
passwd -d wangwu
(3)修改用户属性(usermod
bash 复制代码
# 修改用户家目录,移动原内容到新目录
usermod -d /home/new_wangwu -m wangwu

# 更改用户基本组为admin,附加组为dev、test
usermod -g admin -G dev,test wangwu

# 锁定/解锁用户
usermod -L wangwu  # 锁定
usermod -U wangwu  # 解锁
(4)删除用户(userdel
bash 复制代码
# 删除用户(保留家目录)
userdel wangwu

# 彻底删除用户(含家目录和邮件文件)
userdel -r wangwu

2. 组管理

(1)创建组(groupadd
bash 复制代码
# 创建组,指定GID
groupadd -g 1006 testgroup
(2)删除组(groupdel
bash 复制代码
# 删除组(组必须无成员,否则需先移除成员)
groupdel testgroup
(3)管理组成员(gpasswd
bash 复制代码
# 添加用户到组(附加组)
gpasswd -a zhangsan testgroup

# 从组中移除用户
gpasswd -d zhangsan testgroup

# 设置组管理员(允许管理员管理组成员)
gpasswd -A lisi testgroup
(4)查看用户所属组(groups
bash 复制代码
# 查看指定用户所属组
groups zhangsan  # 输出:zhangsan : dev admin

3. 密码策略管理(chage

bash 复制代码
# 查看用户密码策略
chage -l wangwu

# 设置密码有效期为90天,提前7天警告,过期后3天锁定
chage -M 90 -W 7 -I 3 wangwu

# 设置账号2024-12-31过期
chage -E 2024-12-31 wangwu

四、权限委派(sudo

允许普通用户临时以 root 权限执行指定命令,配置文件为/etc/sudoers(需用visudo编辑)。

配置示例:

bash 复制代码
visudo  # 安全编辑sudoers文件

# 添加以下内容:允许admin组用户执行useradd、usermod、userdel命令
Cmnd_Alias USERMGMT = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel
%admin  ALL=(ALL)  USERMGMT

使用方法:

bash 复制代码
# 普通用户执行授权命令
sudo useradd tom  # 输入自身密码验证后执行

总结

用户与组管理通过/etc/passwd/etc/shadow等文件记录核心信息,借助useraddgroupadd等命令进行创建、修改和删除操作。合理配置用户权限与密码策略,结合sudo进行权限委派,可保障系统安全性与可管理性。