Arreglando un pequeño contratiempo en Debian Sarge
Hoy mi script de actualizaciones me ha notificado que había actualizaciones de:
Se actualizarán los siguientes paquetes:
libc6 libc6-dev locales perl perl-base perl-modules tar
7 actualizados, 0 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 18,1MB de archivos.
Claro, cuando lo vi lo primero que hice fue visitar la web de seguridad de paquetes de Debian y ver que no tenía ninguna vulnerabilidad. Me extrañé, pero de todos modos actualizé obteniendo un error.
Desea continuar? [S/n] S
(Leyendo la base de datos …
15292 ficheros y directorios instalados actualmente.)
Preparando para reemplazar libc6 2.3.2.ds1-22 (usando …/libc6_2.3.2.ds1-22sarge3_i386.deb) …
Desempaquetando el reemplazo de libc6 …
dpkg: error al procesar /var/cache/apt/archives/libc6_2.3.2.ds1-22sarge3_i386.deb (–unpack):
no se puede crear un enlace de seguridad de `./usr/share/zoneinfo/Europe/Madrid”” antes de instalar
la nueva versión: Operación no permitida
dpkg-deb: el subproceso paste fue terminado por la señal (Tubería rota)
Se encontraron errores al procesar:
/var/cache/apt/archives/libc6_2.3.2.ds1-22sarge3_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Lo primero que pensé cuando leí Operación no permitida fue en los atributos extendidos de Linux (véase lsattr y chattr) pues los usaba.
# lsattr /usr/share/zoneinfo/Europe/Madrid
—-i———— /usr/share/zoneinfo/Europe/Madrid
UH!?
# chattr -i /usr/share/zoneinfo/Europe/Madrid
# lsattr /usr/share/zoneinfo/Europe/Madrid
—————– /usr/share/zoneinfo/Europe/Madrid
Bien, probemos.
# apt-get -f dist-upgrade
Correcto!!
# chattr +i /usr/share/zoneinfo/Europe/Madrid
# lsattr /usr/share/zoneinfo/Europe/Madrid
—-i———— /usr/share/zoneinfo/Europe/Madrid
Los atributos extendidos (de ahora en adelante ea) son unos atributos del sistema de ficheros que se maneja con las utilidades lsattr y chattr.
El comando lsattr sirve para listar los ea de un fichero o directorio.
El comando chattr sirve para asignarlos. Podéis leer el man chattr para verlos todos, pero resumiendo mucho, los más útiles en mi opinión con el a y el i.
El atributo a proviene de append y significa añadir. Esto hace que a un fichero solos e le puedna añadir datos, peor no eliminarlos ni modificarlos, y mucho menos eliminar el fichero en cuestión. Es muy útil para los logs, pues solo añadimos y así no se pueden eliminar, aunque si se obtiene acceso a root un $ chattr -a fichero bastaría.
El atributo i hace que el fichero sea inmutable, y cuando digo inmutable me refiero a que ni root puede hacer nada. Ejemplo:
# touch prueba
# chattr +i prueba
# lsattr prueba
—-i———— prueba
rm prueba
rm: ¿borrar el fichero regular vacío «prueba» protegido contra escritura? (s/n) s
rm: no se puede borrar «prueba»: Operación no permitida
Es muy útil para cuando tenemos una jaula chroot y no queremos machacar por un despiste esa jaula que tenemos. Aplicamos pues atributos extendidos y no será posible machacarlos sin querer.
Hay otro flag interesante que es el s si no recuerdo mal, que sirve para No hacer backup del inodo del fichero que estamos eliminando. Resumiendo: Una eliminación segura, similar a un wipe aunque no puedo probarlo o quizá sea diferente, pero eso entendí.
De todos modos podéis leeros el manual de chattr y tambien miraros las ACL del sistema que se trabajan con getfacl y setfacl. Ya no son tan sencillas pero sí muy útiles cuando en sistema UGO (User Group Other, configurables con chown y chmod) se nos queda pequeño.
Espero que el post os haya servido de algo. Agur.
Escrito por Gura
19.Apr.06 y almacenado en las caterorías Debian, GNU/Linux.
También puede escribir un comentario, o referenciar esta entrada (trackback) desde su web.