# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

star: empaquetar preservando ACL y atributos extendidos (SElinux)


El comando star permite comprimir y descomprimir y/o empaquetar múltiples ficheros con la posibilidad de mantener tanto los atributos extendidos de SElinux como las ACL que puedan tener configurados los ficheros/directorios.

# yum info star.i686
...
Name        : star
Arch        : i686
Summary     : An archiving tool with ACL support
URL         : http://cdrecord.berlios.de/old/private/star.html
Description : Star saves many files together into a single tape or disk archive,
            : and can restore individual files from the archive. Star supports ACL.
...

No es un comando que venga por defecto, así que lo instalamos con yum:

# yum info star.i686

La utilización no es igual que el comando tar, es más, es bastante compleja. Sólo hay que mirar la página man, que es muy extensa para darse cuenta de las posibilidades que ofrece. Nosotros vamos a ver unos ejemplos básicos, luego cada uno que haga las pruebas e investigaciones oportunas.

Mantener los atributos extendidos de SElinux y ACL

Para incluir en el fichero empaquetado/comprimido cualquier atributo extendido de ficheros así como las ACL utilizamos los parámetros -xattr (podemos recordarlo por extended attributes) y -H=exustar. Para preservar las ACL es más sencillo (-acl). Vamos a empaquetar los siguientes ficheros, que tienen atributos extendidos de SElinux:

# ls -Z
-rw-------. root root system_u:object_r:etc_t:s0       ftpusers
-rw-------. root root system_u:object_r:etc_t:s0       user_list
-rw-------. root root system_u:object_r:etc_t:s0       vsftpd.conf
-rwxr--r--. root root system_u:object_r:etc_t:s0       vsftpd_conf_migrate.sh

Probamos también a meter una ACL para ver que la mantiene. Podéis revisar esta entrada sobre ACLs: ACL (Access Control List) en sistemas de ficheros GNU/Linux.

# setfacl -m u:prueba:r-- ftpusers
# getfacl ftpusers
# file: ftpusers
# owner: root
# group: root
user::rw-
user:prueba:r--
group::---
mask::r--
other::---

El comando sería el siguiente. Podéis ver que especificamos la creación de un nuevo fichero (-c) y su nombre (-f=):

# star -xattr -H=exustar -acl -c -f=ejemplo.star *
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).

Desempaquetar el fichero es más sencillo, usamos el parámetro -x (desempaquetar) y especificamos el fichero de la misma forma que antes (-f=nombre). Si queremos mantener las ACL hay que especificarlo de la misma forma que al empaquetar (-acl):

# star -x -acl -f=ejemplo.star
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).

Y revisamos los atributos de SElinux:

# ls -Z
-rw-r-----. root root system_u:object_r:etc_t:s0       ftpusers
-rw-r--r--. root root unconfined_u:object_r:etc_t:s0   test.star
-rw-------. root root system_u:object_r:etc_t:s0       user_list
-rw-------. root root system_u:object_r:etc_t:s0       vsftpd.conf
-rwxr--r--. root root system_u:object_r:etc_t:s0       vsftpd_conf_migrate.sh

Y las ACL:

# getfacl ftpusers
# file: ftpusers
# owner: root
# group: root
user::rw-
user:prueba:r--
group::---
mask::r--
other::---

De esta forma veréis que únicamente hemos empaquetado, no hemos comprimido. Con el parámetro -compress-program= podemos especificar el compresor a utilizar (gzip, bzip2,etc)

# star -xattr -H=exustar -compress-program=gzip -c -f=test.star *
star: 2 blocks + 0 bytes (total of 20480 bytes = 20.00k).

Vemos que efectivamente el peso es mínimo:

-rw-r--r--. 1 root root 2997 feb 27 20:41 test.star

Para descomprimir es igual, el propio comando detectará la compresión y actuará en consecuencia:

# star -x -acl -f=test.star
star: WARNING: Archive is 'gzip' compressed, trying to use the -z option.

