一、为什么要管理用户和用户组?

在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用户体系。

小夜