Eliminar completamente un fichero con el comando shred

Para la eliminación de datos sensibles, confidenciales o que simplemente deseamos borrar por completo no es conveniente utilizar el comando rm (estamos hablando de sistemas Unix y Linux). Podemos eliminar una buena cantidad de ficheros, y pasados unos meses si utilizamos alguna utilidad de recuperación de datos, seguro que podemos recuperar la mayoría, todo es cuestión de que no se hayan sobreescrito.

Bien, pues precisamente lo que hace el comando shred es sobreescribir una y otra vez los ficheros que le indiquemos para que su recuperación sea prácticamente imposible. Los argumentos disponibles son los siguientes:

  -f, --force    cambia los permisos para permitir la escritura si es necesario
  -n, --iterations=N  sobreescribe N veces en vez de lo predeterminado (25)
  -s, --size=N   efectúa el `shred' sobre este número de bytes
                 (se permiten los sufijos K, M y G)
  -u, --remove   trunca y borra el archivo después de sobreescribirlo
  -v, --verbose  muestra el progreso
  -x, --exact    no redondea hacia arriba los tamaños de los archivos hasta el siguiente bloque completo;
                   este es el comportamiento predeterminado para los archivos no regulares
  -z, --zero   sobreescribir con ceros al final para ocultar la división
      --help     muestra esta ayuda y finaliza
      --version  informa de la versión y finaliza

Podéis hacer una prueba sencilla, cread un fichero de texto con un párrafo de palabras y después ejecutad el siguiente comando sobre el fichero:

# shred fichero.txt

Si ahora hacemos un cat al fichero veremos que la salida se ha convertido en una gran cantidad de caracteres sin sentido, como si hicieramos un cat a un binario.

Os dejo además información importante extraida directamente de la ayuda del comando:

PRECAUCIÓN: Tenga en cuenta que shred se basa en una importante suposición: que el sistema de archivos sobreescribe los datos en el mismo sitio. Ésta es la forma tradicional de hacer las cosas, pero muchos diseños modernos de sistemas de archivos no satisfacen esta suposición. Los siguientes son ejemplos de sistemas de ficheros en los que shred no es efectivo, o no se garantiza su efectividad:

  • Sistemas de archivos con estructura de registro o con versiones, como los que suministran AIX y Solaris (y JFS, ReiserFS, XFS, Ext3, etc.
  • Sistemas de archivos que escriben datos redundantes y siguen adelante incluso si algunas escrituras fallan, tales como los sistemas de ficheros basados en RAID.
  • Sistemas de ficheros que hacen `snapshots’, tales como el servidor NFS de Network Appliance.
  • Sistemas de archivos que almacenan en ubicaciones temporales, tales como los clientes NFS de versión 3 sistemas de archivos comprimidos

En caso de sistemas de archivos ext3, la renuncia de responsabilidad se aplica (y por tanto shred tiene efectividad limitada) sólo en modo data=journal, el cual registra los datos del archivo además de los metadatos. En ambos modos, data=ordered (predeterminado) y data=writeback, shred opera normalmente. Los modos de registro (journaling) de ext3 pueden cambiarse añadiendo la opción data=modo a las opciones de montaje de cada sistema de archivos en particular en el archivo del sistema /etc/fstab, como se documenta en la página de manual de mount (man mount).

Además, las copias de seguridad de archivos y espejos remotos pueden contener copias del archivo que no se pueden borrar, y eso permite recuperar después un archivo al que se le haya hecho shred.