Soporte telefonicp 24x7
Area de clientes (Administracion, productos y servicios contratados, facturacion, tickets)
Soporte mediante tickets gratis de ayuda
Correo electronico comercial
Demo Panel de Control Cpanel
2Checkout

Borrado seguro en Linux con libtrash

Atención, abrir en una nueva ventana. PDFImprimirE-mail

Articulos - Sistemas

El borrado de ficheros en Linux no es una operación con posibilidad de retorno, cuando por accidente hemos eliminado uno o varios ficheros. Existen varias utilidades entre ellas libtrash que nos permiten tener un sistema de papeleras al estilo Windows o Mac OS.

Todos los usuarios de Linux, incluidos experimentados administradores de sistemas, alguna vez por error, han tenido una traumática experiencia en la cual han eliminado uno o varios ficheros de sus sistema, algunos incluso de vital importancia.

 

No importa que el sistema se encontrara protegido contra el uso de la orden remove (rm) haciéndonos trabajar de forma interactiva, es decir, confirmando cada eliminación, ni otros métodos de puesta a punto de nuestro sistema para prevenir estos casos. Al final, siempre hay un punto donde existe la posibilidad de error. Lo único que importa, es que en ese momento la posibilidad de retorno no existía.

Personalmente tuve una experiencia traumática, en la que tras un ataque crack a varios sistemas, y varios días de no dormir, acepte la orden, equivocada, en el momento equivocado, con terribles consecuencias. Ni el envío del disco a una empresa de recuperación de datos, me libro de la quema. Entonces, alguien me llamo “el dedo de dios”.

¿Qué es libtrash?

Libtrash es algo más que una simple utilidad. Es una librería compartida (shared) que se superpone a las acciones que ejecuta Linux cuando esta eliminando ficheros. Libtrash interceptará las llamadas al sistema a la librería unlink de glibc, utilizada para la eliminación de ficheros, modificando el comportamiento del sistema, para mover los ficheros a un subdirectorio nombrado en nuestra configuración de esta utilidad, por lo general un directorio llamado Trash (papelera) en nuestro directorio de usuario.

¿Cómo obtener libtrash?

La última versión de libtrash se puede obtener de la página de su autor, Manuel Arriaga.

También existen diferente binarios para cada distribución debiendo consultar entonces su instalación con la herramienta usada en su sistema (apt-get, yum, …).

Este artículo se basa en Debian Etch (4.0), en el que esta disponible como paquete binario.

Configuración de libtrash

Tanto si instalamos libtrash desde el código fuente como si lo hacemos con un paquete precompilado, esta utilidad contiene un fichero de configuración por defecto. Es muy aconsejable su edición, pues dependiendo de nuestra estructura de particiones de disco en el sistema, podemos tener problemas sino conocemos en profundidad su funcionamiento y configuración.

Recientemente he realizado una consultoría de sistemas, en las que me encontré libtrash, configurado en un sistema con una partición root de 10GB, y VPS de OpenVZ en otra partición de 100 GB. Dada la forma de trabajo de del anterior administrador y de las peculiaridades de OpenVZ, cuando los usuarios de los VPS eliminaban ficheros estos se almacenaban en el home /root. El borrado de una carpeta de más de 20 GB produjo que la partición / se quedará sin espacio, tras lo cual, el sistema quedo inestable, e incluso se perdieron datos, al intentar realizarse operaciones de edición de ficheros, sin espacio físico.

Por defecto la configuración de libtrash, se encontrará en /etc/libtrash.conf

El sistema permite una vez activado libtrash, utilices dos niveles de configuración:

  • Configuración global, que será utilizada por todos los usuarios del sistema, y que por defecto encontraremos en /etc/libtrash.conf
  • Configuración de usuario, en la cual cada usuario del sistema podrá usar su propia configuración leída del fichero ~/.libtrash de su directorio personal.

Configuración de sistema

La configuración global se realiza a través del fichero /etc/libtrash.conf. Los cambios deben realizarse antes de compilar libtrash. Una vez activo en el sistema y dependiendo de la configuración este fichero no será accesible para su edición, a no ser que desactivemos el uso de libtrash.

Hay tres entradas en el fichero de configuración que no pueden ser modificadas por la configuración de los usuarios locales en su configuración.

  • DEBUG. Nos permite activar el modo de depuración que nos mostrará más información de los procesos de eliminación de ficheros, permitiéndonos descubrir si hubiera alguna falla en libtrash.
  • PERSONAL_CONF_FILE. Permite indicar el nombre del fichero de configuración de los usuarios locales. Por defecto .libtrash
  • WARNING_STRING. Mensaje que se mostrará en caso de que la directiva SHOULD_WARN este activada.

