====== 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//):
#!/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:
{{ :linux:linux-sms.png?direct&400 |}}
**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 [[https://mobile.free.fr/moncompte/|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):
| {{ :linux:linux-sms-free-1.png |}} | {{:linux:linux-sms-free-2.png |}} |
* 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: