Linux usermod 命令 - 修改已有用户账户的属性信息
usermod 是类 Unix 系统(Linux、FreeBSD 等)中的一款用于修改已有用户账号的属性信息的命令工具,它可以修改用户注释、根目录、登录 Shell、UID、主/附属组、账号过期时间、密码等属性信息,修改用户的属性信息时会同步更新 /etc/passwd、etc/shadow、/etc/group 等系统账户文件,是管理用户必须掌握的一个命令。
[!WARNING]
使用
usermod命令修改 UID、用户名、根目录时,需保证目标用户没有正在运行的进程,否则可能会失败或引发权限异常
相似命令对比
如下给出与用户管理相关的一些命令,便于区分其不同的功能:
useradd:新建系统用户userdel:删除系统用户
usermod 命令语法结构
usermod 命令的语法结构非常的简单,如下给出其基本语法结构:
usermod [选项] 用户名
语法结构中的各部分解释说明:
[选项]:用于指定具体的修改行为,可选值用户名:需要修改属性的用户名
usermod 命令使用示例
如下给出一些 usermod 命令的使用示例,便于更好的掌握如何使用 usermod 命令。
修改用户密码
使用 usermod 命令修改密码需要指定加密后的密码:
1)把密码 123456 生成加密后的密码:
openssl passwd -1 123456
加密后的密码为:
$1$h0bndt3y$Q402D7KNTidYPNvIS4Pup0
2)执行如下命令修改用户的密码:
sudo usermod -p '$1$h0bndt3y$Q402D7KNTidYPNvIS4Pup0' testuser
修改用户注释信息
使用 -c 或 --comment 选项修改用户的注释信息:
usermod -c "Test User Account" testuser
用户的注释信息存储在 /etc/passwd 配置文件中
修改用户根目录并迁移数据
使用 -d 选项修改用户的根目录,同时使用 -m 选项把用户的原有数据迁移到新的根目录:
usermod -d /home/newtest -m testuser
修改用户主组
使用 -g 或 --gid 选项修改用户的主组:
usermod -g testgroup testuser
为用户追加附属组
使用 -a 选项启用追加模式,同时指定 -G 选项为指定用户追加一些附属组:
usermod -aG docker,www-data testuser
[!WARNING]
不适用
-a选项,只使用-G选项时,命令是设置附属组,即:会删除原有的信息,设置为新的附属组
修改用户登录 Shell
使用 -s 或 --shell 选项修改指定用户的登录 shell:
usermod -s /bin/zsh testuser
锁定用户账号
使用 -L 或 --lock 选项锁定指定的用户:
usermod -L testuser
解锁用户账号
使用 -U 或 --unlock 选项解锁指定的用户:
usermod -U testuser
设置账号的过期时间
使用 -e 或 --expiredate 选项设置指定账户的失效日期:
usermod -e 2026-12-31 testuser
usermod 命令选项详解
如下给出 usermod 命令的选项的详细解释说明:
| 短选项 | 详细说明 |
|---|---|
-a, --append | 只与 -G 选项配合使用,以追加方式添加用户的附属组,而不是直接覆盖原有的附属组 |
-b, --badname | 允许使用不符合系统命名规范字符串作为的用户名 |
-c, --comment COMMENT | 修改 /etc/passwd 系统文件中的用户注释信息 |
-d, --home HOME_DIR | 为用户设置新的根目录,可以配合 -m 选项一起使用,迁移原有的数据 |
-e, --expiredate EXPIRE_DATE | 设置用户账号的过期日期,使用的日期格式为 YYYY-MM-DD,当值设置为 -1 时表示永不过期 |
-f, --inactive INACTIVE | 设置密码过期后的宽限天数,值为 0 时过期后立即失效,值为 -1 为不启用宽限设置 |
-g, --gid GROUP | 为用户指定新的主组,使用的 GROUP 的值可以是组名或 GID |
-G, --groups GROUP1,GROUP2 | 为用户设置新的附属组列表,多组之间使用逗号分隔开来,不使用 -a 选项时会覆盖掉原有的附属组信息 |
-l, --login NEW_LOGIN | 修改用户的登录名,需手动同步修改根目录与邮件池 |
-L, --lock | 锁定用户,禁止使用密码登录,不可与 -p / -U 选项一起使用 |
-m, --move-home | 只能与 -d 选项一起使用,用于修改根目录后,把原来的数据迁移到新的根目录中 |
-o, --non-unique | 只能与 -u 选项配合使用,允许设置非唯一的 UID |
-p, --password PASSWORD | 为用户设置密码,密码需要是加密后的密码,可以使用 openssl passwd -1 你的密码 指令生成加密后的密码 |
-r, --remove | 只能与 -G 选项共同使用,用于从指定的附属组中移除用户 |
-R, --root CHROOT_DIR | 在 chroot 环境中执行修改,使用 CHROOT_DIR 目录中的配置文件 |
-P, --prefix PREFIX_DIR | 在以 PREFIX_DIR 开头的目录树中应用更改,并同时使用 PREFIX_DIR 目录中的配置文件 |
-s, --shell SHELL | 修改指定用户的登录 Shell,当不指定任何值时,即空值设置为系统默认 Shell |
-u, --uid UID | 修改指定用户的 UID,默认情况下 UID 其值要求是唯一的 |
-U, --unlock | 解锁指定的用户密码,不能与 -p / -L 选项在一起使用 |
-v, --add-subuids FIRST-LAST | 为用户添加一个从属 UID 的范围 |
-V, --del-subuids FIRST-LAST | 删除用户的一个从属 UID 的范围 |
-w, --add-subgids FIRST-LAST | 为用户添加一个从属 GID 的范围 |
-W, --del-subgids FIRST-LAST | 删除用户的一个从属 GID 的范围 |
-Z, --selinux-user SEUSER | 设置用户对应的 SELinux 用户,空值则删除对应关系 |
--selinux-range SERANGE | 设置 SELinux MLS 权限范围,需要与 -Z 选项配合在一起使用 |
关键配置文件说明
在使用 usermod 命令修改用户属性信息的时候,会修改一些配置文件,如下给出与用户相关的一些配置的解释说明:
| 文件路径 | 作用说明 |
|---|---|
/etc/group | 存储用户组的信息 |
/etc/gshadow | 存储用户组需要加密的信息 |
/etc/login.defs | 隐藏密码相关的全局配置策略 |
/etc/passwd | 存储用户账户的基本信息,如:登录名、UID、GID、家目录、Shell 等 |
/etc/shadow | 存储用户账户需要加密的信息,如加密后的密码等 |
/etc/subgid | 配置每个用户的从属组 GID 的范围 |
/etc/subuid | 配置每个用户的从属用户 UID 的范围 |
结语
usermod 是类 Unix 系统(Linux、FreeBSD 等)中的一款用于修改已有用户账号的属性信息的命令工具,是管理用户必须掌握的一个命令,但要注意 -aG 与 -G 选项的区别。
在本文中介绍了 usermod 命令的基本语法结构,给出了 usermod 命令的详细使用示例,最后也给出了 usermod 命令的所有选项的详细解释说明。学习完本文内容后你一定能掌握 usermod 命令的使用方法。