1.命令作用
修改用户帐号(modify a user account)
2.命令语法
Usage: usermod [options] LOGIN
3.参数详解
OPTION:
- -c, --comment COMMENT,给帐户添加/修改注释信息,会显示在/etc/passwd文件中
- -d, --home HOME_DIR,用户帐户的新主/家目录
- -e, --expiredate EXPIRE_DATE,设置帐户过期日期为EXPIRE_DATE
- -f, --inactive INACTIVE,设置密码过期后可登录宽限的时间为INACTIVE
- -g, --gid GROUP,强制使用GROUP作为用户的新用户组
- -G, --groups GROUPS,添加/修改帐户的补充组列表,即添加/修改用户的附加用户组
- -a, --append,-G是修改或者无到有的添加,加上-a参数是追加附加用户组
- -h, --help,显示此帮助信息并退出
- -l, --login NEW_LOGIN,登录名的新值
- -L, --lock,锁定用户帐户
- -m, --move-home,将主目录的内容移动到新位置(仅与-d一起使用)
- -o, --non-unique ,允许使用重复的(非唯一的)UID,需要与-u参数一起使用
- -p, --password PASSWORD,指定加密的密码字符串,PASSWORD是加密的字符串,可在/etc/shadow文件中第二个字段查看
- -R, --root CHROOT_DIR,指定chroot目录执行命令(参考chroot命令用法)
- -s, --shell SHELL,修改帐户的登录shell,一般是'-s /bin/bash',也可以指定'/bin/zsh',默认值可在useradd -D中查看
- -u, --uid UID,用户帐户的新UID
- -U, --unlock,解锁用户帐户
- -Z, --selinux-user SEUSER,用户帐户的新SELinux用户映射
4.常用用例
4.1.给用户添加/修改注释
[root@node1 ~]# getent passwd user1
user1:x:1001:1001::/home/user1:/bin/bash
[root@node1 ~]# usermod -c 'This is user1;' user1
[root@node1 ~]# getent passwd user1
user1:x:1001:1001:This is user1;:/home/user1:/bin/bash
[root@node1 ~]# usermod -c 'This is linux user1;' user1
[root@node1 ~]# getent passwd user1
user1:x:1001:1001:This is linux user1;:/home/user1:/bin/bash
[root@node1 ~]#
4.2.修改用户家目录
# 方式一
[root@node1 ~]# getent passwd user1
user1:x:1001:1001::/home/user1:/bin/bash
[root@node1 ~]# usermod -d /opt/user1 user1 # 注意修改后不能自动生成/opt/user1目录,需要手动创建
[root@node1 ~]# getent passwd user1
user1:x:1001:1001::/opt/user1:/bin/bash
[root@node1 ~]#
# 方式二
[root@node1 ~]# getent passwd user1
user1:x:1001:1001::/home/user1:/bin/bash
[root@node1 ~]# usermod -md /opt/user1 user1 # 与-m一起使用,家目录会移动到修改后的目录处
[root@node1 ~]# getent passwd user1
user1:x:1001:1001::/opt/user1:/bin/bash
[root@node1 ~]# ll /opt/user1/
total 0
[root@node1 ~]# ll /home/user1/
ls: cannot access /home/user1/: No such file or directory
[root@node1 ~]#
4.3.设置/修改账户过期时间
[root@node1 ~]# chage -l user1
Last password change : Jun 10, 2025
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
[root@node1 ~]#
[root@node1 ~]# usermod -e "2025-12-31" user1
[root@node1 ~]#
[root@node1 ~]# chage -l user1
Last password change : Jun 10, 2025
Password expires : never
Password inactive : never
Account expires : Dec 31, 2025
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
[root@node1 ~]#
4.4.设置/修改密码过期后宽限时间
[root@node1 ~]# passwd -S user1 # 执行输出的-1是不会密码过期;还可以使用cat /etc/shadow | grep user1查看
user1 LK 2025-06-10 0 99999 7 -1 (Password locked.)
[root@node1 ~]# usermod -f 11 user1
[root@node1 ~]# passwd -S user1 # 执行输出11表示密码过期10天后不能登录
user1 LK 2025-06-10 0 99999 7 11 (Password locked.)
[root@node1 ~]#
4.5.修改用户组及其附加用户组
[root@node1 ~]# groups user1
user1 : user1
[root@node1 ~]# usermod -g userg user1 # 修改用户组
[root@node1 ~]# groups user1
user1 : userg
[root@node1 ~]# usermod -G usergroup,usergroup1 user1 # 添加附加用户组
[root@node1 ~]# groups user1
user1 : userg usergroup usergroup1
[root@node1 ~]# usermod -G usergroup user1 # 修改附加用户组
[root@node1 ~]# groups user1
user1 : userg usergroup
[root@node1 ~]# usermod -aG usergroup1 user1 # -a控制-G是添加附加用户组,不是修改
[root@node1 ~]# groups user1
user1 : userg usergroup usergroup1
[root@node1 ~]#
4.6.修改用户名称
[root@node1 ~]# getent passwd user1
user1:x:1001:1006::/home/user1:/bin/bash
[root@node1 ~]# usermod -l user11 user1
[root@node1 ~]# getent passwd user1
[root@node1 ~]# getent passwd user11 # 用户名称修改了,但是家目录没有改变
user11:x:1001:1006::/home/user1:/bin/bash
[root@node1 ~]#
4.7.锁定用户或解锁用户
# 会话一:
[root@node1 ~]# cat /etc/shadow | grep user1
user1:$1$6XkcPAPC$4aP24I21Kqm3kJNSZm88Q0:20249:0:99999:7:::
[root@node1 ~]# usermod -L user1
[root@node1 ~]# cat /etc/shadow | grep user1 # 锁定后,第二列信息前会添加一个感叹号!
user1:!$1$6XkcPAPC$4aP24I21Kqm3kJNSZm88Q0:20249:0:99999:7:::
[root@node1 ~]# usermod -U user1
[root@node1 ~]# cat /etc/shadow | grep user1
user1:$1$6XkcPAPC$4aP24I21Kqm3kJNSZm88Q0:20249:0:99999:7:::
[root@node1 ~]#
# 会话二: 密码锁定验证
[user1@node1 ~]$ su - user1 # 非root用户执行切换,需要输入密码,锁定后切换会提示Authentication failure
Password:
su: Authentication failure
[user1@node1 ~]$
4.8.修改用户UID(不/可重复)
[root@node1 ~]# getent passwd user1
user1:x:1001:1001::/home/user1:/bin/bash
[root@node1 ~]# getent passwd user2
user2:x:1002:1002::/home/user2:/bin/bash
[root@node1 ~]#
[root@node1 ~]# usermod -u 1001 user2 # 没有-o参数修改uid时,uid不能重复
usermod: UID '1001' already exists
[root@node1 ~]# usermod -o -u 1001 user2 # 指定-o参数修改uid时,uid可重复,需要与-u参数一起使用
[root@node1 ~]#
[root@node1 ~]# getent passwd user2
user2:x:1001:1002::/home/user2:/bin/bash
[root@node1 ~]#
4.9.指定加密串修改用户密码
[root@node1 ~]# openssl passwd user1pd # 生成user1pd的加密字符串,仅支持不超过8位数的密码
IA20qhrzYizyY
[root@node1 ~]# usermod -p IA20qhrzYizyY user1 # 通过加密字符串设置用户密码
[root@node1 ~]# cat /etc/shadow | grep user1 # 设置后会将加密字符串添加到/etc/shadow
user1:IA20qhrzYizyY:20249:0:99999:7:::
[root@node1 ~]#
4.10.修改用户shell
[root@node1 ~]# getent passwd user1
user1:x:1001:1001::/home/user1:/bin/bash
[root@node1 ~]# usermod -s /bin/zsh user1
[root@node1 ~]# getent passwd user1
user1:x:1001:1001::/home/user1:/bin/zsh
[root@node1 ~]#
4.11.-Z参数
[root@node1 ~]# id -Z # 查看selinux 用户列表
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@node1 ~]# ps -Z $$ # 查看selinux 用户列表
LABEL PID TTY STAT TIME COMMAND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 22859 pts/4 Ss 0:00 -bash
[root@node1 ~]# semanage login -l # 查看selinux用户与系统用户的关联列表
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
user10 unconfined_u s0-s0:c0.c1023 *
[root@node1 ~]# usermod -Z unconfined_u user1 # selinux用户与系统用户关联
[libsemanage]: user user10 not in password file
[root@node1 ~]# semanage login -l # 关联查看
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
user1 unconfined_u s0-s0:c0.c1023 *
user10 unconfined_u s0-s0:c0.c1023 *
[root@node1 ~]#