Esta pagina se ve mejor con JavaScript habilitado

Usb dumper

 ·  🎃 kr0m

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
vi /etc/udev/rules.d/10-usbmount.rules
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", RUN+="/usr/bin/UsbDumper.sh"

El script de backup será:

vi /usr/bin/UsbDumper.sh

#! /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.

vi /home/XXXX/.scripts/UsbNotify.sh

#!/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:

vi .xinitrc

exec dbus-launch --sh-syntax --exit-with-session awesome
Si te ha gustado el artículo puedes invitarme a un RedBull aquí