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.

Bien sûr ce script est facilement adaptable pour envoyer un SMS lors de l'apparition d'évènements de votre choix dans les logs.

Il est nécessaire d'avoir un abonnement mobile Free (Peu importe le forfait, cette option est disponible dans tous les forfaits Free Mobile).

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 +x):

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é le crontab afin qu'il soit lancé à chaque démarrage de la machine (sudo crontab -e):

@reboot 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. Notez qu'il ne s'agit pas des identifiants utilisés pour vous connecter sur votre compte mobile. Il s'agit d'identifiants séparés:
    • Connectez-vous sur votre espace abonné FreeMobile
    • Allez dans Gérer mon compte > Mes options
    • Activez l'option Notification par SMS.
    • Le petit "i" gris vous donne les détails (notemment utilisateur et mot de passe):
  • 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.

Pour envoyer un SMS en php:

<?php
file_get_contents("https://smsapi.free-mobile.fr/sendmsg?user=UTILISATEUR&pass=MOTDEPASSE&msg=".urlencode("Voici mon message"));
?>
linux-sms.txt · Dernière modification : 2023/11/15 08:05 de sebsauvage