标签 密码 下的文章

如果你在 Linux 上启用了密码策略。密码必须在到期前进行更改,并且登录到系统时会收到通知。

如果你很少使用自己的帐户,那么可能由于密码过期而被锁定。在许多情况下,这可能会在无需密码登录的服务帐户中发生,因为没人会注意到它。

这将导致停止服务器上配置的 cronjob/crontab

如果如此,该如何缓解这种情况。

你可以写一个 shell 脚本来获得有关它的通知,我们前一段时间为此写了一篇文章。

它将给出天数,但是本文旨在在终端中给你实际日期。

这可以使用 chage 命令来实现。

什么是 chage 命令?

chage 代表 更改时效 change age 。它更改用户密码到期信息。

chage 命令可以修改两次密码更改之间的天数,以及最后一次更改密码的日期。

系统使用此信息来确定用户何时应更改密码。

它还允许用户执行其他功能,例如设置帐户到期日期、在到期后将密码设置为无效、显示帐户时效信息、设置密码更改之前的最小和最大天数以及设置到期警告天数。

1)如何在 Linux 上检查特定用户的密码到期日期

如果要检查 Linux 上特定用户的密码到期日期,请使用以下命令。

# chage -l daygeek

Last password change                                    : Feb 13, 2020
Password expires                                        : May 13, 2020
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7

2)如何在 Linux 上检查所有用户的密码到期日期

你可以直接对单个用户使用 chage 命令,不过可能你对多个用户使用时可能无效。

为此,你需要编写一个小的 shell 脚本。下面的 shell 脚本可以列出添加到系统中的所有用户,包括系统用户。

# for user in $(cat /etc/passwd |cut -d: -f1); do echo $user; chage -l $user | grep "Password expires"; done | paste -d " "  - - | sed 's/Password expires//g'

你将得到类似以下的输出,但是用户名可能不同。

root                : never
bin                 : never
daemon              : never
adm                 : never
lp                  : never
sync                : never
shutdown            : never
u1               : Nov 12, 2018
u2               : Jun 17, 2019
u3               : Jun 17, 2019
u4               : Jun 17, 2019
u5               : Jun 17, 2019

3)如何检查 Linux 上除系统用户外的所有用户的密码有效期

下面的 shell 脚本将显示有到期日期的用户列表。

# for user in $(cat /etc/passwd |cut -d: -f1); do echo $user; chage -l $user | grep "Password expires"; done | paste -d " "  - - | sed 's/Password expires//g' | grep -v "never"

你将得到类似以下的输出,但是用户名可能不同。

u1               : Nov 12, 2018
u2               : Jun 17, 2019
u3               : Jun 17, 2019
u4               : Jun 17, 2019
u5               : Jun 17, 2019

via: https://www.2daygeek.com/linux-check-user-password-expiration-date/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用正确的设置,可以强制 Linux 用户定期更改密码。以下是查看密码时效以及如何更改其中设置的方法。

可以将 Linux 系统上的用户密码配置为永久或设置过期时间,以让人们必须定期重置它们。出于安全原因,通常认为定期更改密码是一种好习惯,但默认并未配置。

要查看和修改密码时效,你需要熟悉几个重要的命令:chage 命令及其 -l 选项,以及 passwd 命令及其 -S 选项。本文会介绍这些命令,还有其他一些 chage 命令选项来配置密码时效。

查看密码时效设置

确定某个特定帐户是否已设置密码时效的方法是使用如下 chage 命令。请注意,除了你自己的帐户以外,其他任何帐户都需要 root 权限。请注意下面的密码到期日期。

$ sudo chage -l dory
Last password change                                    : Mar 15, 2020
Password expires                                        : Jun 13, 2020    <==
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 10
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 14

如果未应用密码时效,那么帐户信息将如下所示:

$ sudo chage -l nemo
Last password change                                    : Jan 14, 2019
Password expires                                        : never         <==
Password inactive                                       : never
Account expires                                         : Mar 26, 2706989
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

你也可以使用 passwd -S 命令查看某些信息,但是你需要知道输出中的每个字段代表什么:

dory$ passwd -S
dory P 03/15/2020 10 90 14 -1

