On a Debian GNU/Linux system, I have worked on a solution to notify users via email when a USB hard disk drive is connected. The objective is to inform the system administrator that the USB drive is successfully connected.
Example here with ssmtp which will send emails to mail.std.rocks relay on the 465 SSL port.
root@host:~# apt update && apt install ssmtp
#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
#root=postmaster
# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=mail.std.rocks:465
# Where will the mail seem to come from?
#rewriteDomain=
# The full hostname
hostname=backup.std.local
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
#FromLineOverride=YES
root=root@backup.std.local
rewriteDomain=std.rocks
TLS_CA_FILE=/etc/ssl/certs/ca-certificates.crt
UseTLS=Yes
UseSTARTTLS=No
FromLineOverride=yes
udev is a device manager for GNU/Linux systems that dynamically manages devices and their corresponding device nodes in the system. It stands for "userspace device" and operates in the userspace rather than the kernel space. It will allow us to execute a script when a USB disk device will be plugged in.
Note: let's say the disk we want to monitor is /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)" #get /tmp/udev_time creation time
touch /tmp/udev_time
CUR_TIME="$(/bin/date +%s)"
#difference between current time and /tmp/udev_time creation time
TIME_DIFF=$(( (CUR_TIME - UDEV_TIME) ))
#Function
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/sbin/sendmail -f "$MAIL_ADDRESS" "$MAIL_CLIENT"
rm -f /tmp/mail_usb_disk.header
}
#Send email if time difference is greater than 10s
if [ "$TIME_DIFF" -gt 10 ]; then
mailto
fi
Contact :