Script para espiar el contenido de dispositivos USB y copiarlo a la PC

Yo siempre fui un alumno inquieto, siempre deseando sacar partido de oportunidades como… por ejemplo, copiar los exámenes del semestre del pendrive del profesor o algo así. Cuando estudiaba en la enseñanza media (especialidad informática) deseé programar “algo” que hiciera lo siguiente:

  1. Detecte cuando se conecta un dispositivo USB en el ordenador de la clase
  2. Copie todo el contenido de ese dispositivo hacia el ordenador

Esto me permitiría tener el examen mucho tiempo antes, solo sería necesario que el profesor conectara su memoria USB (pendrive) en el ordenador y listo.

Desafortunadamente en mi instituto los ordenadores tenían Windows y … yo jamás y nunca aprendí a programar para este OS.

No obstante ahora uso Linux (obvio no? LOL!), y con los conocimientos que a lo largo de estos años he podido ir adquiriendo, ahora SÍ! ya puedo lograr esto con Linux :D

O sea, he programado un simple script que hace lo siguiente:

1. Crea la carpeta /home/.USBDRIVES/
2. Está comprobando cada 5 segundos si hay algún dispositivo USB (o CD/DVD) conectado al ordenador.
3. En caso de que esté alguno conectado, creará una carpeta dentro de /home/.USBDRIVES/ con el nombre del USB (por ejemplo: memoria-2gb) y además, copiará todos los archivos .doc, .pdf, etc (aquí el listado) hacia esta carpeta que recién acaba de crear.
4. En caso de que no haya ningún USB conectado, simplemente esperará 5 segundos para volver a iniciar la comprobación que expliqué arriba :D

Aquí les dejo el script y el archivo que contiene los formatos que se copiarán:

Descargar USB-Spy.sh

Descargar USB-Spy Files

El script debe ser ejecutado como root para que su funcionamiento no se vea limitado. Acá explico cómo lograr esto

Para que el script pueda funcionar sin ningún tipo de problemas, lo mejor es que sea iniciado con privilegios administrativos (root), así como es obvio que se necesita que se inicie junto al ordenador, de esta forma nos aseguramos que si el ordenador es reiniciado o apagado, cuando vuelva a iniciar el script estará ahí funcionando, listo para extraer de cualquier USB lo que deseamos ;)

Vamos a abrir una terminal… una vez abierta…

1. Supongamos que tenemos ambos archivos en /opt/ (/opt/usb-spy.sh y /opt/usb-spy.files), debemos darle privilegios de ejecución:

sudo chmod +x /opt/usb-spy.sh

2. Abrimos el archivo /etc/rc.local :

sudo nano /etc/rc.local

3. En él escribimos arriba de la línea final (exit 0) lo siguiente:

/opt/usb-spy.sh &

4. Ahora presionamos [Ctrl]+[X] para guardar y salir del archivo, presionamos [S] o [Y] (en dependencia del idioma del sistema) y luego [Enter]. Esto bastará para que se guarden los cambios que hicimos.

Y listo, esto bastará para que el script se inicie como root cuando encendamos el ordenador.

Es importante verificar que el archivo usb-spy.files esté en el mismo directorio de usb-spy.sh ;)

Ahora… explicaré un poco el funcionamiento interno del script, pues sé que hay muchos amantes de Bash por acá :D

Q: ¿Cómo el script sabe que hay un dispositivo USB conectado?
A: En el archivo /etc/mtab de nuestro sistema se encuentran los dispositivos o particiones que están montadas en nuesto sistema. Mediante la línea 23 del script se sabe si hay un USB conectado o no (haciendo cat al mtab y grep media)
Q: Sí, pero ¿cómo el script sabe si el cat y grep nos devuelve algún dato o no?
A: Mediante un ciclo if, then, else que empieza en la línea 24.
Q: ¿Cómo hacer que copie solamente los archivos con extensiones deseadas? (.doc, .pdf, etc)
A: Mediante rsync con varios parámetros, esto es en la línea 34. Explicado de forma simple, con rsync copio solamente los archivos que coincidan con el filtro usb-spy.files, cada línea es un filtro por así decirlo. Además le paso el parámetro --prune-empty-dirs a rsync para que no me cree directorios vacíos.
Por cierto algo importante. Si se conecta un dispositivo USB de 8GB (por ejemplo) todo funciona de forma correcta, pero me percaté que si se conecta algún dispositivo de mucha más capacidad, como 500GB o 1TB el proceso de buscar archivos .doc y etc para copiarlos al ordenador demoraba mucho tiempo, por lo que puse un límite de GB. O sea, en la línea 31 declaro que si el dispositivo USB es menor de 16GB, entonces busca los archivos y copialos, pero si es mayor de 16GB entonces no hagas nada. Si desean aumentar esos 16GB por 32GB, solo aumenten ese número de la línea 31

No hay mucho que explicar en realidad, el script es realmente simple de entender :)

Si alguien tiene cualquier duda o pregunta, queja, idea o sugerencia por favor, que lo diga y prometo ayudarles en todo cuanto pueda.

Y bueno, estaba pensando poner algo como: “este script solo es para propósitos educativos, no usar con files dañinos” … pero… qué demonios!, úsenlo para lo que deseen, es hora de que los estudiantes tengamos algún tipo de ventaja contra los profesores que nos oprimen :D

Saludos

Aún se le pueden hacer múltiples mejoras al script, pero bueno esto es un buen inicio creo yo, si alguien se siente motivado a contribuir a esta “noble” causa será un placer :D