在登录尝试失败时运行脚本?

Hum*_*ody 5 security bash pam files

最近,我一直在尝试创建一个 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
Run Code Online (Sandbox Code Playgroud)

我的/etc/pam.d/目录内容:

chagechfnchgpasswdchpasswdchshgroupaddgroupdelgroupmemsgroupmodloginnewusersotherpasswdpolkit-1rloginrshshadowslimsusudosu-lsystem-authsystemd-usersystem-local-loginsystem-loginsystem-remote-loginsystem-servicesuseradduserdel,和 usermod

原始答案和类似教程的答案

(注意:我知道那里有一个相关的答案,但这个问题更多地是关于 PAM 的文件而不是脚本。)

Joh*_*ith 3

首先,如果文件丢失,并不意味着您不应该创建它们。Debian 上可用的文件common-*只是常规的 PAM 配置文件,但是,它们包含在需要它们的任何其他文件中。例如,在 Debian 上,在文件末尾su,您可能会发现:

@include common-auth
@include common-account
@include common-session
Run Code Online (Sandbox Code Playgroud)

由于您没有这些文件,我相信这些包含指令不存在。由于 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
Run Code Online (Sandbox Code Playgroud)

基本上,这会尝试根据基本 UNIX 机制(passwdshadow)进行身份验证。如果成功,则success=1PAM 会跳转到下一条规则。在这种情况下,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
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉 PAM 内部结构,我会推荐此页面,当我设置 PAM 逻辑时,我发现它非常有帮助。浏览此页面肯定会帮助您了解 PAM 的工作原理以及在何处精确实现逻辑。

另一件事:在运行脚本之前,您可能需要确保您的相机能够胜任该任务。确保内核视频模块已加载,等等。