Sur un système Debian GNU/Linux, j'ai travaillé sur une solution permettant de notifier les utilisateurs par email lorsqu'un disque dur externe USB était connecté. L'objectif est d'informer l'administrateur système que le disque USB est connecté avec succès.
Voici un exemple avec ssmtp qui enverra des e-mails au relais mail.std.rocks sur le port SSL 465.
root@host:~# apt update && apt install msmtp
account STD
#Mail Server :
host mail.std.rocks
port 465
from backup@std.rocks
#LOGIN / PASSWORD
user backup@std.rocks
password MyWeakPassword
auth on
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
tls_certcheck off
logfile /var/log/msmtp.log
account default : STD
udev est un gestionnaire de périphériques pour les systèmes Linux qui gère de manière dynamique les périphériques et leurs nœuds de périphériques correspondants dans le système. Il signifie "userspace device" et fonctionne dans l'espace utilisateur plutôt que dans l'espace du noyau. Il nous permettra d'exécuter un script lorsqu'un périphérique de disque USB sera connecté.
Note : supposons que le disque que nous souhaitons surveiller est /dev/sdaroot@host:~# udevadm info --attribute-walk --path=$(udevadm info --query=path --name=/dev/sda)
ACTION=="add", SUBSYSTEM=="block", SUBSYSTEMS=="usb", RUN{program}+="/usr/local/sbin/mail_usb_disk.sh"
root@host:~# udevadm control --reload
root@host:~# touch /usr/local/sbin/mail_usb_disk.sh && chmod +x /usr/local/sbin/mail_usb_disk.sh
#! /bin/sh
MAIL_ADDRESS="backup@std.rocks"
DATE=$(/bin/date "+%Y-%m-%dT%H:%M:%S")
UDEV_TIME="$(/bin/date --date="$(stat /tmp/udev_time | grep Modif | sed 's/Modif.*: //')" +%s)"
touch /tmp/udev_time
CUR_TIME="$(/bin/date +%s)"
#difference entre la date actuelle et la date de création du fichier /tmp/udev_time
TIME_DIFF=$(( (CUR_TIME - UDEV_TIME) ))
mailto () {
LANG=C
rm -f /tmp/mail_usb_disk.header
echo "From: $MAIL_ADDRESS" >> /tmp/mail_usb_disk.header
echo "To: $MAIL_ADDRESS" >> /tmp/mail_usb_disk.header
echo "Date: "`/bin/date -R` >> /tmp/mail_usb_disk.header
echo "Subject: Disk has been plugged in" >> /tmp/mail_usb_disk.header
echo "Content-type: text/plain; charset=utf-8" >> /tmp/mail_usb_disk.header
echo "" >> /tmp/mail_usb_disk.header
echo "Disk has been plugged in" >> /tmp/mail_usb_disk.header
cat /tmp/mail_usb_disk.header | /usr/bin/msmtp -f "$MAIL_ADDRESS" "$MAIL_CLIENT"
rm -f /tmp/mail_usb_disk.header
}
#Envoyer le mail si la différence de temps est supérieure à 10 secondes
if [ "$TIME_DIFF" -gt 10 ]; then
mailto
fi
Contact :