Las siguientes directivas permiten a libtrash interceptar las rutinas estándar de Linux cuando los ficheros son eliminados o renombrados. Los valores por defecto son los más apropiados.

  • INTERCEPT_UNLINK=YES. Activado permitirá a libtrash interceptar las llamadas a unlink() que se realicen desde el sistema.
  • INTERCEPT_RENAME=YES. Activado permitirá a libtrash interceptar las llamadas a remove() que se realicen desde el sistema. En caso de estar activo, y realizarse un cambio de nombre en un fichero, este se guardará en la papelera con el nombre original.
  • INTERCEPT_FOPEN, INTERCEPT_FREEOPEN, INTERCEPT_OPEN. No. Estas opciones nos permitirán la interceptación de las llamadas del sistema a fopen(), freeopen() y open(). Debe ser usado con cuidado.


El resto de las opciones nos permiten un mayor control sobre la forma de trabajar de libtrash.

  • TRASH_CAN = Trash. Determina el nombre del subdirectorio donde los ficheros borrados serán almacenados. El nombre por defecto puede ser cambiado, pero no debe contener ninguna barra invertida.
  • IN_CASE_OF_FAILURE = PROTECT. Esta opción determina como reaccionara libtrash en caso de fallo. El valor por defecto PROTECT previene de que los ficheros sean destruidos por la función estándar del sistema Linux.
  • ALLOW_DESTRUCTION en la práctica desactiva el funcionamiento de libtrash.
  • SHOULD-WARN = YES. Activado, nos mostrará la cadena definida en la opción WARNING_STRING. Esto es importante para recordar en un sistema protegido por libtrash, que el administrador o el propio usuario, a desactivado temporalmente el uso de libtrash.
En un sistema que utiliza libtrash el administrador debe notificar e ilustrar sobre su uso a los usuarios del sistema, ya que el desconocimiento de su existencia puede producir situaciones indeseadas. Por otro lado, el funcionamiento de esta herramienta no es estándar en el sistema, mayor motivo para avisar de su existencia.
  • PROTECT_TRASH = YES. Por lo general es buena idea la de proteger el subdirectorio Trash o Papelera frente a su borrado o el de su contenido.
  • IGNORE_EXTENSION = o; c. Aquí podemos definir diferentes extensiones conocidas de archivos, que podrán ser eliminadas sin ser copiadas a la papelera. Los ficheros, con estas extensiones serán ignorados por libtrash. Debe construirse la lista con extensiones separadas por (;) y no debe incluirse el (.) Como parte de la extensión.
  • IGNORE_HIDDEN = YES. Por defecto se encuentra desactivada la protección de libtrash sobre los ficheros y directorios ocultos.
  • IGNORE_EDITOR_BACKUP = YES. Los ficheros terminados con la tilde (~) son ficheros creados generalmente por los editores de textos tipo Emaus, vi, joe. Algunos administradores piensas que es buena idea poner esta opción a NO, dada la importancia que pueden tener estos ficheros en caso de error por parte del editor.
  • IGNORE_EDITOR_TEMPORARY = YES. Al igual que en la anterior opción, los editores, crean ficheros temporales durante la edición de ficheros, que comienzan con el carácter (#) .
  • LIBTRASH_CONFIG_FILE_UNREMOVABLE = YES. Permite la protección de la configuración personal de cada usuario (.libtrash). La perdida del fichero de configuración personal puede dar lugar a funcionamiento no deseado por el usuario.
  • GLOBAL_PROTECTION = YES. Define el alcance global de la protección del sistema mediante libtrash. Su configuración define también el ámbito de actuación de otras variables como TRASH_SYSTEM-ROOT
  • TRASH_SYSTEM_ROOT = SYSTEM_ROOT. Esta variable, especifica la ubicación del directorio en el que la papelera funcionará como root (/) del sistema de ficheros cuando la opción GLOBAL_PROTECTION ese en YES. Si esta en NO esta variable será ignorada. LA variable como en casos anteriores usa un directorio sin barras.
  • UNREMOVABLE_DIRS=/bin;/boot;/dev;/etc;/lib;/sbin;/usr. Cualquier directorio del sistema puede ser marcado como imborrable. Todos los ficheros contenidos en ese directorio estarán protegidos del borrado por cualquier usuario, siempre que libtrash este activo. Es importante su uso y definición. Una elección cuidadosa de determinados directorios puede prevenir de accidentes no deseados. Esta opción por defecto, esta comentada (#) al comienzo e la línea. Para activarla deberá eliminar el comentario (#). Para añadir más directorios, sepárelos con punto y coma (;).
  • UNCOVER_DIRS = . Esta variable debe dejarse en tiempo de configuración siempre vacía. El programador creo esta variable para crear una variable temporal que nos sirviera para desactivar el comportamiento de libtrash, sin tener que desactivarlo de forma global con trashoff. El autor nos aconseja varias cosas que nos recuerda en el fichero de configuración. i) No introducir ningún valor en el fichero de configuración ii) No usarlo en el fichero de configuración personal iii) Usarlo sólo como variable de entorno.
  • TEMPORARY_DIRS = /tmp;/var. Esta variable debería contener la lista de directorios bajo los cuales se crean ficheros temporales.
  • USER_TEMPORARY_DIRS = . El administrador del sistema podrá definir los directorios en los que por la estructura del sistema, los usuarios tengan sus propios directorios para ficheros temporales. Como siempre deberá contener una lista de directorios separadas por el punto y coma (;) y no deben contener barras invertidas. Los directorios serán relativos a los homes de los usuarios
  • REMOVABLE_MEDIA_MOUNT_POINTS = /mnt. Podemos indicar la lista de directorios en los que por norma general montamos unidades temporales por lo general de medios como disquetes, zip, CD-ROM, etc, incluso donde podemos montar unidades para backup. Por defecto el fichero contendrá el directorio /mnt y sería bueno su revisión pues, muchas distribuciones desde hace tiempo ya no montan por defecto en este directorio sino que lo hacen en /media. Para que esta opción sea funcional la variable GLOBAL_PROTECTION debe estar activada.
  • EXCEPTIONS = /etc/mtab;/etc/resolv.conf;/etc/adjtime;/etc/upsstatus;/etc/dhcpc. Esta variable es particularmente especial, y requiere del administrador cierto cuidado ya que de no indicar los ficheros que el sistema habitualmente modifica al iniciarse determinados servicios podría dar lugar a una acumulación indeseada de ficheros en la papelera.
  • IGNORE_RE = . Los ficheros que coincidan con la configuración en esta variable contenida como expresiones regulares (REGEX) serán ignorados de la protección que ofrece libtrash.


