一、为什么要管理用户和用户组?¶
在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)及实际操作流程。日常管理中,需结合id、groups等命令排查权限问题,避免误删用户或组。实践中多尝试创建用户、切换用户,逐步熟悉权限分配逻辑,就能熟练掌控Linux用户体系。