Linux用户与用户组管理详解:从基础到最佳实践

Linux作为典型的多用户操作系统,其安全性和资源管理能力很大程度上依赖于用户(User)用户组(Group) 的设计。用户是系统资源访问的基本单位,而用户组则通过将用户归类,实现对权限的批量管理。无论是个人服务器还是企业级系统,理解用户与用户组的原理及管理方法,都是保障系统安全、提升运维效率的核心技能。

本文将从基础概念出发,详细讲解Linux用户与用户组的类型、配置文件、管理命令、权限关系,以及实际场景中的最佳实践,帮助读者系统掌握这一核心知识点。

目录#

  1. Linux用户与用户组概述
    • 1.1 用户(User)的定义与类型
    • 1.2 用户组(Group)的定义与类型
    • 1.3 核心配置文件解析
  2. 用户管理:创建、修改与删除
    • 2.1 创建用户:useradd
    • 2.2 修改用户:usermod
    • 2.3 删除用户:userdel
    • 2.4 密码管理:passwdchage
  3. 用户组管理:创建、修改与删除
    • 3.1 创建用户组:groupadd
    • 3.2 修改用户组:groupmod
    • 3.3 删除用户组:groupdel
    • 3.4 用户与组的关联:gpasswdusermod
  4. 文件权限与用户/组的关系
    • 4.1 文件权限的表示方法
    • 4.2 ownership修改:chownchgrp
    • 4.3 特殊权限:SetUID、SetGID与Sticky Bit
  5. 常见实践与最佳实践
    • 5.1 日常用户管理场景
    • 5.2 安全最佳实践
  6. 总结
  7. 参考资料

1. Linux用户与用户组概述#

1.1 用户(User)的定义与类型#

用户是Linux系统中用于标识操作主体的实体,每个用户通过唯一的用户ID(UID) 区分。根据功能和权限,用户可分为三类:

类型说明UID范围示例
超级用户拥有系统最高权限(如root),可执行任何操作0root(UID=0)
系统用户用于运行系统服务(如nginxmysql),通常无登录权限1~999(CentOS)nginx(UID=997)
普通用户由管理员创建的日常用户,权限受限制1000+(CentOS)alice(UID=1001)

注意:不同Linux发行版的UID范围可能有差异(如Ubuntu系统用户UID为1~999,普通用户从1000开始,与CentOS一致)。

1.2 用户组(Group)的定义与类型#

用户组是用户的集合,用于批量管理权限。每个用户组通过唯一的组ID(GID) 区分,用户可属于多个组(一个主组+多个附加组)。常见类型:

类型说明
主组(Primary Group)用户默认所属的组,创建用户时自动生成(与用户名同名,除非指定)
附加组(Secondary Group)用户额外加入的组,用于获取额外权限

1.3 核心配置文件解析#

用户与用户组的信息存储在以下关键文件中,直接修改这些文件可能导致系统异常,建议通过命令行工具管理。

1.3.1 /etc/passwd:用户基本信息#

每行记录一个用户,格式:用户名:密码占位符:UID:GID:用户描述:家目录:登录Shell
示例:alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash

  • x 表示密码存储在 /etc/shadow 中(安全考虑)。

1.3.2 /etc/shadow:用户密码信息(仅root可读)#

每行记录一个用户的密码哈希及策略,格式:用户名:加密密码:最后修改时间:最小密码年龄:最大密码年龄:警告时间:过期宽限时间:过期时间:保留字段
示例:alice:$6$abc123...:19500:0:90:7:14:19800:

  • 加密密码以 $id$salt$hash 格式存储($6$ 表示SHA-512加密)。

1.3.3 /etc/group:用户组基本信息#

每行记录一个组,格式:组名:密码占位符:GID:组成员
示例:devteam:x:1005:alice,bob

  • 组成员用逗号分隔,不含主组(主组在 /etc/passwd 中通过GID关联)。

1.3.4 /etc/gshadow:用户组密码信息(仅root可读)#

存储组密码及管理员信息,格式:组名:加密密码:组管理员:组成员
示例:devteam:$6$def456...:alice:bob