这里的七个字段代表:

  • 1 – 用户名
  • 2 - 帐户状态(L = 锁定,NP = 无密码,P = 可用密码)
  • 3 – 上次密码更改的日期
  • 4 – 可更改最低时效(如果没有这么多天,则不能更改密码)
  • 5 – 最长时效(这些天后,密码必须更改)
  • 6 – 密码过期前提前警告的天数
  • 7 – 密码过期后锁定之前的天数(设为无效)

需要注意的一件事是,chage 命令不会显示帐户是否被锁定;它仅显示密码时效设置。另一方面,passwd -S 命令将告诉你密码被锁定的时间。在此例中,请注意帐户状态为 L

$ sudo passwd -S dorothy
dorothy L 07/09/2019 0 99999 7 10

通过将 /etc/shadow 文件中通常包含密码的“哈希”字段变为 !,从而达成锁定的效果。

$ sudo grep dorothy /etc/shadow
dorothy:!:18086:0:99999:7:10::    <==

帐户被锁定的事实在 chage 输出中并不明显:

$ sudo chage -l dorothy
Last password change                                    : Jul 09, 2019
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

密码时效的一些选项

最常用的设置是最短和最长的天数。它们经常结合使用。例如,你可以配置一个密码,使其最长不能使用超过 90 天(最大),然后添加一个有效期为一周或 10 天(最小)的密码。这样可以确保用户不会在需要更改密码后马上改回以前的密码。

$ sudo chage -M 90 -m 10 shark
$ sudo chage -l shark
Last password change                                    : Mar 16, 2020
Password expires                                        : Jun 14, 2020
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 10    <==
Maximum number of days between password change          : 90    <==
Number of days of warning before password expires       : 7

你还可以使用 -E 选项为帐户设置特定的到期日期。

$ sudo chage -E 2020-11-11 tadpole
$ sudo chage -l tadpole
Last password change                                    : Oct 15, 2019
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Nov 11, 2020  <==
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

密码时效可能是一个重要的选择,只要它不鼓励用户使用过于简单的密码或以不安全的方式写下来即可。有关控制密码字符(例如,大小写字母、数字等的组合)的更多信息,请参考这篇关于密码复杂度的文章。


via: https://www.networkworld.com/article/3532815/viewing-and-configuring-password-aging-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用一组公钥/私钥对让你不需要密码登录到远程 Linux 系统或使用 ssh 运行命令,这会非常方便,但是设置过程有点复杂。下面是帮助你的方法和脚本。

Linux 系统上设置一个允许你无需密码即可远程登录或运行命令的帐户并不难,但是要使它正常工作,你还需要掌握一些繁琐的细节。在本文,我们将完成整个过程,然后给出一个可以帮助处理琐碎细节的脚本。

设置好之后,如果希望在脚本中运行 ssh 命令,尤其是希望配置自动运行的命令,那么免密访问特别有用。

需要注意的是,你不需要在两个系统上使用相同的用户帐户。实际上,你可以把公用密钥用于系统上的多个帐户或多个系统上的不同帐户。

设置方法如下。

在哪个系统上启动?

首先,你需要从要发出命令的系统上着手。那就是你用来创建 ssh 密钥的系统。你还需要可以访问远程系统上的帐户并在其上运行这些命令。

为了使角色清晰明了,我们将场景中的第一个系统称为 “boss”,因为它将发出要在另一个系统上运行的命令。

因此,命令提示符如下:

boss$

如果你还没有在 boss 系统上为你的帐户设置公钥/私钥对,请使用如下所示的命令创建一个密钥对。注意,你可以在各种加密算法之间进行选择。(一般使用 RSA 或 DSA。)注意,要在不输入密码的情况下访问系统,你需要在下面的对话框中的两个提示符出不输入密码。

如果你已经有一个与此帐户关联的公钥/私钥对,请跳过此步骤。

