passwd的特殊的用法


[root@zmedu-17 ~]# passwd --help

用法: passwd [选项...] <帐号名称>

  -k, --keep-tokens       保持身份验证令牌不过期

  -d, --delete            删除已命名帐号的密码(只有根用户才能进行此操作)

  -l, --lock              锁定指名帐户的密码(仅限 root 用户)

  -u, --unlock            解锁指名账户的密码(仅限 root 用户)

  -e, --expire            终止指名帐户的密码(仅限 root 用户)

  -f, --force             强制执行操作

  -x, --maximum=DAYS      密码的最长有效时限(只有根用户才能进行此操作)

  -n, --minimum=DAYS      密码的最短有效时限(只有根用户才能进行此操作)

  -w, --warning=DAYS      在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)

  -i, --inactive=DAYS     当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)

  -S, --status            报告已命名帐号的密码状态(只有根用户才能进行此操作)

  --stdin                 从标准输入读取令牌(只有根用户才能进行此操作)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
passwd的用户锁定和解锁
  • -l, --lock 锁定指名帐户的密码(仅限 root 用户)
  • -u, --unlock 解锁指名账户的密码(仅限 root 用户)

[root@zmedu-17 ~]# grep gaosh3 /etc/shadow

gaosh3:$6$7FI9qn7O$QCnn/3PBZ/wA7n3WVV5cWp.BX4lzVmtlrdogfqUpySuz/kNUbKAVQ7T.AGWPhu1ta0SPO5guEFtdja/FOn68s0:18477:7:60:7:::

[root@zmedu-17 ~]# 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
a. 加锁测试

我们来锁定之后查看与上面有何异同


[root@zmedu-17 ~]# passwd -l gaosh3

锁定用户 gaosh3 的密码 。

passwd: 操作成功

[root@zmedu-17 ~]# grep gaosh3 /etc/shadow

gaosh3:!!$6$7FI9qn7O$QCnn/3PBZ/wA7n3WVV5cWp.BX4lzVmtlrdogfqUpySuz/kNUbKAVQ7T.AGWPhu1ta0SPO5guEFtdja/FOn68s0:18477:7:60:7:::

[root@zmedu-17 ~]# 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

可以看到在密码前面多了两个感叹号,这就表示锁定了gaosh3d 密码

测试


[root@zmedu-17 ~]# su - gaosh1



[gaosh1@zmedu-17 ~]$ su - gaosh3

密码:

su: 鉴定故障
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

方法1:使用 passwd  命令锁定和解锁用户

关于 passwd 命令,我们在之前的文章(使用 passwd 命令在 Linux 中处理用户密码)中介绍过,它主要用于处理账户的密码,也可以用于锁定用户。现在我们再来回顾一下。
在先前那篇文章中我们提到过,passwd 命令主要适用于 /etc/passwd 文件,这个文件可以手动修改,但我们一般不这样做,而且也不建议手动修改。要使用 passwd 命令锁定用户,可以使用 -l 或 -lock 选项:

passwd -l  username
  • 1.

锁定(或解锁)后,可以使用 passwd 命令的 -S 或 -status 选项来检查用户的当前状态:

passwd -S  username
  • 1.

其输出及说明,我们在《使用 passwd 命令在 Linux 中处理用户密码》一文中介绍过,大家可参阅一下,本文就不在赘述了。解锁用户,使用 -u 或 –unlock 选项:

passwd -u  username
  • 1.

通过这种方式锁定用户存在一个问题,由于它是作用于 /etc/passwd 文件,因此,被锁定的用户仍然可以通过 SSH 密钥登录(如果设置了通过 SSH 密码登录)。关于这个问题,我们在下面一节来介绍下如何处理。

方法2:使用 usermod 命令锁定和解锁用户

 usermod 命令主要用于修改 Linux 中的用户账户,也可以用来锁定或解锁用户。锁定用户,可以使用 usermod 命令的 -L 选项:

usermod -L  username
  • 1.

解锁用户,使用 -U 选项:

usermod -U  username
  • 1.

锁定或解锁后,如何验证操作是否成功了呢?usermod 命令也适用于 /etc/passwd 文件,因此也可以使用 passwd -S 命令来检查用户的状态。
既然 usermod 用户也作用于 /etc/passwd 文件,那么这也意味着被锁定的用户仍然可以通过 SSH 密钥登录,如何解决这个问题呢?
有一种办法,是可以将用户的  shell 更改为 nologin,这样将不允许用户登录 shell。至于如何修改 shell,我们将在以后单独介绍,感兴趣的朋友可以先行查阅相关资料。
另外一种办法,是为用户设置一个过去的日期作为过期日期,意思是在过去的那个日期禁用账户,这样也可以锁定它。
过去的这个日期,需要确保是在 1970-01-02 和当前日期之间。

usermod -L --expiredate 1970-01-02  username
  • 1.

通过上述方法锁定的用户,解锁的时候,可以使用如下方法:

usermod -U --expiredate ''  username
  • 1.

方法3:使用 chage 命令锁定和解锁用户

chage 命令用于更改用户密码到期信息。它可以用于在非活动的特定天数后自动锁定非活动用户。
基本上,通过上面方法 2 所做的工作,也可以通过如下所示的 chage 命令来实现:

chage -E 1  username
  • 1.

使用上述命令,就可以将过期日期设置为 1970-01-02,可以通过如下方式查看详细信息:

$ sudo chage -l standard
Last password change: Nov 07, 2019
Password expires: never
Password inactive: never
Account expires: Jan 02, 1970
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.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

要解锁用户,可以通过如下方式删除到期日期:

chage -E -1 username
  • 1.