用户与用户组关系管理
在Linux系统中,用户和用户组的关系就像班级里的学生和小组。一个用户可以同时属于多个组,这种灵活的成员关系为权限管理提供了便利。创建用户时,系统会自动生成一个与用户同名的主组,这个组会成为用户创建文件时的默认属组。
理解用户和用户组的关系对后续权限设置至关重要。通过id
命令可以查看用户的UID、主组GID以及所有附加组。系统管理员需要根据实际工作需求,合理规划用户组结构,将具有相同权限需求的用户划分到同一组中。
用户与用户组操作实例
任务要求:以root用户登录进行测试运行,①创建developers用户组;②创建testers用户组;③创建用户user1并指定主组为developers;④创建用户user2并添加附加组developers和testers;⑤显示用户user2的以下身份信息,包括,用户ID (UID), 主组ID (GID),所属组列表
bash
groupadd developers # ①创建developers用户组
groupadd testers # ②创建testers用户组
useradd -g developers user1 # ③创建用户user1并指定主组为developers
useradd -G developers,testers user2 # ④创建用户user2并添加附加组developers和testers
id user2 # ⑤显示用户user2的身份信息,包括,用户ID (UID),主组ID (GID),所属组列表
# **运行结果示例**
# uid=1002(user2) gid=1003(developers) groups=1003(developers),1004(testers)
案例解析:第一、二个命令创建了两个用户组;第三个创建了user1并指定developers为主组;第四个创建user2并将developers和testers作为附加组;最后用id命令验证了用户组关系。
用户账号有效期设置
设置账号有效期是系统安全的重要措施,特别适合临时项目人员或实习生账号。通过useradd
或usermod
的-e
选项可以指定账号过期时间,过期后用户将无法登录系统。
账号有效期管理实例
任务要求:以root用户登录进行测试运行,①创建user3用户设置有效期为2026-12-30;②创建user3用户;③修改用户user3的有效期为2026-12-30;④检查用户user2的有效性
bash
useradd -e 2026-12-30 user3 # ①创建user3用户设置有效期为2026-12-30
useradd user4 # ②创建user4用户
usermod -e 2026-12-30 user4 # ③修改用户user4的有效期为2026-12-30
chage -l user3 # ④检查用户user3的有效性
# **运行结果示例**
# 最近一次密码修改时间 :6月 14, 2025
# 密码过期时间 :从不
# 密码失效时间 :从不
# 帐户过期时间 :12月 30, 2026
# 两次改变密码之间相距的最小天数 :0
# 两次改变密码之间相距的最大天数 :99999
# 在密码过期之前警告的天数 :7
安全建议 :对于临时账号,设置有效期可以避免遗忘删除带来的安全隐患。使用chage
命令可以查看和修改更详细的密码和账号过期策略。
修改用户密码策略
任务要求:以root用户登录进行测试运行,①添加用户bob;②设置用户bob的密码最小长度为10,过期时间为60天,过期前7天警告;③验证bob用户的密码策略
bash
useradd bob # ①添加用户bob
chage -m 10 -M 60 -W 7 bob # ②设置用户bob的密码最小长度为10,过期时间为60天,过期前7天警告
chage -l bob # ③验证bob用户的密码策略
# **运行结果示例**
# 最近一次密码修改时间 :7月 23, 2025
# 密码过期时间 :9月 21, 2025
# 密码失效时间 :从不
# 帐户过期时间 :从不
# 两次改变密码之间相距的最小天数 :10
# 两次改变密码之间相距的最大天数 :60
# 在密码过期之前警告的天数 :7
解析:
-m
:最小修改间隔(天)。-M
:最大有效期(天)。-W
:警告天数。
强制用户修改密码
任务要求:以root用户登录进行测试运行,①添加用户diana;②强制用户diana下次登录时修改密码;③验证diana用户的密码策略
bash
useradd diana # ①添加用户diana
chage -d 0 diana # ②强制用户diana下次登录时修改密码
chage -l diana # ③验证diana用户的密码策略
# **运行结果示例**
# 最近一次密码修改时间 :密码必须更改
# 密码过期时间 :密码必须更改
# 密码失效时间 :密码必须更改
# 帐户过期时间 :从不
# 两次改变密码之间相距的最小天数 :0
# 两次改变密码之间相距的最大天数 :99999
# 在密码过期之前警告的天数 :7
解析 :-d 0
:将密码上次修改时间设置为0(即"立即过期")。
用户密码管理
密码是系统安全的第一道防线。Linux系统中,root用户可以修改任何用户的密码,而普通用户只能修改自己的密码。强密码策略应该包含大小写字母、数字和特殊字符,长度不少于8位。
密码设置实例
任务要求:以root用户登录进行测试运行,①修改user3的密码;②切换到user3用户并加载其环境变量;③user3修改自己密码;④退出user3账号;⑤强制user3用户下次登录修改密码.
bash
passwd user3 # ①修改user3的密码
新的密码:******
重新输入新的密码:******
su - user3 # ②切换到user3用户并加载其环境变量
[user3@study ~]$ passwd # ③user3修改自己密码
(当前)UNIX 密码:****** # 原始密码
新的 密码:****** # 新密码
重新输入新的 密码:****** # 确认新密码
[user3@study ~]$ exit # ④退出user3账号
passwd -e user3 # ⑤强制user3用户下次登录修改密码
安全实践 :passwd -e
会使用户密码立即过期,强制用户在下次登录时修改密码,适合新账号初始密码分发后的场景。
用户与用户组重命名
随着组织架构变化,有时需要重命名用户或用户组。Linux提供了usermod
和groupmod
命令来完成这些操作,但要注意重命名后可能需要对文件属主和属组进行相应调整。
重命名操作实例
任务要求:以root用户登录进行测试运行,①创建用户组group2;②创建用户user4;③将用户组group2改名为group02;④将用户user4改名为Liu;⑤修改用户Liu的家目录为/home/Liu;⑥显示用户Liu的身份信息,包括,用户ID (UID),主组ID (GID),所属组列表。
bash
groupadd group2 # ①创建用户组group2
useradd user4 # ②创建用户user4
groupmod -n group02 group2 # ③将用户组group2改名为group02
usermod -l Liu user4 # ④将用户user4改名为Liu
usermod -d /home/Liu -m Liu # ⑤修改用户Liu的家目录为/home/Liu
id Liu # ⑥显示用户Liu的身份信息,包括,用户ID (UID),主组ID (GID),所属组列表
# **运行结果示例**
# uid=1004(Liu) gid=1005(user5) 组=1005(user5)
注意事项 :用户重命名后,其主目录不会自动改名,需要使用-d
和-m
选项同步更新。
常见问题解决方案
-
用户组不存在
vbnetuseradd: group 'developers' does not exist
解决 :先创建用户组
groupadd developers
,再创建用户 -
密码不符合复杂度要求
csharpBAD PASSWORD: The password is too simplistic
解决 :设置包含大小写字母、数字和特殊字符的密码;或使用
passwd --stdin
从文件读取复杂密码 -
账号过期无效
账号已过期但仍可登录
解决 :检查
/etc/shadow
中第8字段是否为过期日期(格式YYYY-MM-DD);确认系统时间正确 -
重命名后文件属主未更新
重命名用户后旧文件仍显示原用户名
解决 :使用
find / -user 原UID -exec chown 新用户名 {} \;
批量修改文件属主
实战练习
理论题
- 解释
id
命令输出中"gid"和"groups"的区别 答案:gid表示用户的主组ID,是用户创建文件时的默认属组;groups列出用户所属的所有附加组,用于扩展权限 - 设置账号有效期和密码有效期有什么不同? 答案:账号有效期禁止用户在指定日期后登录;密码有效期要求用户定期更改密码但不会禁止登录
- 重命名用户后为什么需要更新主目录? 答案:保持一致性避免混淆,某些程序会根据用户名查找主目录,不更新可能导致路径错误
实操题
-
任务要求 :以root用户登录进行测试运行,①创建用户组temp_group;②创建用户组developers;③创建用户
temp_user
并设置,主组为temp_group
、附加组为developers
、账号2024年6月30日过期、初始密码Temp@1234
。操作步骤:
bashgroupadd temp_group # ①创建用户组temp_group groupadd developers # ②创建用户组developers useradd -g temp_group -G developers -e 2024-06-30 -p Temp@1234 temp_user # ③创建用户`temp_user`并设置,主组为`temp_group`、附加组为`developers`、账号2024年6月30日过期、初始密码`Temp@1234`
-
任务要求 :以root用户登录进行测试运行,①创建用户old_user;②将用户
old_user
重命名为new_user
并迁移主目录为/home/new_user 操作步骤:bashuseradd old_user usermod -l new_user -d /home/new_user -m old_user
总结
Linux用户和用户组管理是系统管理员的基础技能,合理的用户规划能大幅简化后续的权限管理工作。创建用户时就应该考虑好组关系、密码策略和有效期等安全设置,而不是事后补救。重命名操作需要格外小心,确保相关配置和文件属性同步更新。密码管理要遵循最小权限原则和复杂性要求,定期审查用户列表和权限分配。实际工作中,建议建立标准的用户管理流程,包括申请、审批、创建、复核等环节,确保系统安全可控。记住,良好的用户管理习惯是维护系统安全的第一道防线。