Links
Tag cloud
Picture wall
Daily
RSS Feed
  • RSS Feed
  • Daily Feed
  • Weekly Feed
  • Monthly Feed
Filters

Links per page

  • 20 links
  • 50 links
  • 100 links

Filters

Untagged links
linux-sms [Wiki de sebsauvage.net] http://sebsauvage.net/wiki/doku.php?id=linux-sms
Thu Mar 22 18:45:12 2018 archive.org

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 &

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 [[https://mobile.free.fr/moncompte/|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 script bash sms event log
1578 links, including 7 private
Shaarli - The personal, minimalist, super-fast, database free, bookmarking service by the Shaarli community - Theme by kalvn