目录
58. shell命令--usermod
功能说明
usermod 命令在 Linux 系统中用于修改用户的账户设置。这个命令可以修改用户的登录名、家目录、组、登录shell等。它是 useradd 命令的补充,用于在用户创建后对其属性进行修改。
语法格式
SYNOPSIS
usermod [options] LOGIN
- options:是 usermod 命令的选项,用于指定要修改的属性。
- LOGIN:是用户的登录名,即你想要修改其属性的用户名。
选项说明
-c, --comment COMMENT:修改用户的注释信息,通常这是 /etc/passwd 文件中 GECOS 字段的内容。
-d, --home HOME_DIR:修改用户的家目录。如果指定的家目录不存在,则不会自动创建。
-e, --expiredate EXPIRE_DATE:设置用户的账户过期日期。日期格式为 YYYY-MM-DD。
-g, --gid GROUP:修改用户的初始登录组。组名或组ID都可以。
-G, --groups GROUPS:修改用户所属的附加组列表。多个组之间用逗号分隔。
-l, --login NEW_LOGIN:修改用户的登录名。注意,这会修改 /etc/passwd 和 /etc/shadow 文件中用户名的所有实例。
-L, --lock:锁定用户账户,阻止用户登录。
-m, --move-home:与 -d 一起使用时,如果新的家目录不存在,则创建它,并移动旧的家目录内容到新位置。
-s, --shell SHELL:修改用户的登录shell。
-U, --unlock:解锁用户账户,允许用户登录。
-f<缓冲天数> 修改在密码过期后多少天即关闭该帐号。
-u<uid> 修改用户ID。
-a 将用户添加至扩展组中
实践操作
1. 修改用户 MineGi 的家目录为 /home/newMineGi 并移动旧家目录内容
useradd MineGi
mkdir /home/MineGi/testdir
ls /home/MineGi/
grep MineGi /etc/passwd
usermod -d /home/newMineGi -m MineGi
grep MineGi /etc/passwd
ls /home/MineGi/
ls /home/newMineGi/
usermod -md /home/MineGi MineGi #也可以简写
grep MineGi /etc/passwd
ls /home/MineGi/
ls /home/newMineGi
2. 修改用户 MineGi 的登录 shell 为 /sbin/nologin
grep MineGi /etc/passwd
usermod -s /sbin/nologin MineGi
grep MineGi /etc/passwd
3. 修改用户 MineGi 的登录名为 MineGing
grep MineGi /etc/passwd
usermod -l MineGing MineGi
grep MineGing /etc/passwd
4. 将用户 MineGing 的 UID 和 GID 都修改为 9527
grep MineGing /etc/passwd
usermod -u 9527 MineGing #修改用户的用户ID(UID)。这是一个整数,必须唯一且未被其他用户占用。UID 0 通常保留给 root 用户
grep MineGing /etc/passwd
usermod -u 9527 -g 9527 MineGing #提示不存在
groupadd 9527 #添加的只是组名为9527,gid不一定是9527
usermod -u 9527 -g 9527 MineGing #还是提示不存在
grep MineGing /etc/passwd
tail -2 /etc/group
groupadd -g 9527 9527 #提示用户组9527已存在
groupadd -g 9527 9528 #改一下组名为9528也不行
groupadd -g 9527 test
tail -2 /etc/group
usermod -u 9527 -g 9527 MineGing
grep MineGing /etc/passwd
5. 将用户 MineGing 添加到其他组中
tail -3 /etc/group
usermod -G 9527 MineGing
tail -3 /etc/group
usermod -G 72 MineGing
tail -3 /etc/group
usermod -G MineGi MineGing
tail -3 /etc/group
usermod -aG 9527 MineGing #-a 参数表示附加,只和 -G 参数一同使用,表示将用户增加到组中
tail -3 /etc/group
6. 设置 MineGing 账户的密码过期后 N 天内未更换则禁用账户
grep MineGing /etc/shadow
usermod -f 7 MineGing #设置密码过期后账户被禁用的天数。设置为 0 表示密码过期后立即禁用账户,设置为 -1 表示账户永不过期
grep MineGing /etc/shadow
usermod -f 10 MineGing
grep MineGing /etc/shadow
7. 设置账号终止日期
grep MineGing /etc/shadow
usermod -e "3000/01/01" MineGing #第一种写法
grep MineGing /etc/shadow
usermod -e "4000-01-01" MineGing #第二种写法
grep MineGing /etc/shadow
8. 锁定与解锁用户
窗口1操作
grep MineGing /etc/shadow #默认新创建的用户已经锁定,两个!!表示锁定
su - MineGing #切换不了
usermod -U MineGing #解锁的时候提示需要设置密码
echo '123456' |passwd --stdin MineGing #先设置个密码
grep MineGing /etc/shadow #前面俩叹号已经没了
su - MineGing #还是切换不了
grep MineGing /etc/passwd #是因为设置了 shell 类型为 /sbin/nologin
usermod -s /bin/bash MineGing #将其 shell 类型改为 /bin/bash
su - MineGing #成功切换
whoami #查看当前登录用户
logout 或 Ctrl + d 退出
whoami
usermod -L MineGing #锁定用户,密码段前面会多一个叹号
grep MineGing /etc/shadow
su - MineGing #还是能切换成功,但是重新开个终端用ssh连接看看
hostname -I
窗口2操作
ssh MineGing@10.4.7.11 #登录不上
usermod -U MineGing
grep MineGing /etc/shadow
ssh MineGing@10.4.7.11
注意事项
- 修改用户登录名(-l 选项)时,需要确保新的登录名在系统中是唯一的,并且不会与现有的文件或目录名冲突。
- 修改用户家目录(-d 和 -m 选项)时,应确保新的家目录对用户是可访问的,并且如果 -m 选项被使用,则旧家目录的内容会被移动到新家目录。
- 在使用 usermod 修改用户属性时,最好以 root 用户身份执行,因为修改 /etc/passwd 和 /etc/shadow 等系统文件需要相应的权限。
- 在修改用户属性之前,最好备份相关的配置文件和系统状态,以防万一出现问题可以恢复。
- 在修改用户属性时,尤其是涉及 UID、登录名或家目录等关键属性的更改,务必谨慎操作,以避免系统权限混乱或数据丢失。
- 如果在修改过程中遇到权限不足的问题,确保以 root 用户身份执行命令。
- 在进行重大更改(如修改登录名或 UID)之前,最好先测试在测试环境中是否会导致意外的行为或错误。
- 使用 -m 选项移动家目录时,应确保有足够的磁盘空间来容纳旧家目录的内容,并检查新家目录的权限设置,以确保用户能够正常访问。
- 如果需要修改多个用户的属性,可以考虑编写脚本来自动化这个过程,但务必仔细验证脚本逻辑,防止误操作。