首页>教程>Linux 命令手册> 用户与权限管理 >Linux usermod 命令 - 修改已有用户账户的属性信息

Linux usermod 命令 - 修改已有用户账户的属性信息

usermod 是类 Unix 系统(Linux、FreeBSD 等)中的一款用于修改已有用户账号的属性信息的命令工具,它可以修改用户注释、根目录、登录 Shell、UID、主/附属组、账号过期时间、密码等属性信息,修改用户的属性信息时会同步更新 /etc/passwdetc/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 命令的使用方法。