2. 用户管理:创建、修改与删除#

2.1 创建用户:useradd#

useradd 用于创建新用户,常用选项:

选项说明示例
-u指定UIDuseradd -u 1002 charlie
-g指定主组GID或组名(需已存在)useradd -g devteam alice
-G指定附加组(多个组用逗号分隔)useradd -G sudo,devteam alice
-d指定家目录(默认 /home/用户名useradd -d /data/alice alice
-s指定登录Shell(默认 /bin/bashuseradd -s /sbin/nologin nginx
-m自动创建家目录(默认创建)useradd -m alice
-c添加用户描述useradd -c "Bob Wilson" bob

示例1:创建普通用户

# 创建用户alice,主组为devteam(GID=1005),附加组为sudo,家目录为/home/alice
useradd -g devteam -G sudo -d /home/alice -c "Alice Developer" alice

示例2:创建系统用户(无登录权限)

# 创建nginx服务用户,无家目录,登录Shell为nologin
useradd -r -s /sbin/nologin -M nginx
  • -r:创建系统用户(UID自动分配1~999);-M:不创建家目录。

2.2 修改用户:usermod#

usermod 用于修改用户属性,常用选项与 useradd 类似,新增关键选项:

选项说明示例
-l修改用户名usermod -l alice_new alice
-aG追加附加组(必须加 -a,否则覆盖原附加组usermod -aG devops alice
-L锁定用户(禁止登录)usermod -L alice
-U解锁用户usermod -U alice

示例:将用户alice加入devops组

usermod -aG devops alice  # 追加devops为附加组

2.3 删除用户:userdel#

userdel 用于删除用户,常用选项:

选项说明示例
-r同时删除家目录及邮件文件userdel -r alice

注意:删除用户前需确保用户未登录,否则可能残留进程或文件锁。

2.4 密码管理:passwdchage#

2.4.1 passwd:修改用户密码#

passwd alice  # 管理员修改alice密码(无需原密码)
passwd        # 普通用户修改自己的密码(需验证原密码)

选项:

  • -l:锁定密码(与 usermod -L 类似);
  • -u:解锁密码;
  • -d:清空密码(允许无密码登录,不推荐)。

2.4.2 chage:密码策略管理#

用于设置密码过期时间、警告天数等,格式:chage [选项] 用户名

选项说明示例
-d 0强制用户下次登录修改密码chage -d 0 alice
-M 90密码最长有效期90天chage -M 90 alice
-W 7密码过期前7天警告chage -W 7 alice
-E 2024-12-31账户过期时间(YYYY-MM-DD)chage -E 2024-12-31 alice

查看用户密码策略chage -l alice

3. 用户组管理:创建、修改与删除#

3.1 创建用户组:groupadd#

groupadd 用于创建组,常用选项:

选项说明示例
-g指定GIDgroupadd -g 1005 devteam
-r创建系统组(GID 1~999)groupadd -r dbgroup

示例:创建开发组devteam,GID=1005

groupadd -g 1005 devteam

3.2 修改用户组:groupmod#

groupmod 用于修改组属性:

选项说明示例
-n修改组名groupmod -n dev_team devteam
-g修改GIDgroupmod -g 1006 devteam

3.3 删除用户组:groupdel#

groupdel 用于删除组,需确保组不是任何用户的主组

groupdel devteam  # 删除组devteam

3.4 用户与组的关联:gpasswdusermod#

3.4.1 gpasswd:管理组成员#

  • 添加用户到组:gpasswd -a 用户名 组名
    示例:gpasswd -a alice devteam
  • 从组移除用户:gpasswd -d 用户名 组名
    示例:gpasswd -d alice devteam
  • 设置组管理员:gpasswd -A 用户名 组名(允许管理员管理组成员)

3.4.2 usermod -aG:批量添加附加组#

usermod -aG devteam,bob,test alice  # 将alice添加到devteam、bob、test三个附加组

4. 文件权限与用户/组的关系#

文件权限决定了用户/组对文件的访问方式,与用户/组紧密相关。通过 ls -l 可查看文件权限:

ls -l /home/alice/file.txt
# 输出:-rw-rw-r-- 1 alice devteam 1024 Oct 10 10:00 file.txt
  • 第一列:权限位(-rw-rw-r--);
  • 第三列:文件所有者(alice);
  • 第四列:文件所属组(devteam)。

4.1 文件权限的表示方法#

权限位共10位,分为4部分:

位置含义示例(-rw-rw-r--
1文件类型-(普通文件)
2-4所有者权限rw-(读、写)
5-7所属组权限rw-(读、写)
8-10其他用户权限r--(读)

权限符号r(读,4)、w(写,2)、x(执行,1),可组合为数字(如 rw- = 4+2=6)。

数字表示法示例:#

  • 755:所有者 rwx(7),组 r-x(5),其他 r-x(5)
  • 644:所有者 rw-(6),组 r--(4),其他 r--(4)

4.2 ownership修改:chownchgrp#

4.2.1 chown:修改所有者和所属组#

格式:chown [所有者][:所属组] 文件
示例:

chown alice:devteam file.txt  # 将file.txt的所有者改为alice,所属组改为devteam
chown alice file.txt          # 仅修改所有者为alice
chown :devteam file.txt       # 仅修改所属组为devteam
  • -R:递归修改目录下所有文件。

4.2.2 chgrp:仅修改所属组#

chgrp devteam file.txt  # 将file.txt的所属组改为devteam

4.3 特殊权限:SetUID、SetGID与Sticky Bit#

除基础权限外,Linux还有三个特殊权限,用于提升或限制操作:

权限符号数字作用
SetUIDs4000执行文件时,临时获得文件所有者权限(如 passwd 命令需修改 /etc/shadow
SetGIDs2000执行文件时获得所属组权限;对目录,新文件继承目录所属组
Sticky Bitt1000对目录,仅文件所有者和root可删除文件(如 /tmp

示例

  • 设置SetGID目录(共享目录):
    chmod 2770 /var/project2=SetGID,770=所有者和组可读可写可执行)
  • 设置Sticky Bit:
    chmod 1777 /tmp1=Sticky Bit,777=所有用户可读写执行)

5. 常见实践与最佳实践#

5.1 日常用户管理场景#

场景1:创建项目组并添加用户#

# 1. 创建开发组devteam
groupadd devteam
 
# 2. 创建用户alice和bob,主组为devteam,附加组为sudo
useradd -g devteam -G sudo -m alice
useradd -g devteam -G sudo -m bob
 
# 3. 设置密码
passwd alice
passwd bob
 
# 4. 创建共享目录,设置SetGID(新文件继承组)
mkdir /var/project
chown :devteam /var/project
chmod 2770 /var/project  # 组内用户可读写,其他用户无权限

场景2:定期清理过期账户#

# 查找6个月未登录的用户
lastlog | grep "Never logged in\|6 months" | awk '{print $1}' | xargs -I {} userdel -r {}

5.2 安全最佳实践#

  1. 最小权限原则:普通用户仅授予必要权限,避免直接使用root。
  2. 禁用空密码:确保 /etc/shadow 中无空密码用户(passwd -d 禁用)。
  3. 密码策略强化:通过 chage 设置密码有效期(如90天)、复杂度(通过 pam_cracklib 实现)。
  4. 限制sudo权限:通过 /etc/sudoers 精细控制用户sudo权限(使用 visudo 编辑)。
    # 示例:允许alice仅执行/usr/bin/service命令
    alice ALL=(ALL) /usr/bin/service
  5. 定期审计:通过 lastw 监控用户登录,通过 find / -user 用户名 检查用户文件。
  6. 系统用户加固:服务用户(如nginx)设置 nologin Shell,禁止登录。

6. 总结#

Linux用户与用户组是系统安全与资源管理的基石。本文从概念出发,详细讲解了用户/组的类型、配置文件、管理命令(useradd/groupadd等)、权限关系(chown/chmod)及特殊权限,并结合实际场景提供了最佳实践。掌握这些知识,不仅能提升系统运维效率,更能有效保障系统安全。

7. 参考资料#