[uylug-varios] Papelera para la consola

Eduardo Trápani etrapani at unesco.org.uy
Fri Nov 11 05:47:09 PST 2011


> Impecable. Definitivamente voy a instalar el susodicho programejo,
> porque pensándolo bien, es más peligrosa la consola que el entorno
> gráfico ( por tener más "pulenta" :)

Sí.  Está muy bueno, pero conviene saber qué está haciendo y qué no.
Por defecto no protege áreas temporales ni archivos/directorios ocultos,
ni ciertas extensiones.  El que funcione con rm es como un "regalito",
en realidad libtrash está almacenando lo que borra *cualquier* programa
que se ejecute con ese LD_PRELOAD, salvo que los archivos estén
excluídos por algunas de las variables de configuración.

Conviene no considerar el programejo :) como "plug and play" o "lo dejo
y me olvido" y mucho menos como una especie de alias de rm.  Sobre todo,
como dice el README.Debian, podría ser peligroso arrancarlo con la
sesión.  Pero también puede llegar a tener efectos laterales sobre otros
programas[1].

> /usr/share/doc/libtrash/README.Debian
>  You could do this by
> re-starting the shell in your ~/.bash_profile with something like the
> following (this could be dangerous, however):
> 
> LIBTRASH=/usr/lib/libtrash/libtrash.so.2.4
> [...]
>    LD_PRELOAD="$LIBTRASH"
>    export LD_PRELOAD

La versión que anda por ahí en Debian/Ubuntu es la 2.4, que no soporta
unlinkat, openat, etc.[2], así que es probable que el ejemplito de crear
y borrar no les vaya a andar con esas versiones porque rm va a llamar a
unlinkat (pueden usar strace para verlo) y no a unlink.  Asegúrense que
el ejemplo anda.

>> Confirmado, acabo de probar y si funciona tanto en consola como también
>> con el MC.

Sí.  La biblioteca intercepta las llamadas a glibc de *todos* los
programas que tengan el LD_PRELOAD en el entorno.  De hecho esto es algo
a tener muy en cuenta, *todo* lo que ejecuten desde la consola va a
pasar a través de libtrash, potencialmente guardando algo que sí querían
borrar (ya sea a mano o por uno de los procesos que largaron).

>> PD: Además tienen el archivo de configuración /etc/libtrash.conf

Y también un .libtrash en la carpeta del usuario.  El global conviene
leerlo.  Por ejemplo, por defecto en Ubuntu (lucid) y en Debian (squeeze):

IGNORE_EXTENSIONS = o;log;aux
IGNORE_HIDDEN = YES

O sea que si borran un log se borra para siempre, no va a la papelera y
si es un archivo "oculto" (que empieza con ".", incluye directorios)
también.  Si llegan a habilitar los ocultos, entonces agárrense porque
muchas más cosas se empiezan a guardar.

Por otro lado esta variable:

TEMPORARY_DIRS = /tmp;/var

Hace que no se salve nada de lo que está bajo /tmp o /var (discrepo un
poco con el razonamiento en el archivo de configuración, pero es así).
Habilitar /tmp me suena a problema de seguridad.

Hay más cosas, como interceptar fopen y freopen para manejar el
truncado, ...  Están interceptando a glibc, no es trivial.  Ejemplos:
INTERCEPT_FOPEN = NO, INTERCEPT_FREOPEN = NO, INTERCEPT_OPEN = NO (las
explicaciones en el archivo de configuración están buenas).

Les dejo una más para compartir y pensar eso de que todos los programas
pasen por ahí.  Con ese LD_PRELOAD hice un "hg pull -u" (sincronicé mi
repositorio de Mercurial de Firefox).  Es un proceso cortito porque lo
hago periódicamente.  Al terminar tenía el trash todos los archivos
modificados por el hg y algunos más.  Ni les cuento si se mandan un
rsync o algo así, la versión anterior de todo lo que se actualice va a
terminar en el trash.

Eduardo.

[1] "hangs/freezes when using libtrash"
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=487614
[2] http://pages.stern.nyu.edu/~marriaga/software/libtrash/



More information about the Uylug-varios mailing list