Article original : Envoi d’un SMS lors de certains événements dans les logs
Adapté pour ntfy par retiolus, dernière mise à jour : 2023-10-07
Je me sers de ce script pour “fliquer” un peu l’utilisation de ma machine personnelle qui est sous Linux. Je reçois donc une notification 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 ntfy CLI.
Bien sûr, ce script est facilement adaptable pour envoyer une notification lors de l’apparition d’évènements de votre choix dans les logs.
Il est nécessaire d’avoir un serveur et un client ntfy.
Le script ci-dessous est vite bricolé, avec certaines choses codées en dur. Vous devrez sans doute l’adapter.
Je mets le script suivant dans /opt/scripts/logs-ntfy.sh (sans oublier de faire mon chmod +x):
#!/bin/bash
# Variables pour le token et l'URL de ntfy
TOKEN="tk_fasdasdauitgAS7SJKASGJsdasdw65jqb7"
URL_NTFY="ntfy.home.retiolus.net/DgjkGFKfyUgka"
# Journaliser le démarrage du script
logger "NOTIFY: Démarrage du script de notification pour les connexions."
# Fonction pour envoyer la notification
envoyer_notification() {
message="Pop!_OS: $(date +%Y-%m-%d_%H:%M) $*"
logger "NOTIFY: $message"
# Capturer l'image de la webcam, optionnel, seulement utile si ordinateur a une webcam
# chemin_image="/tmp/camera_image_$(date +%s).jpg"
# fswebcam -r 640x480 --no-banner $chemin_image
# Envoyer la notification
ntfy send --token $TOKEN --file=$chemin_image $URL_NTFY "$message"
# Supprimer l'image capturée
rm $chemin_image
}
# Expressions régulières pour surveiller le journal d'authentification
reg_ouverture="pam_unix.*session opened for user (root|utilisateur1|utilisateur2)"
reg_fermeture="pam_unix.*session closed for user (root|utilisateur1|utilisateur2)"
reg_erreur="pam_unix.*authentication failure.*user=(.+)"
# Surveiller auth.log en temps réel
tail -fn0 /var/log/auth.log | \
while read line ; do
if [[ $line =~ $reg_ouverture ]] ; then
envoyer_notification "Session ouverte par ${BASH_REMATCH[1]}"
fi
if [[ $line =~ $reg_fermeture ]] ; then
envoyer_notification "Session fermée par ${BASH_REMATCH[1]}"
fi
if [[ $line =~ $reg_erreur ]] ; then
envoyer_notification "Mot de passe incorrect pour l'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-ntfy.sh > /dev/null 2>&1 &
Et voilà le genre de notifications que je reçois :

Notes
Expressions régulières pour détecter certains événements (ouverture de session, fermeture de session, mot de passe incorrect) mais en ignorant les travaux CRON :
reg_open="pam_unix(?!.*cron:session).*session opened for user (root|utilisateur1|utilisateur2)"
reg_close="pam_unix(?!.*cron:session).*session closed for user (root|utilisateur1|utilisateur2)"
reg_failure="pam_unix.*authentication failure.*user=(.+)"