Outils pour utilisateurs

Outils du site


linux-sms

Envoi d'un SMS lors de certains événements dans les logs

Je me sers de ce script pour “fliquer” un peu l'utilisation de ma machine personnelle qui est sous Linux. Je reçois donc un SMS quand l'un des événements suivants se produit:

  • Ouverture de session d'un utilisateur.
  • Fermeture de session d'un utilisateur.
  • Échec d'ouverture de session (mauvais mot de passe)

C'est assez simple: On surveille le fichier /var/log/auth.log et quand certains événements sont détectés, on appelle l'API SMS FreeMobile.

Le script ci-dessous est vite bricolé, avec certaines choses codées en dur. Vous devrez sans doute l'adapter.

Je met le script suivant dans /opt/scripts/logs-sms.sh (sans oublier de faire mon chmod):

logs-sms.sh
#!/bin/bash
# Surveillance des logs, et envoi d'un SMS quand un utilisateur se connecte ou déconnecte.
 
logger "SMS: Démarrage script SMS connexions."
 
envoie_sms () {
   chaine="Asus: `date +%Y-%m-%d_%Hh%M` $*"
   logger "SMS: $chaine"
   curl -G -d user=UTILISATEUR -d pass=MOTDEPASSE --data-urlencode msg="$chaine" 'https://smsapi.free-mobile.fr/sendmsg'
}
 
# Expressions régulières pour détecter certains évènements (ouverture session, fermeture session, mauvais mot de passe)
reg_open="pam_unix.*session opened for user (utilisateur1|utilisateur2|utilisateur3|utilisateur4)"
reg_close="pam_unix.*session closed for user (utilisateur1|utilisateur2|utilisateur3|utilisateur4)"
reg_failure="pam_unix.*authentication failure.*user=(.+)"
 
tail -fn0 /var/log/auth.log | \
while read line ; do
   if [[ $line =~ $reg_open ]] ; then
       envoie_sms "Ouverture session ${BASH_REMATCH[1]}"
   fi
   if [[ $line =~ $reg_close ]] ; then
       envoie_sms "Fermeture session ${BASH_REMATCH[1]}"
   fi
   if [[ $line =~ $reg_failure ]] ; then
       envoie_sms "Mauvais mot de passe utilisateur ${BASH_REMATCH[1]}"
   fi
done

Puis j'ai ajouté la ligne suivante avant le exit 0 dans /etc/rc.local afin que ça démarre en même temps que la machine.

nohup /bin/bash /opt/scripts/logs-sms.sh > /dev/null 2>&1 &

Et voilà le genre de SMS que je reçois:

Notes:

  • Cela fonctionne aussi bien avec l'ouverture de sessions graphique (mdm/lightdm) que pour un su dans un terminal.
  • Je fais utilisateur1|utilisateur2|utilisateur3|utilisateur4 car je ne veux surveiller que les évènements pour ces utilisateurs.
  • Vous devrez sans doute adapter les expressions régulières dans les lignes reg_… en fonction de votre système.
  • J'ai mis en dur le nom de la machine (Asus:)
  • Vous devrez remplacer UTILISATEUR et MOTDEPASSE par vos propres identifiants SMS API FreeMobile (connectez-vous sur votre espace abonné FreeMobile et activez l'option pour les obtenir).
  • L'API SMS FreeMobile est gratuite et fonctionne sur tous les forfaits FreeMobile. Elle ne peut servir qu'à vous envoyer un SMS à vous-même, pas à d'autres personnes.
  • Le même genre de chose aurait pu être réalisé en modifiant la configuration de pam afin qu'il exécute le script sur certains événements d'authentification. L'avantage du script ci-dessus est qu'il peut être étendu à d'autres logs/événements que l'authentification.
  • J'aurais pu utiliser cron, mais je voulais du temps réel.
linux-sms.txt · Dernière modification: 2018/03/22 16:21 par sebsauvage