是否可以根据 Linux 中的组成员身份设置用户密码策略?

是否可以根据 Linux 中的组成员身份设置用户密码策略?

我想设置一个密码限制策略,例如,minlen等等……maxageminage

我知道在系统范围内执行此操作的方法,但是可以为特定的用户群体执行此操作吗?

我的意思是只有组下的用户才admin应该遵守这些限制,其他用户也应该遵守这些限制。

答案1

您说您知道如何在系统范围内实施密码策略,但我会重申那些不知道的人该怎么做。您可以使用 PAM 模块,pam_cracklib.so它会检查密码是否符合某些条件,然后才允许将密码应用于帐户。在 Ubuntu 中,软件包会安装此模块,并将以下行应用于处理更改用户密码的文件的libpam-cracklib顶部:/etc/pam.d/common-password

password    requisite           pam_cracklib.so retry=3 minlen=8 difok=3

可以将各种选项传递给pam_cracklib.so,在这种情况下,指定最小长度为 8,并要求从旧密码更改 3 个字符。请参阅http://linux.die.net/man/8/pam_cracklib以获得每个可用选项的详细列表。

要将某项策略限制为特定用户组,可以使用模块pam_succeed_if.so,该模块仅在用户符合各种条件时才成功。例如,要强制执行上述密码策略,但让“sudo”组中的用户免于执行,请使用:

password    [success=1 default=ignore]  pam_succeed_if.so user ingroup sudo
password    requisite           pam_cracklib.so retry=3 minlen=8 difok=3

这告诉 PAM 检查用户是否与组“sudo”匹配,如果成功则跳过下一个模块。否则,继续下一个模块,该模块强制执行密码策略。

但是,如果使用带有选项的 PAM 模块(use_authtok例如安装了 pam_cracklib.so 的默认 Ubuntupam_unix.so配置),则此方法将无法正常工作。由于pam_unix.so依赖于先前设置当前用户密码和所需密码的模块,因此如果模块pam_succeed_if.so成功,passwd则将出现错误passwd: Authentication token manipulation error。我解决这个问题的方法是使用第二pam_unix.so行:

password    [success=2 default=ignore]  pam_succeed_if.so user ingroup sudo
password    requisite           pam_cracklib.so retry=3 minlen=8 difok=3
password    [success=2 default=ignore]  pam_unix.so obscure use_authtok try_first_pass sha512
password    [success=1 default=ignore]  pam_unix.so obscure sha512

在此示例中,如果用户属于“sudo”组,则控制权将跳过 2 个模块,直到最后pam_unix.so一行(不包括)use_authtok。但是,如果失败,控制权将传递给pam_cracklib.so,然后传递给依赖项pam_unix.so

相关内容