1.3.2 用户与组管理命令(useradd/usermod/userdel、groupadd/groupmod/groupdel)
用户与组管理命令(useradd/usermod/userdel、groupadd/groupmod/groupdel)#
用户与组的增删改需要遵循“最小权限、可审计、可回滚”。在生产环境中建议统一 UID/GID 规划,并结合变更记录。下述内容包含原理草图、命令解释、示例、排错与练习。
命令说明速览#
- useradd:创建用户与初始化属性(家目录、Shell、主组、附加组)。
- usermod:修改用户属性(Shell、UID、组、家目录、锁定)。
- userdel:删除用户(可选清理家目录)。
- groupadd:创建组。
- groupmod:修改组名或 GID。
- groupdel:删除组(组内无用户时可删)。
1) useradd:创建用户#
常用参数解释
- -m 创建家目录
- -d 指定家目录路径
- -s 指定登录 Shell
- -u 指定 UID
- -g 指定主组
- -G 指定附加组
- -c 备注信息
- -e 过期日期(YYYY-MM-DD)
示例:创建标准业务用户
# 1) 先创建业务组
groupadd -g 1601 app
# 2) 创建用户,指定主组、附加组与Shell
useradd -u 1501 -g app -G wheel,dev -m -s /bin/bash -c "App User" appuser
# 3) 设置密码(交互式)
passwd appuser
# 4) 验证
id appuser
getent passwd appuser
预期效果
- /home/appuser 自动创建
- id 输出包含 uid=1501(appuser)、gid=1601(app) 与附加组
2) usermod:修改用户属性#
典型操作示例
# 禁止登录(运维常用临时封禁)
usermod -s /sbin/nologin appuser
# 追加附加组(注意 -a,避免覆盖)
usermod -aG docker appuser
# 修改用户名(需同步检查目录与文件属主)
usermod -l appuser_new appuser
# 迁移家目录(移动并更新路径)
usermod -d /data/appuser -m appuser_new
解释要点
- -aG 必须与 -G 配合,否则会覆盖原附加组
- -l 仅改用户名,不会自动移动家目录
3) userdel:删除用户#
示例
# 软处理:先锁定,再观察
usermod -L appuser_new
# 删除用户但保留家目录(便于回滚)
userdel appuser_new
# 删除用户并清理家目录与邮件
userdel -r appuser_new
4) groupadd / groupmod / groupdel#
创建与修改
# 创建组
groupadd app
# 指定 GID
groupadd -g 1602 app2
# 修改组名
groupmod -n app_new app
# 修改 GID
groupmod -g 1603 app_new
删除组
# 组内无用户时才可删除
groupdel app_new
安装与工具补充#
系统自带 user/group 工具包(通常为 shadow-utils)。若缺失可安装:
# CentOS/RHEL
yum install -y shadow-utils
# Ubuntu/Debian
apt-get install -y passwd
配置文件与验证(配合排错)#
# 查看账号与组条目
getent passwd appuser
getent group app
# 直接查看文件(谨慎修改)
grep '^appuser' /etc/passwd
grep '^app' /etc/group
常见排错#
1) “groupdel: cannot remove the primary group of user”
- 解决:先修改用户主组或删除用户
usermod -g othergroup appuser
groupdel app
2) “usermod: user appuser is currently logged in”
- 解决:确认会话并终止或等待
who
pkill -u appuser
3) 附加组丢失(忘记 -a)
- 解决:重新追加
usermod -aG docker,dev appuser
练习#
1) 新建 ops 组(GID=1701),创建 opsuser(UID=1701)并加入 wheel。
2) 将 opsuser 的家目录迁移到 /data/opsuser,并验证属主。
3) 锁定 opsuser,查看登录限制是否生效。
4) 删除 ops 组前,确保没有用户以其为主组。
参考命令
groupadd -g 1701 ops
useradd -u 1701 -g ops -G wheel -m -s /bin/bash opsuser
usermod -d /data/opsuser -m opsuser
usermod -L opsuser
id opsuser