Una vez llegados aquí, recordar al administrador del sistema, que esta herramienta no es baladí, y que no debe dejarse como muchas, a la configuración “por defecto”, ya que podría dar resultados muy indeseados. También debería incorporar a los documentos de procedimientos el conocimiento de la instalación de esta utilidad

Fichero de configuración personal

El fichero de configuración personal, puede ser creado según lo explicado anteriormente, con las mismas variables que en el fichero de configuración global libtrash.conf pudiendo modificar la configuración global.
El administrador del sistema también puede crear un fichero de configuración personal, de tal forma que se añada al esqueleto (skeleton) que se ejecuta al crear un usuario en el sistema, con una configuración predefinida acorde con las peculiaridades de su sistema.

Instalar libtrash compilándolo.

Libtrash, requiere la compilación adecuada de ldconfig. El lugar correcto para la instalación de ldconfig es /usr/bin. En caso de no encontrase en esta ubicación deberíamos ejecutar cp /sbin/ldconfig /usr/bin/
Ejecute como root:

# make && make install

Activar libtrash

Libtrash es una librería y no un fichero ejecutable o guión (script). Para activar las librerías asociadas con libtrash para que ellas sean activadas automáticamente cuando cualquier usuario acceda al sistema, debe añadirse al fichero /etc/profile lo siguiente:

Export LD_PRELOAD=/usr/local/lib/libtrash.so.X.X 

X.X serán los números de versión y revisión de la librería compilada o instalada en el sistema.

Lo siguiente será añadir dos alias en el fichero /etc/profile. Estos alias, nos permitirán de una manera sencilla activar o desactivar el funcionamiento de libtrash.

alias trashon=”export TRASH_OFF=NO”
alias trashoff=”export TRASH_OFF=YES”

Después de esto, el comportamiento podrá ser desactivado con el comando trashoff o activado con trashon

Comprobación del funcionamiento

Una vez instalado y configurado correctamente, el administrador debería realizar pruebas, creando algunos ficheros y/o directorios, para comprobar el comportamiento de libtrash

Es muy habitual en el mundo actual, debido quizás a la premura de los tiempos de producción, la realización de pruebas cortas o poco numerosas. El análisis desde un punto de vista de un buen administrador de sistemas, no puede basarse en pocos elementos, pues esto es un hándicap que muchas veces lleva a situaciones indeseadas. Dedique un poco de tiempo a comprobar todos los aspectos de la configuración, ya que ello le hará conocer con mayor y mejor conocimiento la herramienta analizada.

















Porqué IslaServer?

  • Precios únicos en el mercado.
  • Profesionales dedicados a su servicio.
  • Soporte 24 x 7 x 365 días al año.
  • Atención telefónica PROFESIONAL.
  • Seguridad, fiabilidad y eficacia.

Garantía de 30 días

Garantia de devolución de 30 díasIslaServer te ofrece 30 días para que pruebes nuestros servicios. Sino no quedas totalmente satisfecho te devolvemos el importe abonado mediante nuestra garantía de calidad. Solo queremos clientes satisfechos.

 

(Excepto registro de dominios y certificados SSL)