我知道如何通过向/etc/profile
.但只有登录成功后才会执行。我希望即使登录失败也能执行操作。例如运行一个脚本script.sh
。
我怀疑,这可以在 中设置pam
,但我不知道从哪里开始。
答案1
您可以使用pam_exec
模块和一些PAM
技巧来做到这一点。PAM
各个发行版的配置通常有很大不同,因此您必须了解您的配置并尝试调整它。
对于 Debian(使用 7.1 进行测试)编辑/etc/pam.d/common-auth
(为了清晰起见,省略了注释)
前
auth [success=1 default=ignore] pam_unix.so nullok_secure auth requisite pam_deny.so auth required pam_permit.so
后
auth [success=2 default=ignore] pam_unix.so nullok_secure auth optional pam_exec.so /common-auth-pam_exec auth requisite pam_deny.so auth required pam_permit.so
实际上发生的是,如果pam_unix.so
成功,它将跳过以下 2 个模块并跳转到pam_permit.so
始终会成功的模块。如果身份验证失败,PAM
首先继续执行我们的脚本,然后执行pam_deny
.该模块总是会失败,并且由于它设置了requisite
控制标志,因此不会执行其他模块。
为了完整起见,程序通过pam_exec
使用调用进程的真实用户 ID 运行而生成(setuid
选项使其使用有效用户 ID 运行),并且进程环境如下所示
PAM_SERVICE=login
PAM_RHOST=
PAM_USER=<username_here>
PAM_TYPE=auth
PAM_TTY=/dev/tty1