最近,我一直在尝试创建一个 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 的文件而不是脚本。)
答案1
首先,如果文件丢失,并不意味着您不应该创建它们。 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
passwd
基本上,这会尝试根据基本 UNIX 机制(和)进行身份验证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 的工作原理以及在何处精确实现逻辑。
另一件事:在运行脚本之前,您可能需要确保您的相机能够胜任该任务。确保内核视频模块已加载,等等。