如何正确使用PAM在登录失败时执行脚本

如何正确使用PAM在登录失败时执行脚本

当我的 Arch Linux 系统上登录失败时,我尝试使用可插入身份验证模块来执行脚本。 Arch Linux 没有通用验证文件,我决定也不创建一个。相反,我发现 PAM 堆栈使用系统身份验证文件来实现某些功能,因此我决定对其进行编辑。

原来的system-auth文件如下

#%PAM-1.0

auth      required  pam_unix.so     try_first_pass nullok
auth      optional  pam_permit.so
auth      required  pam_env.so

account   required  pam_unix.so
account   optional  pam_permit.so
account   required  pam_time.so

password  required  pam_unix.so     try_first_pass nullok sha512 shadow
password  optional  pam_permit.so

session   required  pam_limits.so
session   required  pam_unix.so
session   optional  pam_permit.so


为了在登录失败时执行脚本,我更改了 auth 块,如下所示

auth      [success=1 default=ignore]  pam_unix.so     try_first_pass nullok
auth      optional  pam_exec.so <path to the script file>
auth      optional  pam_permit.so
auth      required  pam_env.so

account   required  pam_unix.so
account   optional  pam_permit.so
account   required  pam_time.so

password  required  pam_unix.so     try_first_pass nullok sha512 shadow
password  optional  pam_permit.so

session   required  pam_limits.so
session   required  pam_unix.so
session   optional  pam_permit.so

sudo 命令是在我的系统上的 PAM 堆栈中使用此系统身份验证文件的命令之一。但是,当我按上述方式编辑文件后尝试使用 sudo 命令时,即使输入错误的密码,sudo 命令也会执行。

如果有人能告诉我这里出了什么问题并帮助我纠正它,我将不胜感激

答案1

man pam.d,描述required

required
   [success=ok new_authtok_reqd=ok ignore=ignore default=bad]

使用default=ignore, 的失败pam_unix不再导致身份验证失败,因为您的脚本,然后pam_permit.so将被使用并且pam_permit.so始终成功。pam_unix应该还有default=bad

bad
   this action indicates that the return code should be thought of as
   indicative of the module failing. If this module is the first in
   the stack to fail, its status value will be used for that of the
   whole stack.

相关内容