Linux – Prendre une photo quand le mot de passe est incorrect

Si toi aussi  fais partis des gens qui laissent leurs Pc au travail et tu crains que quelqu’un essaye de se connecter sur ta session à ton absence en utilisant des différents mot de passe, la solution est donc de mettre en place un « process » qui automatise la capture d’une photo de ce rat :p à chaque fois il saisit un mot de passe incorrect.

Dans cet article, Je vais te montrer comment faire tout le process. il nous faudrait donc

  • Un Pc avec une distribution linux installée (Ubuntu 17.10 utilisée dans ce tuto)
  • Une webcam (intégrée ou externe)

Commençons par expliquer le process qui se base sur l’utilisation des modules d’authentification enfichables dites Pluggable Authentication Modules ou PAM pour gérer l’authentification et un software ou une ligne de commande qui va assurer la communication avec la webcam afin de prendre des photos.

Entrons dans les détails , on cherche alors le périphérique (device comme nommé sous Linux) des photos qui est bien évidement la webcam dans notre cas et pour cela on exécute la commande suivante pour lister tous les devices videos sous le dossier /dev de notre système:

ls -l /dev/video*

Si la webcam installée sur ton Pc (externe) est branché par USB , tu peux également exécuter la commande:

lsusb

Après avoir identifié le périphérique vidéo (webcam) qui est /dev/video0 dans mon cas, on va passer à choisir le logiciel qui va interagir avec la webcam qui sont nombreux tel que fswebcam, ffmpeg, MPlayer… Dans ce tuto je vais utiliser ffmpeg (tu peux utiliser tout ce que tu veux) de la manière suivante

ffmpeg -i /dev/video0 NomDeFichier.jpg

NB : Je te conseille de créer un répertoire qui va stocker les photos ( moi je l’ai créé sous mon home (c’est un choix) )

mkdir /home/TonUserName/Captures

 

On passe maintenant à la création d’un script Shell qui va être appelé par PAM à chaque tentative échouée , tu peux le créer où tu veux , moi je vais le créer sous le même dossier créé précédemment mais ce n’est pas vraiment la bonne pratique , de préférence de le créer sous le répertoire des binaires locales ( /usr/local/bin/NomDeScript )

touch /home/meherjebali/Captures/CamCapture

Utilise ton éditeur préféré (vi , vim , nano , gedit…) pour pour modifier le script

 

Voici le script que j’ai utilisé ( tu peux modifier selon tes préférences)

#!/bin/bash
NomFichier=`date +%F_%H:%M:%S`
ffmpeg -f video4linux2 -s vga -i /dev/video0 -vframes 1 /home/meherjebali/Captures/$NomFichier.jpg
exit 0

Explication :

  • NomFichier: c’est un variable qui va recevoir la valeur de la date est l’heure au moment de la capture sous la forme 2018-10-21_00:35:53 qui va être utilisé comme le nom de la photo.
  • ffmpeg: c’est le logiciel qu’on utilise pour interagir avec la webcam
    • -f : Pour forcer le format
    • -s : (size) détermine la taille de la photo
      • vga : (640×480) la taille de la photo , tu peux choisir une autre taille parmi les tailles supportées par ta webcam
        tu peux utiliser la commande suivante pour avoir toutes les résolutions de ta webcam

        ffmpeg -f video4linux2 -list_formats all -i /dev/video0
    • -vframes : le nombre de frame à capturer (vu qu’on a utilisé une API vidéo)
      • 1 : on a besoin d’une seule photo donc « Un » (1)
    • /home/meherjebali/Captures/ : c’est l’emplacement de l’enregistrement de la capture
      • $NomFichier.jpg : contient la valeur (date) du variable NomFichier + concaténation « .jpg »
    • exit 0:  c’est important de quitter avec un retour 0 pour arrêter le script.

NB : Le script doit avoir la permission d’exécution (x)

chmod +x /home/meherjebali/Captures/CamCapture

On peut donc lancer le script pour le tester

/home/meherjebali/Captures/CamCapture

et voici les résultats :

Les captures sont noires par ce que je mets du scotch sur ma webcam 😀 

« The best yet to come » , on passe maintenant à la partie la plus importante qui concerne la configuration de PAM je vais donc passer en root

sudo -i

On va éditer le fichier de configuration d’authentification du module PAM qui est /etc/pam.d/common-auth avec notre éditer préféré (moi je préfère VIM)

vim /etc/pam.d/common-auth

Cherche la ligne qui contient le module  pam_unix.so et change de success = 1 à 2 pour sauter notre script en cas de success.

auth    [success=2 default=ignore]      pam_unix.so nullok_secure

Explication :

Le module auth vérifie le retour de l’authentification en cas de  success il va ignorer la « 1 » ligne suivante qui est par défaut le module deny. Le default gère tous les autres retours du module

  • Pam_unix.so : c’est le module qui gère l’authentification standard comme configuré sous le fichier « /etc/nsswitch.conf » Cela signifie simplement vérifier les fichiers /etc/passwd et /etc/shadow
  • nullok_secure: argument pour dire que les comptes sans mot de passe sont acceptés

On ajoute après/sous cette ligne et avant la ligne du module pam_deny la ligne suivante

auth    [default=ignore]     pam_exec.so seteuid /Emplacement/de/ton/script
  • Pam_exec.so :  c’est le module qui permet d’exécuter un programme externe qui est dans notre cas le script qu’on a créé.

et Voilà le résultat final :

On enregistre le script et c’est terminé , pas besoin de redémarrer quoi que ce soit .

On lance donc un nouveau terminal pour tester et essaye de « switcher » l’utilisateur et on tape un mot de passe incorrecte et n’oublie pas de « smile to the camera and say cheese 😀  »

su AutreUser

Pour Info ce script fonctionne à la fois sur les sessions SSH et aussi sur les gestionnaire d’authentification des environnement des bureaux (KDE,Unity,Gnome…..)