Linux用户管理之usermod、chage、userdel、id命令讲解

在上一章节中,我们学习了如何利用 useradd 添加一个新的用户,利用 passwd 给用户设置、修改密码。但是如果手一抖不小心用户信息添加错了,或者需要修改用户信息,该如何操作呢?

前面也讲过,我们可以手动修改 /etc/passwd 以及 /etc/shadow 文件来添加一个用户,那么手动修改文件当然也可以修改用户信息。不过今天要为大家讲解的是使用 Linux 的 usermod 命令来修改用户信息。

一、修改用户命令 usermod#

Linux usermod 命令可用来修改用户帐号的各项设定。

useradd [选项] 用户名

该命令常用的选项及各自的含义如下:

  • -c 修改用户的说明信息,对应于修改 /etc/passwd 文件中用户信息的第 5 个信息
  • -d 修改用户的主目录,对应于修改 /etc/passwd 文件中目标用户信息的个信息
  • -e 修改用户的失效日期,格式为 “YYYY-MM-DD”,对应于修改 /etc/shadow 文件用户密码信息的第 8 个信息
  • -g 修改用户的初始组,对应于修改 /etc/passwd 文件用户信息的第 4 信息(GID)
  • -u 修改用户的 UID,对应于修改 /etc/passwd 文件用户信息的第 3 个信息(UID)
  • -G 修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件;
  • -l 修改用户名称;
  • -L 临时锁定用户(Lock)
  • -U 解锁用户(Unlock),和 -L 对应
  • -s 修改用户的登录 Shell,默认是 /bin/bash

从上面的参数来看,与上一章讲解的 useradd 命令的参数对比来看,这两个命令的参数是差不多的。只不过 usermod 命令比 useradd 多了 -L-U 两个参数。

1、比如我现在要锁定在上一章创建的用户 testuser:#

$ usermod -L testuser

锁定用户的本质,就是使用户的密码失效,使之不能登录,所以我们去看 /etc/shadow 密码文件,发现这个用户的密码位前面多了一个 ! 号:

image

2、解锁用户#

既然能锁定用户,自然也能解锁用户:

$ usermod -U testuser

执行命令之后,我们再去查看 /etc/shadow 文件,密码位前面的 ! 就取消了。

3、修改用户说明#

$ usermod -c "modify user descript" testuser

在修改用户说明之前,我们先来看看现在的用户说明是什么:

$ grep "testuser" /etc/passwd

image

执行命令命令之后,我们再来看下用户说明:

image

用户说明已经被成功修改了。

4、把用户加入新的组#

比如我们要把 testuser 用户添加到 root 组:

$ usermod -G root testuser

二、修改用户的密码状态: chage#

该命令不仅可以用来修改用户的密码状态,还可以和 passwd -S 命令一样 显示详细的用户密码信息。

chage [选项] 用户名

该命令常用的选项及各自的含义如下:

  • -m:密码可更改的最小天数,为零时代表任何时候都可以更改密码,对应 /etc/shadow 文件中的第 4 个字段
  • -M:密码保持有效的最大天数,对应 /etc/shadow 文件中的第 5 个字段
  • -w:用户密码到期前,提前收到警告信息的天数,对应 /etc/shadow 文件中的第 6 个字段
  • -E:帐号到期的日期,过了这天,此帐号将不可用。对应 /etc/shadow 文件中的第 8 个字段
  • -d:上一次更改的日期,对应 /etc/shadow 文件中的第 3 个字段
  • -i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用,对应 /etc/shadow 文件中的第 7 个字段
  • -l:列出用户的详细密码状态

我们先来查看下 testuser 的密码信息:

$ chage -l testuser

image

各信息意思如下:

  • Last password change: 最近一次密码修改时间: 6 月 18, 2020
  • Password expires:密码过期时间:从不
  • Password inactive:密码失效时间:从不
  • Account expires:帐户过期时间:从不
  • 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
1、修改密码过期时间#

我可以通过如下命令修改我的密码过期时间,设置 60 天后过期:

$ chage -M 60 testuser

image

2、设置密码失效时间#

$ chage -i 5 testuser

意思是在密码过期后 5 天,密码自动失效,这个用户将无法登陆系统了。

image

3、chage 命令还有个硬核功能,可以强制用户在第一次登录后,必须先修改密码,并利用新密码重新登陆系统,此用户才能正常使用#

我们创建一个新的用户 testuser2, 然后设置它的密码创建日期为 1970 年 1 月 1 日:

# 创建用户
$ useradd testuser2

#设置密码123456
$ echo "123456" | passwd --stdin testuser2

#设置密码创建日期为1970年1月1日
$ chage -d 0 testuser2

执行完成之后,我们用 testuser2 用户去登录系统,提示需要去修改密码:

image

三、删除用户命令:userdel#

userdel 命令使用很简单,用于删除用户帐号的相关数据。

userdel [选项-r] 用户名

若不加 -r 参数,则仅删除用户帐号,而不删除用户宿主目录,那么用户目录就会变成没有属主和属组的目录,也就是垃圾文件。

比如分别删除 testuser 以及 testuser2 用户:

# 删除testuser用户,不加-r参数
$ userdel testuser

# 删除testuser2用户,加-r参数
$ userdel -r testuser2

image

可以看到,删除 testuser 不加 -r 参数,执行命令之后,该用户的宿主目录保留了。

四、查看用户的 UID 和 GID 命令:id#

id 命令比较简单,可以查询用户的 UID、GID 和附加组的信息:

id 用户名

比如查看 eddy 用户的:

$ id eddy
$ uid=1009(eddy)  gid=1009  groups=1009

执行命令之后到 uid (用户 ID)、gid (初始组 ID), groups 是用户所在组。

现在我把 eddy 用户加入 root 组:

image

大家发现该用户的附加组信息中多了一个 root 组。

今天为大家讲解了如何修改 Linux 用户信息,修改用户密码以及如何删除用户。下一章继续为大家讲解 Linux 用户相关的其他操作命令。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。