boss$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/myself/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):            <== 按下回车键即可
Enter same passphrase again:                           <== 按下回车键即可
Your identification has been saved in /home/myself/.ssh/id_rsa.
Your public key has been saved in /home/myself/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1zz6pZcMjA1av8iyojqo6NVYgTl1+cc+N43kIwGKOUI myself@boss
The key's randomart image is:
+---[RSA 3072]----+
|     . ..        |
|   E+ .. .       |
|  .+ .o + o      |
|   ..+.. .o* .   |
|    ... So+*B o  |
|    +   ...==B . |
| . o .   ....++. |
|o o   . . o..o+  |
|=..o.. ..o  o.   |
+----[SHA256]-----+

上面显示的命令将创建公钥和私钥。其中公钥用于加密,私钥用于解密。因此,这些密钥之间的关系是关键的,私有密钥绝不应该被共享。相反,它应该保存在 boss 系统的 .ssh 文件夹中。

注意,在创建时,你的公钥和私钥将会保存在 .ssh 文件夹中。

下一步是将公钥复制到你希望从 boss 系统免密访问的系统。你可以使用 scp 命令来完成此操作,但此时你仍然需要输入密码。在本例中,该系统称为 “target”。

boss$ scp .ssh/id_rsa.pub myacct@target:/home/myaccount
myacct@target's password:

你需要安装公钥在 target 系统(将运行命令的系统)上。如果你没有 .ssh 目录(例如,你从未在该系统上使用过 ssh),运行这样的命令将为你设置一个目录:

target$ ssh localhost date
target$ ls -la .ssh
total 12
drwx------ 2 myacct myacct 4096 Jan 19 11:48 .
drwxr-xr-x 6 myacct myacct 4096 Jan 19 11:49 ..
-rw-r--r-- 1 myacct myacct  222 Jan 19 11:48 known_hosts

仍然在目标系统上,你需要将从“boss”系统传输的公钥添加到 .ssh/authorized_keys 文件中。如果该文件已经存在,使用下面的命令将把它添加到文件的末尾;如果文件不存在,则创建该文件并添加密钥。

target$ cat id_rsa.pub >> .ssh/authorized_keys

下一步,你需要确保你的 authorized_keys 文件权限为 600。如果还不是,执行命令 chmod 600 .ssh/authorized_keys

target$ ls -l authorized_keys
-rw------- 1 myself myself 569 Jan 19 12:10 authorized_keys

还要检查目标系统上 .ssh 目录的权限是否设置为 700。如果需要,执行 chmod 700 .ssh 命令修改权限。

target$ ls -ld .ssh
drwx------ 2 myacct myacct 4096 Jan 14 15:54 .ssh

此时,你应该能够从 boss 系统远程免密运行命令到目标系统。除非目标系统上的目标用户帐户拥有与你试图连接的用户和主机相同的旧公钥,否则这应该可以工作。如果是这样,你应该删除早期的(并冲突的)条目。

使用脚本

使用脚本可以使某些工作变得更加容易。但是,在下面的示例脚本中,你会遇到的一个烦人的问题是,在配置免密访问权限之前,你必须多次输入目标用户的密码。一种选择是将脚本分为两部分——需要在 boss 系统上运行的命令和需要在 target 系统上运行的命令。

这是“一步到位”版本的脚本:

#!/bin/bash
# NOTE: This script requires that you have the password for the remote acct
#       in order to set up password-free access using your public key

LOC=`hostname`  # the local system from which you want to run commands from
                # wo a password

# get target system and account
echo -n "target system> "
read REM
echo -n "target user> "
read user

# create a key pair if no public key exists
if [ ! -f ~/.ssh/id_rsa.pub ]; then
  ssh-keygen -t rsa
fi

# ensure a .ssh directory exists in the remote account
echo checking for .ssh directory on remote system
ssh $user@$REM "if [ ! -d /home/$user/.ssh ]; then mkdir /home/$user/.ssh; fi"

# share the public key (using local hostname)
echo copying the public key
scp ~/.ssh/id_rsa.pub $user@$REM:/home/$user/$user-$LOC.pub

# put the public key into the proper location
echo adding key to authorized_keys
ssh $user@$REM "cat /home/$user/$user-$LOC.pub >> /home/$user/.ssh/authorized_ke
ys"

