Executar script na tentativa de login com falha?

5

Ultimamente, tenho tentado criar um script Bash para capturar uma foto de webcam quando uma tentativa de login falhar é registrada. Primeiro de tudo, eu encontrei 2 guias relacionados a isso (links no final), eles explicaram como criar script, etc. Ele estava indo muito bem até que eu notei que o meu sistema (instalação do Archlinux, Fresh) não tem o PAM em comum. arquivo de autenticação. Eu verifiquei todo o diretório /etc/pam.d/ e ainda não consegui encontrar o arquivo ou um arquivo com o mesmo conteúdo.

Meu script até agora:

#!/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

Meu conteúdo do diretório /etc/pam.d/ :

chage , %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, %código%, chfn e chgpasswd

A resposta original e um tutorial-like answer .

(Nota: Eu sei que há uma resposta relacionada por aí, mas essa opção é mais sobre o arquivo do PAM, em vez do Scripting.)

    
por HumbertoWoody 29.08.2014 / 20:38

1 resposta

3

Primeiro de tudo , se os arquivos estiverem faltando, isso não significa que você não deve criá-los. Os arquivos common-* disponíveis no Debian são apenas arquivos de configuração normais do PAM, no entanto, eles são incluídos em qualquer outro arquivo que os exija. Por exemplo, no Debian, no final do arquivo su , você pode encontrar:

@include common-auth
@include common-account
@include common-session

Como você não tem esses arquivos, acredito que essas diretivas include não estejam presentes. Como a filosofia da Arch é fornecer uma distribuição mínima, personalizável pelo usuário, você pode criar perfeitamente esses arquivos common-* e incluí-los naqueles que devem usá-los.

No entanto, no seu caso, prefiro recomendar que você segmente o arquivo de configuração do PAM usado no login (o que você está tentando alcançar é não a common operation , uma vez que ele somente segmenta a% primitiva auth , no momento do login). Dê uma olhada em /etc/pam.d/login e modifique-a para incluir sua nova regra do PAM.

No meu caso, meu arquivo login termina com @include common-auth , que inclui a seguinte cadeia. Você deve encontrar algo semelhante no final do seu arquivo 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

Basicamente, isso tenta autenticar contra mecanismos básicos do UNIX ( passwd e shadow ). Se for bem-sucedido, success=1 terá PAM pulando a próxima regra. Nesse caso, pam_deny será ignorado e alcançaremos pam_permit.so automaticamente, permitindo o acesso do usuário.

Por outro lado, se pam_unix falhar, não haverá saltos e o usuário será enviado diretamente para pam_deny . Como é uma regra necessária, o usuário terá acesso negado, independentemente do que acontecer a seguir.

Por fim, pam_cap é uma regra opcional que não está realmente envolvida no processo de login. No entanto, será executado o que acontecer (o que pode ser útil para o registro). No seu caso, você poderia fazer algo como ...

# 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

Se você não estiver familiarizado com os internos do PAM, recomendamos esta página , que Eu mesmo achei muito útil quando configurei minha lógica PAM. Passar por esta página definitivamente ajudará você a entender como o PAM funciona e onde implementar sua lógica com precisão.

Outra coisa: você pode querer ter certeza de que sua câmera está pronta para a tarefa antes de executar o script. Certifique-se de que o módulo de vídeo do kernel esteja carregado e assim por diante.

    
por 29.08.2014 / 20:55