Linux usermod命令详解:15个修改用户属性的经典实战案例

在 Unix/Linux 发行版中,创建用户账户后,在某些场景下我们需要更改现有用户的属性,例如更改用户的家目录、登录名、登录 shell、密码过期日期等。在这种情况下,就需要使用usermod命令。它操作简单却功能丰富,通过不同选项组合,能满足多样化的用户管理需求。不过,使用该命令需满足一定前提条件,而且操作会涉及多个系统文件。下面码云笔记将详细介绍 usermod 命令的 15 种经典用法,助你更好地掌握用户管理技巧。
当我们在终端中执行 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. 将用户家目录及文件移动到新位置
假设你有一个用户账户 mybj,其家目录为/home/mybj,你想将其移动到新位置,例如/var/mybj。可以使用-d和-m选项将现有用户文件从当前家目录移动到新家目录。
检查账户及其当前家目录下的文件。
[root@erpserver ~]# ll /home/mybj/ 总用量 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/mybj移动到/var/mybj。
usermod -m -d /var/mybj-u 1004 mybj
11. 为用户创建未加密的密码
要创建未加密的密码,我们使用-p(密码)选项。出于演示目的,我将为用户 mybj 设置一个新密码 redhat。
[root@erpserver ~]# usermod -p redhat mybj [root@erpserver ~]#
设置密码后,检查shadow文件,看密码是加密格式还是未加密格式。
[root@erpserver ~]# cat /etc/shadow | grep 'mybj' mybj:redhat:20486:0:99999:7::: [root@erpserver ~]#
注意:密码对所有人都是明文可见的。因此,不推荐使用此选项,因为密码将对所有用户可见。
12. 更改用户 Shell
用户登录 Shell 可以在创建用户时通过useradd命令定义,也可以通过usermod命令使用-s(shell)选项进行更改。例如,用户 mybj 默认使用/bin/bash shell,现在我想将其更改为 /bin/sh。
mybj:x:1004:1004::/var/mybj:/bin/bash [root@erpserver ~]# usermod -s /bin/sh mybj [root@erpserver ~]#
更改用户 Shell 后,使用以下命令验证。
[root@erpserver ~]# grep -E 'mybj' /etc/passwd mybj:x:1004:1004::/var/mybj:/bin/sh [root@erpserver ~]#
13. 更改用户 ID(UID)
使用-u(uid)选项更改用户 mybj 的 UID,并验证更改。
[root@erpserver ~]# usermod -u 1099 mybj [root@erpserver ~]# id mybj uid=1099(mybj) gid=1004(mybj) 组=1004(mybj) [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。
现在将 mybj 用户账户的 UID 设置为 2026,主 GID 设置为webadmin组 (1100)。
先检查修改前的 UID 和 GID。
[root@erpserver ~]# id mybj uid=1004(mybj) gid=1004(mybj) 组=1004(mybj) [root@erpserver ~]#
修改 UID 和 GID。
[root@erpserver ~]# usermod -u 2026 -g 1100 mybj
检查更改。
[root@erpserver ~]# id mybj uid=2026(mybj) gid=1100(webadmin) 组=1100(webadmin)
结语
通过对 usermod 命令 15 种经典用法的介绍,我们全面了解了它在修改用户属性方面的强大功能。无论是添加注释、更改家目录、设置过期日期,还是调整主组、附属组、登录名等,usermod 都能轻松应对。但在使用过程中,务必注意其使用前提条件,谨慎操作,避免因误操作导致系统问题。掌握这些用法,能让我们在 Linux 系统用户管理中更加得心应手,高效完成各项任务,保障系统的稳定运行与安全。
以上关于Linux usermod命令详解:15个修改用户属性的经典实战案例的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Linux usermod命令详解:15个修改用户属性的经典实战案例
微信
支付宝