# set permissions on authorized_keys and .ssh (might be OK already)
echo setting permissions
ssh $user@$REM "chmod 600 ~/.ssh/authorized_keys"
ssh $user@$REM "chmod 700 ~/.ssh"

# try it out -- should NOT ask for a password
echo testing -- if no password is requested, you are all set
ssh $user@$REM /bin/hostname

脚本已经配置为在你每次必须输入密码时告诉你它正在做什么。交互看起来是这样的:

$ ./rem_login_setup
target system> fruitfly
target user> lola
checking for .ssh directory on remote system
lola@fruitfly's password:
copying the public key
lola@fruitfly's password:
id_rsa.pub                                    100%  567   219.1KB/s   00:00
adding key to authorized_keys
lola@fruitfly's password:
setting permissions
lola@fruitfly's password:
testing -- if no password is requested, you are all set
fruitfly

在上面的场景之后,你就可以像这样登录到 lola 的帐户:

$ ssh lola@fruitfly
[lola@fruitfly ~]$

一旦设置了免密登录,你就可以不需要键入密码从 boss 系统登录到 target 系统,并且运行任意的 ssh 命令。以这种免密的方式运行并不意味着你的帐户不安全。然而,根据 target 系统的性质,保护你在 boss 系统上的密码可能变得更加重要。


via: https://www.networkworld.com/article/3514607/setting-up-passwordless-linux-logins-using-publicprivate-keys.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:laingke 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

总有这样的时候:有时你需要禁用某位 Linux 用户的账号,有时你还需要反过来解禁用户的账号。 本文将介绍一些管理用户访问的命令,并介绍它们背后的原理。

假如你正管理着一台 Linux 系统,那么很有可能将遇到需要禁用一个账号的情况。可能是某人已经换了职位,他们是否还需要该账号仍是个问题;或许有理由相信再次使用该账号并没有大碍。不管上述哪种情况,知晓如何禁用账号并解禁账号都是你需要知道的知识。

需要你记住的一件重要的事是尽管有多种方法来禁用账号,但它们并不都达到相同的效果。假如用户使用公钥/私钥来使用该账号而不是使用密码来访问,那么你使用的某些命令来阻止用户获取该账号或许将不会生效。

使用 passwd 来禁用一个账号

最为简单的用来禁用一个账号的方法是使用 passwd -l 命令。例如:

$ sudo passwd -l tadpole

上面这个命令的效果是在加密后的密码文件 /etc/shadow 中,用户对应的那一行的最前面加上一个 ! 符号。这样就足够阻止用户使用密码来访问账号了。

在没有使用上述命令前,加密后的密码行如下所示(请注意第一个字符):

$6$IC6icrWlNhndMFj6$Jj14Regv3b2EdK.8iLjSeO893fFig75f32rpWpbKPNz7g/eqeaPCnXl3iQ7RFIN0BGC0E91sghFdX2eWTe2ET0:18184:0:99999:7:::

而禁用该账号后,这一行将变为:

!$6$IC6icrWlNhndMFj6$Jj14Regv3b2EdK.8iLjSeO893fFig75f32rpWpbKPNz7g/eqeaPCnXl3iQ7RFIN0BGC0E91sghFdX2eWTe2ET0:18184:0:99999:7:::

在 tadpole 下一次尝试登录时,他可能会使用他原有的密码来尝试多次登录,但就是无法再登录成功了。另一方面,你则可以使用下面的命令来查看他这个账号的状态(-S = status):

$ sudo passwd -S tadpole
tadpole L 10/15/2019 0 99999 7 -1

第二项的 L 告诉你这个账号已经被禁用了。在该账号被禁用前,这一项应该是 P。如果显示的是 NP 则意味着该账号还没有设置密码。

命令 usermod -L 也具有相同的效果(添加 ! 来禁用账号的使用)。

使用这种方法来禁用某个账号的一个好处是当需要解禁某个账号时非常容易。只需要使用一个文本编辑器或者使用 passwd -u 命令来执行相反的操作,即将添加的 ! 移除即可。

$ sudo passwd -u tadpole
passwd: password expiry information changed.

但使用这种方式的问题是如果用户使用公钥/私钥对的方式来访问他/她的账号,这种方式将不能阻止他们使用该账号。

