当前位置:首页>Linux>Linux usermod命令15个经典用法:账户过期、锁定、Shell更改等实战示例

Linux usermod命令15个经典用法:账户过期、锁定、Shell更改等实战示例

  • 2026-08-26 12:36:25
Linux usermod命令15个经典用法:账户过期、锁定、Shell更改等实战示例

在Unix/Linux发行版中,创建用户账户后,在某些场景下我们需要更改现有用户的属性,例如更改用户的家目录、登录名、登录shell、密码过期日期等。在这种情况下,就需要使用 usermod 命令。

当我们在终端中执行 usermod 命令时,会涉及并影响以下文件:

  • /etc/passwd – 用户账户信息。
  • /etc/shadow – 安全的账户信息(密码等)。
  • /etc/group – 组账户信息。
  • /etc/gshadow – 安全的组账户信息。
  • /etc/login.defs – 影子密码套件配置。

基本语法:

usermod [选项] 用户名

使用前提条件

  • 必须已存在用户账户才能执行usermod命令。
  • 只有超级用户 (root) 才允许执行usermod命令。
  • usermod命令可以在任何 Linux 发行版上执行。
  • 需要对usermod命令及其选项有基本了解。

usermod 命令选项

usermod 命令使用简单,下表提供大量选项来修改现有用户。

选项
功能描述
-c
为用户账户添加注释字段。
-d
修改现有用户账户的家目录。
-e
设置账户在特定日期过期。
-g
更改用户的主组。
-G
添加附属组。
-a
将用户追加到某个附属组(常与 -G 联用)。
-l
更改登录名。
-L
锁定用户账户。这将锁定密码,使账户无法使用。
-m
将家目录的内容从旧目录移动到新目录(与 -d 联用)。
-p
为账户设置未加密的密码。(不安全)。
-s
为用户指定登录shell。
-u
为用户账户分配UID(通常在0到999之间,实际范围取决于系统)。
-U
解锁用户账户。这将移除密码锁定,允许使用该账户。

下面将介绍 15个 usermod 命令的实际经典用法。

1. 为用户账户添加注释信息

-c 选项用于为用户账户设置简要的注释信息。例如,让我们为 yadmin 用户添加信息。

[root@erpserver ~]# usermod -c "This is yadmin" yadmin
[root@erpserver ~]# 

添加信息后,可以在 /etc/passwd 文件中查看此注释。

[root@erpserver ~]# cat /etc/passwd | grep -E 'yadmin'
yadmin:x:1000:1000:This is yadmin:/home/yadmin:/bin/bash
[root@erpserver ~]# 

2. 更改用户家目录

在上一步中,我们可以看到用户家目录是 /home/yadmin/。如果需要将其更改为其他目录,可以使用 -d 选项。

例如,我想将其更改为 /var/www/,在更改之前,先查看用户的当前家目录,为默认目录/home/yadmin:

[root@erpserver ~]# grep -E '/home/yadmin' /etc/passwd
yadmin:x:1000:1000:This is yadmin:/home/yadmin:/bin/bash
[root@erpserver ~]# 

现在,将家目录从 /home/yadmin 更改为 /var/www/:

[root@erpserver ~]# usermod -d /var/www/ yadmin
[root@erpserver ~]# 

再次确认更改后的家目录:

[root@erpserver ~]# grep -E '/var/www' /etc/passwd
yadmin:x:1000:1000:This is yadmin:/var/www/:/bin/bash
[root@erpserver ~]# 

3. 设置用户账户过期日期

-e 选项用于以 YYYY-MM-DD 格式设置用户账户的过期日期。在设置之前,先用 chage 命令检查当前账户的过期状态。

[root@erpserver ~]# chage -l yadmin
最近一次密码修改时间     :从不
密码过期时间     :从不
密码失效时间     :从不
帐户过期时间      :从不
两次改变密码之间相距的最小天数  :0
两次改变密码之间相距的最大天数  :99999
在密码过期之前警告的天数 :7
[root@erpserver ~]# 

yadmin 用户的过期日期为从不过期,让我们用 usermod -e 将其改为 2026年2月14日,并用 chage 命令确认。

