Arch-Linux

登錄失敗時如何正確使用 PAM 執行腳本

  • March 2, 2017

當我的 Arch Linux 系統上的登錄失敗時,我正在嘗試使用 Pluggable Authentication Module 執行腳本。Arch Linux 沒有 common-auth 文件,我也決定不創建。相反,我發現 PAM 堆棧將 system-auth 文件用於某些功能,因此我決定對其進行編輯。

原來的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 堆棧中使用此 system-auth 文件的命令。但是,當我在上面編輯文件後嘗試使用 sudo 命令時,即使我輸入了錯誤的密碼,sudo 命令也會執行。

如果有人能告訴我這裡出了什麼問題並幫助我糾正它,我將不勝感激

man pam.d, 的描述required:

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

使用default=ignore,來自pam_unixis 的失敗不再導致身份驗證失敗,因為您的腳本,然後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.

引用自:https://unix.stackexchange.com/questions/348038