使用 chage 命令来禁用账号

另一种禁用用户账号的方法是使用 chage 命令,它可以帮助管理用户账号的过期日期。

$ sudu chage -E0 tadpole
$ sudo passwd -S tadpole
tadpole P 10/15/2019 0 99999 7 -1

chage 命令将会稍微修改 /etc/shadow 文件。在这个使用 : 来分隔的文件(下面将进行展示)中,某行的第 8 项将被设置为 0(先前为空),这就意味着这个账号已经过期了。chage 命令会追踪密码更改期间的天数,通过选项也可以提供账号过期信息。第 8 项如果是 0 则意味着这个账号在 1970 年 1 月 1 日后的一天过期,当使用上面显示的那个命令时可以用来禁用账号。

$ sudo grep tadpole /etc/shadow | fold
tadpole:$6$IC6icrWlNhndMFj6$Jj14Regv3b2EdK.8iLjSeO893fFig75f32rpWpbKPNz7g/eqeaPC
nXl3iQ7RFIN0BGC0E91sghFdX2eWTe2ET0:18184:0:99999:7::0:
                                                    ^
                                                    |
                                                    +--- days until expiration

为了执行相反的操作,你可以简单地使用下面的命令将放置在 /etc/shadow 文件中的 0 移除掉:

% sudo chage -E-1 tadpole

一旦一个账号使用这种方式被禁用,即便是无密码的 SSH 登录也不能再访问该账号了。


via: https://www.networkworld.com/article/3513982/locking-and-unlocking-accounts-on-linux-systems.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:FSSlc 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

密码强制策略对所有操作系统和应用程序都是通用的。如果要在 Linux 上实现密码强制策略,请参阅以下文章。

默认情况下,大多数公司都会强制执行密码强制策略,但根据公司的要求,密码的时间周期会有所不同。通常每个人都使用 90 天的密码周期。用户只会在他们使用的一些服务器上更改密码,而不会在他们不经常使用的服务器上更改密码。

特别地,大多数团队忘记更改服务帐户密码,这可能导致日常工作的中断,即使他们配置有基于 SSH 密钥的身份验证。如果用户帐户密码过期,基于SSH密钥的身份验证和 cronjob 将不起作用。

为了避免这种情况,我们创建了一个 shell 脚本来向你发送 10 天内到期的用户帐户列表。

本教程中包含两个 bash 脚本可以帮助你收集系统中用户到期天数的信息。

1) 检查 10 天后到期的用户帐户列表

此脚本将帮助你在终端上检查 10 天内到期的用户帐户列表。

# vi /opt/script/user-password-expiry.sh
#!/bin/sh
/tmp/user-expiry-1.txt
/tmp/user-expiry.txt
echo "-------------------------------------------------"
echo "UserName  The number of days the password expires"
echo "-------------------------------------------------"
for usern in u1 u2 u3 u4
do
today=$(date +%s)
userexpdate=$(chage -l $usern | grep 'Password expires' |cut -d: -f2)
passexp=$(date -d "$userexpdate" "+%s")
exp=`expr \( $passexp - $today \)`
expday=`expr \( $exp / 86400 \)`
echo "$usern $expday" >> /tmp/user-expiry.txt
done
cat /tmp/user-expiry.txt | awk '$2 <= 10' > /tmp/user-expiry-1.txt
cat /tmp/user-expiry-1.txt | column -t

将文件 user-password-expiry.sh 设置为可执行的 Linux 文件权限。

# chmod +x /opt/script/user-password-expiry.sh

你将得到如下输出,但用户与天数可能不同。

# sh /opt/script/user-password-expiry.sh

-------------------------------------------------
UserName  The number of days the password expires
-------------------------------------------------
u1         -25
u2          9
u3          3
u4          5

2) 发送包含 10 天内到期的用户帐户列表的电子邮件

此脚本将发送一封包含 10 天内到期的用户帐户列表的邮件。

