找回密码
立即注册
搜索
发回帖 发新帖

5283

积分

0

好友

681

主题
发表于 半小时前 | 查看: 3| 回复: 0

usermod 命令用于修改 Linux 中已存在的用户账户,涵盖组归属、登录 Shell、家目录、UID 以及账户锁定。本文还涵盖与之配合使用的组管理命令。

1. 基本语法

命令 说明
sudo usermod [选项] username 通用语法
sudo usermod -c "全名" username 修改 GECOS/注释字段
id username 显示 UID、GID 和组归属
getent passwd username 显示用户的账户条目
usermod --help 列出所有可用选项

2. 附加组管理

添加或移除次要组归属。

命令 说明
sudo usermod -aG docker username 将用户加入一个组
sudo usermod -aG docker,sudo username 将用户加入多个组
sudo usermod -G docker username 将所有附加组替换为 docker
sudo usermod -rG docker username 将用户从一个组中移除
sudo gpasswd -d username docker 从组中移除用户(替代方法)

重要: -G 不带 -a 会替换用户的所有附加组,始终使用 -aG 来追加。

3. 主组管理

修改用户创建新文件时分配的组。

命令 说明
sudo usermod -g developers username 设置主组为 developers
id -gn username 显示用户的主组
newgrp developers 以 developers 为活动组启动 Shell
sudo chgrp developers file 修改文件的组所有权
sudo chgrp -R developers dir/ 递归修改组所有权

4. 家目录与 Shell

命令 说明
sudo usermod -d /srv/username -m username 修改家目录路径并移动内容
sudo usermod -d /srv/username username 仅修改家目录路径(旧文件留在原地)
sudo usermod -s /bin/zsh username 修改登录 Shell
sudo usermod -s /usr/sbin/nologin username 禁用交互式登录
cat /etc/shells 列出有效的登录 Shell

5. 重命名与 UID 修改

修改登录名或数字用户 ID。

注意: 使用 -u 前先记录旧 UID,运行 chown 前先审查 find 结果。

命令 说明
sudo usermod -l newname oldname 重命名用户账户
sudo usermod -l newname -d /home/newname -m oldname 重命名用户并移动家目录
sudo groupmod -n newname oldname 重命名匹配的用户私有组
old_uid=$(id -u username) 修改前记录当前 UID
sudo usermod -u 1050 username 修改 UID(家目录中的文件会更新)
sudo find /srv -xdev -uid "$old_uid" -print 预览 /srv 下仍属旧 UID 的文件
sudo find /srv -xdev -uid "$old_uid" -exec chown -h username {} + 将 /srv 下旧 UID 文件重新分配给用户

说明:

  • 将 /srv 替换为需要修复的目录或挂载点
  • -xdev 选项停留在该文件系统内,其他挂载需单独扫描
  • 在同一 Shell 会话中操作,确保 $old_uid 变量可用

6. 锁定、解锁与过期

命令 说明
sudo usermod -L username 锁定账户密码
sudo usermod -U username 解锁账户密码
sudo usermod -e 2026-12-31 username 设置账户过期日期
sudo usermod -e "" username 移除过期日期
sudo chage -l username 显示过期和密码老化详情

注意:

  • -L 仅阻止密码认证;SSH 密钥可能仍然有效
  • -U 不会移除账户过期日期;需要时单独使用 -e ""

7. 组管理

创建、重命名和删除组。

命令 说明
sudo groupadd developers 创建组
sudo groupadd -g 1500 developers 创建指定 GID 的组
sudo groupadd -r appgroup 创建系统组
sudo groupmod -n devs developers 重命名组
sudo groupdel developers 删除组

8. 列出用户和组

命令 说明
groups username 列出用户所属的组
getent group developers 显示组条目和明确列出的成员
getent group 列出所有组
getent passwd 列出所有用户账户
cut -d: -f1 /etc/group 仅列出本地组名

注意: 主组归属记录在 passwd 数据库中,因此主组成员可能不在 getent group 输出中。使用 id username 检查用户的主组和附加组。

9. 实用组合模式

命令 说明
sudo usermod -aG sudo,docker,developers username 一次添加多个附加组
sudo usermod -aG docker $(whoami) && newgrp docker 将自己加入 docker 组并立即激活
sudo usermod -s /usr/sbin/nologin -e 2026-12-31 tempuser 创建临时服务账户
sudo usermod -L -e 1 username 锁定并立即过期账户
for u in user1 user2 user3; do sudo usermod -aG developers $u; done 批量将用户加入组
getent group developers \| cut -d: -f4 \| tr ',' '\n' 列出组内明确成员

10. 故障排查

问题 解决方法
user username is currently used by process 在 -l、-u 或 -d 前让用户登出并停止其进程
新组未激活 登出后重新登录,或运行 newgrp groupname
用户丢失其他组 -G 不带 -a 会替换列表;用 -aG 重新添加缺失的组
group 'name' does not exist 先用 groupadd 创建
unlocking the user's password would result in a passwordless account 用 passwd 设置密码,而非使用 -U

11. 常用选项速查

选项 说明
-aG 追加附加组(不替换)
-G 设置附加组(会替换)
-rG 从组中移除用户
-g 修改主组
-d 修改家目录路径
-m 配合 -d 移动家目录内容
-s 修改登录 Shell
-l 重命名账户
-u 修改 UID
-L 锁定密码
-U 解锁密码
-e 设置账户过期日期
-c 修改注释字段

12. 小结

知识点 要点总结
基本语法 sudo usermod [选项] username
附加组 -aG 追加,-G 替换(危险)
主组 -g 修改主组
家目录 -d 改路径,-m 移动内容
Shell -s 修改登录 Shell
重命名/UID -l 重命名,-u 改 UID
锁定/过期 -L 锁定,-U 解锁,-e 设过期
组管理 groupadd、groupmod、groupdel

13. 思考与练习

(1)使用 usermod -aG 将用户加入 docker 组。

(2)修改某用户的登录 Shell 为 /bin/zsh,然后验证。

(3)记录某用户的当前 UID,然后修改为 1050,并检查家目录文件的归属。

(4)创建一个带过期日期的临时用户账户。

(5)使用 groupadd 创建组,然后用 usermod -g 设置某用户的主组。

(6)解释 -G 和 -aG 的区别,并举例说明为什么 -aG 更安全。


在 Linux 服务器日常运维中,熟练使用 usermod 管理用户账户的组归属与登录环境,是保障多用户系统安全与权限清晰的基础。想系统掌握这类用户与权限管理技能,可以从 Linux 系统管理与 Shell 编程基础入门 开始,课程覆盖用户与权限、Shell 脚本及自动化运维的核心内容,帮助你更全面地理解 Linux 账户体系。




上一篇:王兴兴谈具身智能:最大错误是对AI不够相信,一两年内或迎临界点
下一篇:Dify Workflow 工作流设计原理与核心节点详解
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-14 09:00 , Processed in 0.068230 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表