头图

在Ubuntu 22.04中出现 PAM unable to dlopen(pam_tally2.so) 的错误,主要是因为Ubuntu 22.04中已不再支持 pam_tally2 模块。这个模块以前用于跟踪和阻止多次登录失败的尝试,而在新版Ubuntu中,pam_tally2 已被更为现代的 pam_faillock 模块所取代。因此,解决这个问题的核心步骤就是将所有引用 pam_tally2 的地方替换为 pam_faillock

以下是详细的解决步骤和每一步的解释:

步骤 1:查找引用 pam_tally2 的配置文件

首先,我们需要找到哪些文件还在引用已被弃用的 pam_tally2 模块。通常,这些配置文件位于 /etc/pam.d/ 目录中。你可以使用以下命令来查找所有包含 pam_tally2 的文件:

grep -r pam_tally2 /etc/pam.d/

命令解释:

  • grep:用于在文件中搜索特定的文本。
  • -r:表示递归搜索,即在指定的目录及其子目录中查找。
  • pam_tally2:要搜索的关键字。
  • /etc/pam.d/:搜索的目标目录,该目录下包含PAM配置文件。

输出:
此命令会返回所有包含 pam_tally2 字符串的文件列表。接下来,你需要逐个修改这些文件。

步骤 2:修改 /etc/pam.d/common-auth 文件

/etc/pam.d/common-auth 文件中,你可能会发现一行类似于:

auth required pam_tally2.so deny=5 onerr=fail unlock_time=1800

将其替换为以下几行代码:

auth required pam_faillock.so preauth deny=5 unlock_time=1800
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=1800
auth optional pam_faillock.so authsucc deny=5 unlock_time=1800

代码解释:

  • auth required pam_faillock.so preauth deny=5 unlock_time=1800:该行表示在用户进行身份验证之前,pam_faillock 模块会跟踪失败的登录尝试,并在失败达到5次后阻止登录,且在1800秒后解锁账户。
  • auth [success=1 default=bad] pam_unix.sopam_unix 是用于处理标准UNIX身份验证的模块。如果身份验证成功,跳过下一行;否则继续执行。
  • auth [default=die] pam_faillock.so authfail deny=5 unlock_time=1800:如果身份验证失败,则执行 pam_faillock 模块来跟踪失败记录。
  • auth optional pam_faillock.so authsucc deny=5 unlock_time=1800:这是可选配置,允许在身份验证成功时,清除任何失败记录。

步骤 3:修改 /etc/pam.d/common-password 文件

在这个文件中,你可能会发现以下行:

password required pam_tally2.so

将其替换为:

password required pam_faillock.so

代码解释:

pam_faillock.so 模块将替换原来的 pam_tally2 来处理密码验证和失败登录的计数。

步骤 4:修改 /etc/pam.d/common-account 文件

/etc/pam.d/common-account 文件中,你可能会找到如下行:

account required pam_tally2.so

将其替换为:

account required pam_faillock.so

代码解释:

这将确保用户账户的管理和安全性设置由 pam_faillock 模块处理,而不是已经弃用的 pam_tally2

步骤 5:重启或重新加载PAM模块

在完成所有配置修改后,建议重启系统或重新加载PAM模块,以确保更改生效:

sudo systemctl restart sshd

代码解释:

  • sudo:以超级用户权限执行命令。
  • systemctl restart sshd:重新启动SSH守护进程,确保PAM配置生效。

常见问题与解决方法:

  1. pam_faillock 的配置不生效:

    • 检查是否已正确配置并保存 /etc/pam.d 中的所有相关文件。尤其是在修改 /etc/pam.d/common-auth/etc/pam.d/common-password/etc/pam.d/common-account 文件时,确保语法正确。
    • 可以通过以下命令测试配置文件的语法是否正确:

      sudo pam-auth-update
  2. 系统登录锁定时间不符合预期:

    • 如果发现账户解锁时间与设置的 unlock_time 参数不符,可能是由于其他 PAM 模块或安全策略与 pam_faillock 配置冲突。此时,建议检查 /etc/security/faillock.conf 文件,确保其配置与预期一致。
  3. 无法登录或遇到其他PAM错误:

    • 如果在修改过程中遇到PAM错误,导致无法登录,可以通过进入单用户模式或使用Live CD引导系统,然后手动恢复之前的配置文件。

PAM模块概述与工作原理

PAM(Pluggable Authentication Modules,可插拔身份验证模块)是Linux系统中用于管理用户登录认证的模块。它允许系统管理员在不修改应用程序的情况下更改认证机制。pam_tally2pam_faillock 都是PAM框架的一部分,分别用于跟踪登录失败次数,并采取相应的安全措施。

模块功能被替代原因
pam_tally2跟踪登录失败次数,锁定用户账户已弃用,功能过时
pam_faillock提供更多配置选项和安全增强现代化替代方案,支持更多功能

PAM原理解释表

组件描述
pam_faillock.so preauth预处理登录请求,跟踪失败次数并提前阻止。
pam_faillock.so authfail当身份验证失败时,更新失败计数并采取措施。
pam_faillock.so authsucc当身份验证成功时,清除失败计数。
pam_unix.so处理标准UNIX身份验证逻辑。

通过这种模块化的设计,PAM系统可以根据需求灵活调整认证策略,从而提高系统的安全性和管理灵活性。

总结

要解决Ubuntu 22.04中的 PAM unable to dlopen(pam_tally2.so) 错误,主要是要将已弃用的 pam_tally2 模块替换为 pam_faillock。这一过程涉及到修改 /etc/pam.d 目录下的多个配置文件,并确保配置正确无误。通过 pam_faillock 模块,你不仅可以实现类似 pam_tally2 的功能,还可以获得更多现代化的安全特性,从而更好地保护你的系统免受多次登录失败的攻击。

关键在于理解每一段配置的作用,并在修改时保持系统整体认证机制的平衡。在操作完成后,测试配置的正确性非常重要,以确保系统能够如预期工作。


蓝易云
25 声望3 粉丝