# vi /opt/script/user-password-expiry-mail.sh
#!/bin/sh
SUBJECT="Information About User Password Expiration on "`date`""
MESSAGE="/tmp/user-expiry.txt"
MESSAGE1="/tmp/user-expiry-1.txt"
TO="[email protected]"
echo "-------------------------------------------------" >> $MESSAGE1
echo "UserName  The number of days the password expires" >> $MESSAGE1
echo "-------------------------------------------------" >> $MESSAGE1
for usern in u1 u2 u3 u4
do
today=$(date +%s)
userexpdate=$(chage -l $usern | grep 'Password expires' |cut -d: -f2)
passexp=$(date -d "$userexpdate" "+%s")
exp=`expr \( $passexp - $today \)`
expday=`expr \( $exp / 86400 \)`
echo "$usern $expday" >> $MESSAGE
done
cat $MESSAGE | awk '$2 <= 10' >> $MESSAGE1
mail -s "$SUBJECT" "$TO" < $MESSAGE1
rm $MESSAGE
rm $MESSAGE1

将文件 user-password-expiry-mail.sh 设置为可执行的 Linux 文件权限。

# chmod +x /opt/script/user-password-expiry-mail.sh

最后,添加一个 cronjob 去自动执行脚本。每天早上 8 点运行一次。

# crontab -e
0 8 * * * /bin/bash /opt/script/user-password-expiry-mail.sh

你将收到一封与第一个脚本输出类似的电子邮件。


via: https://www.2daygeek.com/bash-script-to-check-user-account-password-expiry-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:qianmingtian 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

对于 Linux 系统管理员来说,用户管理是最重要的事之一。这涉及到很多因素,实现强密码策略是用户管理的其中一个方面。移步后面的 URL 查看如何 在 Linux 上生成一个强密码。它会限制系统未授权的用户的访问。

所有人都知道 Linux 的默认策略很安全,然而我们还是要做一些微调,这样才更安全。弱密码有安全隐患,因此,请特别注意。移步后面的 URL 查看生成的强密码的密码长度和分值。本文将教你在 Linux 中如何实现最安全的策略。

在大多数 Linux 系统中,我们可以用 PAM( 可插拔认证模块 pluggable authentication module )来加强密码策略。在下面的路径可以找到这个文件。

  • 在红帽系列的系统中,路径:/etc/pam.d/system-auth
  • Debian 系列的系统中,路径:/etc/pam.d/common-password

关于默认的密码过期时间,可以在 /etc/login.defs 文件中查看详细信息。

为了更好理解,我摘取了文件的部分内容:

# vi /etc/login.defs

PASS_MAX_DAYS   99999
PASS_MIN_DAYS   0
PASS_MIN_LEN    5
PASS_WARN_AGE   7

详细解释:

  • PASS_MAX_DAYS:一个密码可使用的最大天数。
  • PASS_MIN_DAYS:两次密码修改之间最小的间隔天数。
  • PASS_MIN_LEN:密码最小长度。
  • PASS_WARN_AGE:密码过期前给出警告的天数。

我们将会展示在 Linux 中如何实现下面的 11 个密码策略。

  • 一个密码可使用的最大天数
  • 两次密码修改之间最小的间隔天数
  • 密码过期前给出警告的天数
  • 密码历史记录/拒绝重复使用密码
  • 密码最小长度
  • 最少的大写字母个数
  • 最少的小写字母个数
  • 最少的数字个数
  • 最少的其他字符(符号)个数
  • 账号锁定 — 重试
  • 账号解锁时间

密码可使用的最大天数是什么?

这一参数限制一个密码可使用的最大天数。它强制用户在过期前修改他/她的密码。如果他们忘记修改,那么他们会登录不了系统。他们需要联系管理员才能正常登录。这个参数可以在 /etc/login.defs 文件中设置。我把这个参数设置为 90 天。

# vi /etc/login.defs

PASS_MAX_DAYS   90

密码最小天数是什么?

这个参数限制两次修改之间的最少天数。举例来说,如果这个参数被设置为 15 天,用户今天修改了密码,那么在 15 天之内他都不能修改密码。这个参数可以在 /etc/login.defs 文件中设置。我设置为 15 天。

# vi /etc/login.defs

PASS_MIN_DAYS   15

密码警告天数是什么?