[root@erpserver ~]# usermod -e 2026-02-14 yadmin
[root@erpserver ~]# chage -l yadmin
最近一次密码修改时间     :从不
密码过期时间     :从不
密码失效时间     :从不
帐户过期时间      :2月 14, 2026
两次改变密码之间相距的最小天数  :0
两次改变密码之间相距的最大天数  :99999
在密码过期之前警告的天数 :7
[root@erpserver ~]# 

4. 更改用户主组

要设置或更改用户的主组,在usermod命令中使用 -g 选项。

在更改之前,先检查用户 yadmin 的当前组信息。

[root@erpserver ~]# id yadmin
uid=1000(yadmin) gid=1000(yadmin) 组=1000(yadmin)

现在,将 admin 组设置为 yadmin 用户的主组,并确认更改。

[root@erpserver ~]# usermod -g admin yadmin
[root@erpserver ~]# id yadmin
uid=1000(yadmin) gid=1002(admin) 组=1002(admin),1000(yadmin)

5. 向现有用户添加新组

如果想将名为 admin02 的新组添加到 yadmin 用户,可以如下使用 -G 选项。

[root@erpserver ~]# usermod -G admin02 yadmin
[root@erpserver ~]# id yadmin
uid=1000(yadmin) gid=1002(admin) 组=1002(admin),1003(admin02)

注意:

单独使用 -G 选项为现有用户添加新组时,会移除该用户原来所属的所有附属组。因此,通常应结合 -a(追加)和 -G 选项来添加或追加新组。

6. 向用户追加附属组

如果需要将用户添加到某个附属组,可以使用 -a 和 -G 选项。例如,这里我们将用户账户 yadmin 添加到 wheel 组。

[root@erpserver ~]# usermod -aG wheel yadmin
[root@erpserver ~]# id yadmin
uid=1000(yadmin) gid=1002(admin) 组=1002(admin),10(wheel),1003(admin02)

这样,yadmin 用户既保留在其主组中,也成为了 wheel 组的成员。这使得普通用户账户可以在 Linux 中执行需要 root 权限的命令。

sudo service httpd restart

7. 更改用户登录名

要更改现有用户的登录名,可以使用 -l(新登录名)选项。在下面的示例中,我们将登录名 yadmin 更改为 yadmin_admin。

[root@erpserver ~]# usermod -l yadmin_admin yadmin

现在检查 yadmin 用户,它将不存在,因为它已被重命名为 yadmin_admin。

[root@erpserver ~]# id yadmin
id: yadmin: no such user
[root@erpserver ~]# 

检查 yadmin_admin 账户,它将存在,并拥有相同的 UID 以及之前添加的所属组。

[root@erpserver ~]# id yadmin_admin
uid=1000(yadmin_admin) gid=1002(admin) 组=1002(admin),10(wheel),1003(admin02)

8. 锁定用户账户

要锁定任何系统用户账户,可以使用 -L(锁定)选项。

账户锁定后,将无法使用密码登录。会在 /etc/shadow 文件的加密密码前看到一个 !,表示密码已禁用。

[root@erpserver ~]# usermod -L yadmin_admin

检查被锁定的账户。

[root@erpserver ~]# grep -E 'yadmin_admin' /etc/shadow
yadmin_admin:!$6$MEdhMafZvHlRm5hx$iI.UMIfAwReEFDYO77lk1DOtdGsckOEBjP8BmBo8jeRGUgeKZ60jXb25yLRs.DZNSJWzj7/bQDtd2tk/bfFzs0::0:99999:7::20498:

9. 解锁用户账户

-U 选项用于解锁任何被锁定的用户,这将移除加密密码前的 !。

[root@erpserver ~]# usermod -U yadmin_admin

解锁后验证用户。

[root@erpserver ~]# grep -E 'yadmin_admin' /etc/shadow
yadmin_admin:$6$MEdhMafZvHlRm5hx$iI.UMIfAwReEFDYO77lk1DOtdGsckOEBjP8BmBo8jeRGUgeKZ60jXb25yLRs.DZNSJWzj7/bQDtd2tk/bfFzs0::0:99999:7::20498:

10. 将用户家目录及文件移动到新位置

假设你有一个用户账户 imoon,其家目录为 /home/imoon,你想将其移动到新位置,例如 /var/imoon。可以使用 -d 和 -m 选项将现有用户文件从当前家目录移动到新家目录。