Comprobar la integridad de ficheros tar, gz, rar, zip


De nada sirve tener un sistema de backups o comprimir y empaquetar ficheros con información sensible si no tenemos la seguridad de que el archivo de respaldo es 100% fiable. Hoy vamos a ver como verificar la integridad de ficheros comprimidos y empaquetados desde GNU/Linux.

Ficheros .gz

gunzip -t fichero.gz
gunzip --test fichero.gz
gzip -t  fichero.gz
gzip --test fichero.gz

Ficheros .tar

tar tf fichero.tar

Podemos realizar la verificación en el momento que creamos el fichero con el parámetro W:

tar cvfW fichero.tar directorio/

Ficheros .tar.gz

gunzip -c fichero.tar.gz | tar tf -

Ficheros .tar.bz2

bzip2 -tvv fichero.tar.bz2

Ficheros .zip

unzip -t fichero.zip

Ficheros .rar

unrar t fichero.rar

Activar compresión HTTP en IIS 6.0


Activar la compresión HTTP en IIS 6.0 permite optimizar y reducir el uso de ancho de banda del servidor y acelerar la carga de los sitios web. Es posible comprimir tanto contenido estático como dinámico.

Lo que sucederá al activar la compresión, es que las páginas cacheadas y comprimidas se almacenarán en un directorio temporal y se servirán desde ahí. Para activarlo (tenemos que ser administrador) hacemos lo siguiente:

1) Accedemos a la administración de IIS (IIS Manager)
2) Desplegamos el servidor (local computer), y pinchamos con el botón derecho en “Web Sites”, una vez dentro, accedemos a la pestaña “Services”:

Compresión HTTP IIS

En la imagen se puede ver la posibilidad de activar la compresión para ficheros estáticos, ficheros de aplicación y especificar el directorio temporal así como su tamaño máximo.

Guardamos los cambios y la compresión quedará activada, podremos ver como el directorio temporal comienza a almacenar ficheros.

Backups incrementales con TAR


No conocía la opción de hacer backups incrementales comprimidos con TAR, se puede realizar del siguiente modo:

tar -Pvuf backup.tar /carpeta/a/comprimir

De este modo se comprimirá dicha carpeta, y la próxima vez que se vuelva a repetir dicho comando, solo cambiarán los ficheros modificados y se añadirán los nuevos sin necesidad de hacer toda la compresión de nuevo. Todo esto se debe a añadir el parámetro “u” a la línea de comandos.

Nota: Los ficheros borrados no se eliminan del fichero comprimido.

Vía | Shell fu

WinRAR: Comprimir excluyendo determinados directorios


En el caso de que queráis hacer un backup con WinRAR, pero necesitéis excluir ciertas carpetas, necesitaréis utilizar el parámetro “-x”, ejemplo:

"c:\Program Files\WinRAR\Winrar" -x*\logs\* c:\fichero.rar c:\carpeta-a-comprimir

De este modo excluismos todos los ficheros dentro de la carpeta “logs”.

Toda la documentación de Winrar podéis encontrarla aquí.

Comprimir directorio remoto a través de SSH


ssh usuario@servidor "cd /directorio && tar cvz * --exclude=*log" > backup.$( date +%y%m%d ).tgz

Esta es una forma rápida y sencilla de hacer backups remotos vía SSH de una determinada carpeta, la explicación es sencilla, primero hacemos ssh al servidor remoto, al cual le pasamos la primera parte del comando:

cd /directorio && tar cvz * --exclude=*log

Entramos a la carpeta a comprimir y le decimos que comprima todo excepto los ficheros “que acaben en log”, esto lógicamente puede ser modificado al gusto de cada uno, después, simplemente redirigimos los datos comprimidos al fichero backup + fecha actual .tgz:

 > backup.$( date +%y%m%d ).tgz

Este y muchos otros tips de consola los puedes encontrar en shell-fu ;)