这个参数控制密码警告的前置天数,在密码即将过期时会给用户警告提示。在警告天数结束前,用户会收到日常警告提示。这可以提醒用户在密码过期前修改他们的密码,否则我们就需要联系管理员来解锁密码。这个参数可以在 /etc/login.defs 文件中设置。我设置为 10 天。

# vi /etc/login.defs

PASS_WARN_AGE   10

注意: 上面的所有参数仅对新账号有效,对已存在的账号无效。

密码历史或拒绝重复使用密码是什么?

这个参数控制密码历史。它记录曾经使用过的密码(禁止使用的曾用密码的个数)。当用户设置新的密码时,它会检查密码历史,如果他们要设置的密码是一个曾经使用过的旧密码,将会发出警告提示。这个参数可以在 /etc/pam.d/system-auth 文件中设置。我设置密码历史为 5。

# vi /etc/pam.d/system-auth

password  sufficient  pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5

密码最小长度是什么?

这个参数表示密码的最小长度。当用户设置新密码时,系统会检查这个参数,如果新设的密码长度小于这个参数设置的值,会收到警告提示。这个参数可以在 /etc/pam.d/system-auth 文件中设置。我设置最小密码长度为 12。

# vi /etc/pam.d/system-auth

password  requisite   pam_cracklib.so try_first_pass retry=3 minlen=12

try_first_pass retry=3:在密码设置交互界面,用户有 3 次机会重设密码。

设置最少的大写字母个数?

这个参数表示密码中至少需要的大写字母的个数。这些是密码强度参数,可以让密码更健壮。当用户设置新密码时,系统会检查这个参数,如果密码中没有大写字母,会收到警告提示。这个参数可以在 /etc/pam.d/system-auth 文件中设置。我设置密码(中的大写字母)的最小长度为 1 个字母。

# vi /etc/pam.d/system-auth

password   requisite   pam_cracklib.so try_first_pass retry=3 minlen=12 ucredit=-1

设置最少的小写字母个数?

这个参数表示密码中至少需要的小写字母的个数。这些是密码强度参数,可以让密码更健壮。当用户设置新密码时,系统会检查这个参数,如果密码中没有小写字母,会收到警告提示。这个参数可以在 /etc/pam.d/system-auth 文件中设置。我设置为 1 个字母。

# vi /etc/pam.d/system-auth

password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=12 lcredit=-1

设置密码中最少的数字个数?

这个参数表示密码中至少需要的数字的个数。这些是密码强度参数,可以让密码更健壮。当用户设置新密码时,系统会检查这个参数,如果密码中没有数字,会收到警告提示。这个参数可以在 /etc/pam.d/system-auth 文件中设置。我设置为 1 个数字。

# vi /etc/pam.d/system-auth

password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=12 dcredit=-1

设置密码中最少的其他字符(符号)个数?

这个参数表示密码中至少需要的特殊符号的个数。这些是密码强度参数,可以让密码更健壮。当用户设置新密码时,系统会检查这个参数,如果密码中没有特殊符号,会收到警告提示。这个参数可以在 /etc/pam.d/system-auth 文件中设置。我设置为 1 个字符。

# vi /etc/pam.d/system-auth

password    requisite     pam_cracklib.so try_first_pass retry=3 minlen=12 ocredit=-1

设置账号锁定?

这个参数控制用户连续登录失败的最大次数。当达到设定的连续失败登录次数阈值时,锁定账号。这个参数可以在 /etc/pam.d/system-auth 文件中设置。

# vi /etc/pam.d/system-auth

auth        required      pam_tally2.so onerr=fail audit silent deny=5
account required pam_tally2.so

设定账号解锁时间?

这个参数表示用户解锁时间。如果一个用户账号在连续认证失败后被锁定了,当过了设定的解锁时间后,才会解锁。设置被锁定中的账号的解锁时间(900 秒 = 15分钟)。这个参数可以在 /etc/pam.d/system-auth 文件中设置。

# vi /etc/pam.d/system-auth

auth        required      pam_tally2.so onerr=fail audit silent deny=5 unlock_time=900
account required pam_tally2.so

via: https://www.2daygeek.com/how-to-set-password-complexity-policy-on-linux/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出