En muchas ocasiones compañeros del trabajo conectan usbs en nuestro equipo, normalmente en estos dispositivos hay información sensible que puede ser muy suculenta, private keys RSA, ficheros de passwords guardados entre otros.
La idea de este post es crear un sistema de auto-backup de los usbs insertados en nuestro equipo.
Para que toda la magia sea posible hay que seguir varios pasos:
- Crear la regla UDEV para ejecutar el script de backup en cuanto se detecte un usb
- Realizar el backup
- Notificarnos la finalización del backup
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", RUN+="/usr/bin/UsbDumper.sh"
El script de backup será:
#! /bin/bash
USER="XXXX"
DATE=$(date +%d-%m-%Y)
echo -e "--------------- $DATE --------------" >> /tmp/usb_dumper
echo -e "ID: $(id)" >> /tmp/usb_dumper
echo -e "-- Making necesary directories for device: $DEVNAME" >> /tmp/usb_dumper
DRIVE=$(echo $DEVNAME|awk -F "/" '{print$3}')
echo -e "DRIVE: $DRIVE" >> /tmp/usb_dumper
for PARTITION in $(cat /proc/partitions |grep -E $DRIVE'[0-9]'|awk '{print$4}'); do
echo -e "PARTITION: $PARTITION" >> /tmp/usb_dumper
mkdir -p /var/UsbDumper/$ID_SERIAL_SHORT'_'$DATE/$PARTITION 2>/dev/null
mkdir -p /mnt/$ID_SERIAL_SHORT 2>/dev/null
mount /dev/$PARTITION /mnt/$ID_SERIAL_SHORT
echo -e "-- Copying files" >> /tmp/usb_dumper
rsync -a /mnt/$ID_SERIAL_SHORT/ /var/UsbDumper/$ID_SERIAL_SHORT'_'$DATE/$PARTITION
echo -e "-- Umounting drive" >> /tmp/usb_dumper
umount /mnt/$ID_SERIAL_SHORT
done
echo -e "++ Finished" >> /tmp/usb_dumper
su $USER -c "/home/$USER/.scripts/UsbNotify.sh"
NOTA: USER debe ser asignado al usurio al que se le quiere enviar las notificaciones
Y finalmente el script de notificación que se integra con awesome, el texto a mostrar está vacío a proposito de este modo cuando termine la copia de los datos nos aparecerá un pequeño cuadrito casi inapreciable para quien no esté atento, de este modo ya sabremos cuando podemos sacar el usb.
#!/bin/bash
USER="XXX"
AWESOME_PID=$(pidof awesome)
export $(xargs --null --max-args=1 echo < /proc/$AWESOME_PID/environ|grep DBUS_SESSION_BUS_ADDRESS)
export XAUTHORITY='/home/$USER/.Xauthority'
export DISPLAY=':0.0'
echo 'naughty.notify({ text = "" })' | awesome-client -
Nos aseguramos de que awesome fué lanzado con el parámetro dbus-launch:
exec dbus-launch --sh-syntax --exit-with-session awesome