我想知道卸载使用apt install安装的PAM模块的正确过程。
我在服务器(debian 9,运行ssh,imap)上安装了“libpam- https://packages.debian.org/stable/admin/libpam-shield”来阻止多次身份验证失败的IP。(我曾使用apt install libpam-shield从Debian稳定存储库安装它。)后来,我决定不使用它,所以我使用apt remove libpam-shield卸载它。但是,即使在此之后,文件/etc/pam.d/common-auth也包含一个未注释的行auth optional pam_shield.so,这将导致/var/log/auth.log中重复的警告行:
PAM unable to dlopen(pam_shield.so): /lib/security/pam_shield.so: cannot open shared object file: No such file or directory
PAM adding faulty module: pam_shield.so因此,我从上面提到的common-auth中注释掉了行,但这开始导致imap和ssh身份验证尝试的身份验证错误。
grep shield -r /etc/pam*没有显示提到pam_shield的任何其他位置。我应该在PAM配置文件中做哪些其他更改,以使未找到pam_shield.so的错误消失?卸载libpam-shield后,重新启动了服务器。
补充:这是来自/etc/pam.d/common-auth的行。
auth [success=3 default=ignore] pam_unix.so nullok_secure
auth optional pam_shield.so
auth [success=1 default=ignore] pam_ldap.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so发布于 2019-05-20 18:41:04
看看PAM文档:
对于更复杂的语法,有效的控制值有以下形式:
actionN可以采取下列形式之一:
N(无符号整数)等高线等价于ok,其副作用是跳过堆栈中的下一个N个模块。请注意,不允许N等于0(在这种情况下,它将与ok相同)。
所以success=n跳过了n行。因此,如果删除auth optional pam_shield.so行,则必须跳过一行,然后将第一行转换为:
auth [success=2 default=ignore] pam_unix.so nullok_secure目标是在成功或下一个方法上跳到pam_permit.so (除了pam_shield,我不知道它是否应该被放在pam_ldap之后,以获得良好的效果,但我对此还不太了解)。
但是实际上,所有这些都应该通过使用(从包中)命令pam-auth-update来处理自动重新配置来自动管理包删除。也许在拆包过程中出了点问题。
在我所有安装和卸载libpam-shield和libpam-ldap的尝试中,配置总是按预期的顺序处理(相关的行在程序包被移除时消失),所以我很困惑为什么会出现问题。
我建议:
pam-auth-update。它不应该再提到"PAM屏蔽:阻止is尝试密码猜测“在提供列表中,否则仍然是错误的。如果还提到它,您可以选择禁用它,所以无论如何都会重新构建正确的配置。更新:也如手册页所解释的那样:
脚本尽一切努力尊重对/etc/pam.d/pam.d*的本地更改。对模块选项列表的本地修改将被保留,并且在堆栈的托管部分中添加模块将导致pam-auth更新将配置文件视为本地修改的,除非给-force选项,否则不会对配置文件进行进一步的更改。
如果手动更改与/etc/pam.d/common-auth中有关它的注释发生冲突,那么pam-auth更新可能会避免更改它。仍然可以使用以下方法将其重置为默认包处理:
pam-auth-update --forcehttps://unix.stackexchange.com/questions/519918
复制相似问题