[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