当我的 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.