检查账户及其当前家目录下的文件。

[root@erpserver ~]# ll /home/imoon/
总用量 0
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest10.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest1.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest2.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest3.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest4.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest5.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest6.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest7.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest8.txt
-rw-r--r-- 1 root root 0 2月   2 10:20 mytest9.txt
[root@erpserver ~]# 

现在,将家目录从 /home/imoon 移动到 /var/imoon。

usermod -m -d /var/imoon -u 1004 imoon

11. 为用户创建未加密的密码

要创建未加密的密码,我们使用 -p(密码)选项。出于演示目的,我将为用户 imoon 设置一个新密码 redhat。

[root@erpserver ~]# usermod -p redhat imoon
[root@erpserver ~]# 

设置密码后,检查 shadow 文件,看密码是加密格式还是未加密格式。

[root@erpserver ~]# cat /etc/shadow | grep 'imoon'
imoon:redhat:20486:0:99999:7:::
[root@erpserver ~]# 

注意:

密码对所有人都是明文可见的。因此,不推荐使用此选项,因为密码将对所有用户可见。

12. 更改用户Shell

用户登录Shell可以在创建用户时通过 useradd 命令定义,也可以通过 usermod 命令使用 -s(shell)选项进行更改。例如,用户 imoon 默认使用 /bin/bash shell,现在我想将其更改为 /bin/sh。

imoon:x:1004:1004::/var/imoon:/bin/bash
[root@erpserver ~]# usermod -s /bin/sh imoon
[root@erpserver ~]# 

更改用户Shell后,使用以下命令验证。

[root@erpserver ~]# grep -E 'imoon' /etc/passwd
imoon:x:1004:1004::/var/imoon:/bin/sh
[root@erpserver ~]# 

13. 更改用户ID(UID)

使用 -u(uid)选项更改用户 imoon 的 UID,并验证更改。

[root@erpserver ~]# usermod -u 1099 imoon
[root@erpserver ~]# id imoon
uid=1099(imoon) gid=1004(imoon) 组=1004(imoon)
[root@erpserver ~]# 

14. 使用多个选项修改用户账户

这里有一个用户 webadmin,现在我想通过一条命令,使用上面讨论的所有选项,一次性修改他的家目录、Shell、过期日期、注释、UID 和组。

用户 webadmin 的默认家目录是 /home/webadmin,现在我想将其更改为 /var/www/html,分配他的 Shell 为 bash,设置过期日期为 2026年12月31日,添加新注释“web administrator”,将 UID 更改为 2000,并使他成为 webs 组的成员。

现在让我们看看如何使用多个选项修改 webadmin 账户。

[root@erpserver ~]# usermod -d /var/www/html/ -s /bin/bash -e 2026-12-31 -c "web administrator" -u 2000 -aG webs webadmin
[root@erpserver ~]# 

然后检查 UID 和家目录的更改。

[root@erpserver ~]# grep -E 'webadmin' /etc/passwd
webadmin:x:2000:1100:web administrator:/var/www/html/:/bin/bash

检查账户过期。

[root@erpserver ~]# chage -l webadmin
最近一次密码修改时间     :2月 02, 2026
密码过期时间     :从不
密码失效时间     :从不
帐户过期时间      :12月 31, 2026
两次改变密码之间相距的最小天数  :0
两次改变密码之间相距的最大天数  :99999
在密码过期之前警告的天数 :7
[root@erpserver ~]# 

检查 webadmin 所属的所有组。

[root@erpserver ~]# grep -E 'webadmin' /etc/group
webadmin:x:1100:
webs:x:1101:webadmin

15. 同时更改用户的UID和主GID

可以同时更改用户的 UID 和主 GID。

现在将 imoon 用户账户的 UID 设置为 2026,主 GID 设置为 webadmin 组 (1100)。

先检查修改前的 UID 和 GID。

[root@erpserver ~]# id imoon
uid=1004(imoon) gid=1004(imoon) 组=1004(imoon)
[root@erpserver ~]# 

修改 UID 和 GID。

[root@erpserver ~]# usermod -u 2026 -g 1100 imoon

检查更改。

[root@erpserver ~]# id imoon
uid=2026(imoon) gid=1100(webadmin) 组=1100(webadmin)

最新文章

随机文章