在登錄嘗試失敗時執行腳本?
最近,我一直在嘗試創建一個 Bash 腳本來在註冊失敗嘗試登錄時擷取網路攝像頭照片。首先,我找到了 2 篇與此相關的指南(最後的連結),他們解釋瞭如何創建腳本等。直到我注意到我的系統(Archlinux,全新安裝)沒有 PAM 的常見 -授權文件。我檢查了整個
/etc/pam.d/
目錄,但仍然找不到文件或具有相同內容的文件。到目前為止我的腳本:
#!/bin/bash # Let's watch our thief's face n.n ts=$(date +"%m_%d_%Y_%H_%M_%S") ffmpeg -f video4linux2 -s vga -i /dev/video0 -vframes 3 /home/haoa2/Logins-Fail/login-$ts.jpg exit 0
我的
/etc/pam.d/
目錄內容:
chage
,chfn
,chgpasswd
,chpasswd
,chsh
,groupadd
,groupdel
,groupmems
,groupmod
,login
,newusers
,other
,passwd
,polkit-1
,rlogin
,rsh
,shadow
,slim
, ,su
,sudo
,su-l
,system-auth
,systemd-user
,system-local-login
,system-login
,system-remote-login
,system-services
,useradd
,userdel
和usermod
(注意:我知道那裡有一個相關的答案,但這個問題更多的是關於 PAM 的文件而不是腳本。)
首先,如果文件失去,並不意味著您不應該創建它們。Debian 上可用的
common-*
文件只是正常的 PAM 配置文件,但是,它們包含在需要它們的任何其他文件中。例如,在 Debian 上,在su
文件末尾,您可能會發現:@include common-auth @include common-account @include common-session
由於您沒有這些文件,我相信這些包含指令不存在。由於 Arch 的理念是提供由使用者自定義的最小分發,您可以完美地創建這些
common-*
文件並將它們包含在預期使用它們的那些文件中。但是,在您的情況下,我寧願建議您針對登錄時使用的 PAM 配置文件(您要實現的不是操作
common
,因為它僅auth
在登錄時針對原語)。查看/etc/pam.d/login
並修改它以包含您的新 PAM 規則。就我而言,我的
login
文件以 結尾@include common-auth
,其中包括以下鏈。您應該在login
文件末尾找到類似的內容。auth [success=1 default=ignore] pam_unix.so nullok_secure # here's the fallback if no module succeeds auth requisite pam_deny.so auth required pam_permit.so auth optional pam_cap.so
基本上,這會嘗試根據基本的 UNIX 機制(
passwd
和shadow
)進行身份驗證。如果成功,則success=1
讓 PAM 跳轉下一條規則。在這種情況下,pam_deny
將被忽略,我們將pam_permit.so
自動到達,允許使用者訪問。另一方面,如果
pam_unix
失敗,則不會跳轉,使用者將被直接發送到pam_deny
. 由於這是一項必要規則,因此無論接下來發生什麼,使用者都將被拒絕訪問。最後,
pam_cap
是一個可選規則,它並沒有真正參與登錄過程。但是,無論發生什麼,它都會被執行(這對於日誌記錄可能很方便)。在你的情況下,你可以做類似的事情……# Jump two rules if login succeeds. auth [success=2 default=ignore] pam_unix.so nullok_secure auth optional pam_exec.so [your cam script] auth requisite pam_deny.so # User gets here if authentication is successful. No denying, no cam module. auth required pam_permit.so auth optional pam_cap.so
如果您不熟悉 PAM 內部結構,我會推薦這個頁面,我在設置 PAM 邏輯時發現它對我自己很有幫助。瀏覽此頁面肯定會幫助您了解 PAM 的工作原理,以及在何處精確實現您的邏輯。
另一件事:您可能希望在執行腳本之前確保您的相機能夠勝任任務。確保核心影片模組已載入,等等。