Explication
Une façon de lancer une commande lorsqu'un mot de passe incorrect est saisi est d'utiliser le journal des autorisations.
Journal des autorisations
Le journal des autorisations permet de suivre l'utilisation des systèmes d'autorisation, de la mécanismes d'autorisation des utilisateurs qui demandent un mot de passe, comme le système comme le système Pluggable Authentication Module (PAM), la commande sudo, les connexions à distance à sshd et ainsi de suite. Le fichier journal des autorisations peut être accessible à l'adresse /var/log/auth.log
. Ce journal est utile pour connaître les les connexions des utilisateurs et l'utilisation de la commande sudo.
Plus d'informations ici sur LinuxLogFiles
En cas d'échec d'une tentative de connexion, un enregistrement sera ajouté au fichier /var/log/auth.log
et la dernière ligne contiendra quelque chose comme :
pam_unix(gdm-password:auth): authentication failure;
Si vous surveillez constamment la modification du fichier et vérifiez si la dernière ligne contient le mot-clé échec avec par exemple grep failure
vous savez alors qu'une tentative de connexion vient d'échouer et vous pouvez exécuter la commande que vous voulez en fonction de cette action.
Solution
Changement echo "failed login"
dans le scripts ci-dessous à la commande que vous souhaitez exécuter en cas d'échec de la connexion.
Vous pouvez surveiller la dernière ligne de la /var/log/auth.log
avec un script comme ceci :
#!/bin/bash
while true
do
sleep 1
if (( $(tail -1 /var/log/auth.log | grep failure | wc -l) == 1))
then
echo "failed login"
# Your command here
fi
done
Ou encore mieux, vous pouvez installer inotify-tools
et utiliser inotifywait
pour surveiller le fichier à la place de l'option sleep 1
et le script sera comme ceci :
#!/bin/bash
while inotifywait -q -e modify /var/log/auth.log >/dev/null
do
if (( $(tail -1 /var/log/auth.log | grep failure | wc -l) == 1))
then
echo "failed login"
# Your command here
fi
done
inotify-tools
peut être installé avec la commande suivante :
sudo apt install inotify-tools
Mise en œuvre
Pour exécuter cette solution en tant que service système, veuillez suivre les étapes suivantes :
-
Copiez et collez le code script ci-dessus ( sans echo "failed login"
comme j'ai ajouté cette ligne à des fins de débogage uniquement ) dans un fichier dans votre répertoire personnel et nommez-le TakePicture.sh
et enregistrez le fichier.
-
Créer le fichier Shell Shell. exécutable en exécutant la commande suivante dans le terminal :
chmod +x ~/TakePicture.sh
-
Créer et modifier un service systemd personnalisé pour exécuter le Shell Shell au démarrage en exécutant la commande suivante dans le terminal :
sudo nano /etc/systemd/system/TakePicture.service
-
Copier et coller le code suivant dans l'éditeur, remplacer USERNAME
avec votre nom d'utilisateur et l'enregistrer en appuyant sur Ctrl + X puis appuyez sur Y puis appuyez sur Enter :
[Unit]
Description=Take Picture
[Service]
Type=oneshot
ExecStart=/home/USERNAME/TakePicture.sh
[Install]
WantedBy=multi-user.target
-
Démarrez le service en exécutant la commande suivante dans le terminal :
sudo systemctl start TakePicture
-
Activez le service en exécutant la commande suivante dans le terminal :
sudo systemctl enable TakePicture
Avis :
Le journal des autorisations contiendra toutes sortes d'échecs de connexion ou d'authentification (par exemple, GDM, SSH, authentification de l'utilisateur du terminal, sudo, ... etc.)
Si votre objectif est juste d'activer le script lorsqu'une connexion physique réelle se produit (c'est-à-dire que quelqu'un est assis devant votre ordinateur, utilise votre clavier et regarde votre écran), alors vous devez modifier l'instruction if ci-dessus pour qu'elle soit comme ceci :
if (( $(tail -1 /var/log/auth.log | grep gdm | grep failure | wc -l) == 1))
si GDM est votre gestionnaire de connexion. De cette façon, le script ne sera déclenché que si un échec réel de connexion physique se produit.