¿Qué son las herramientas de archivado y compresión? Permisos y atributos básicos de archivos

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

Parte I: Archivado y compresión

3.1. Introducción: empaquetar, comprimir y transportar datos

En Linux, archivar (empaquetar) y comprimir son dos operaciones distintas, aunque suelen combinarse:

  • Archivar: reunir múltiples archivos y directorios en un solo fichero contenedor, preservando la estructura de directorios y los metadatos (permisos, propietarios, fechas). La herramienta estándar es tar (Tape ARchiver).
  • Comprimir: reducir el tamaño de los datos mediante algoritmos de compresión. Puede aplicarse a un solo archivo o a un archivo empaquetado. Las herramientas habituales son gzip, bzip2 y xz.

El flujo de trabajo típico es: primero crear un tarball (archivo .tar) y luego comprimirlo. Actualmente tar puede invocar el compresor directamente, generando archivos como .tar.gz, .tar.bz2, .tar.xz.

3.2. tar: el estándar para archivar

3.2.1. Sintaxis básica

tar [opciones] [archivo_destino] [archivos_origen...]

Las opciones principales se agrupan sin guion (estilo tradicional) o con guion (estilo moderno). Ambas funcionan.

Modos de operación (solo uno a la vez):

  • -c : crear un archivo
  • -x : extraer un archivo
  • -t : listar el contenido
  • -r : añadir archivos a un archivo existente (solo en archivos no comprimidos)
  • -u : añadir solo archivos más nuevos que los existentes
  • -A : concatenar archivos tar

Opciones frecuentes:

  • -f archivo : especifica el archivo contenedor (casi siempre obligatorio)
  • -v : modo verbose (muestra los archivos procesados)
  • -z : comprimir/descomprimir con gzip
  • -j : comprimir/descomprimir con bzip2
  • -J : comprimir/descomprimir con xz
  • -p : preservar permisos (importante al extraer)
  • -C directorio : cambiar al directorio antes de la extracción
  • --exclude=patrón : excluir archivos que coincidan con el patrón

3.2.2. Creación de un archivo tar (sin comprimir)

tar -cvf backup.tar /home/usuario/Documentos

Crea backup.tar con todo el contenido de Documentos, mostrando los nombres.

3.2.3. Añadir compresión directamente

  • Con gzip: tar -czvf copia.tar.gz /ruta
  • Con bzip2 (mejor compresión): tar -cjvf copia.tar.bz2 /ruta
  • Con xz (máxima compresión, más lento): tar -cJvf copia.tar.xz /ruta

Ejemplo real:

tar -czvf etc_backup_$(date +%F).tar.gz /etc

3.2.4. Listar contenido de un archivo

tar -tvf archivo.tar.gz

Muestra permisos, propietario, tamaño, fecha y nombre de cada miembro. No extrae nada.

3.2.5. Extraer archivos

tar -xvf archivo.tar.gz

Extrae en el directorio actual conservando la estructura de directorios original.

Para extraer en un destino concreto:

tar -xvf archivo.tar.gz -C /tmp/restauracion

Extraer solo algunos archivos o directorios (indicando el nombre exacto según lista con -t):

tar -xvf archivo.tar.gz etc/passwd etc/shadow

Excluir patrones al extraer (poco habitual, pero posible):

tar -xvf archivo.tar.gz --exclude='*.log'

3.2.6. Preservar permisos y propietarios

Al extraer como root, tar intenta restaurar permisos y propietarios originales. Para forzarlo con un usuario normal (si los archivos son suyos) se usa -p. Como root, añadir --same-owner y --same-permissions.

3.2.7. Trabajar con rutas absolutas vs relativas

Al crear un tar con rutas absolutas (ej. /etc/passwd), la extracción los colocará en la misma ubicación absoluta, lo que puede ser peligroso. Para evitarlo, es buena práctica moverse al directorio padre y usar rutas relativas:

cd / && tar -czvf /tmp/backup_etc.tar.gz etc

Al extraer, se creará ./etc/... relativo al directorio actual.

O usar la opción --transform de GNU tar para modificar las rutas al vuelo.

3.2.8. Archivos incrementales y diferenciales

GNU tar soporta copias de seguridad incrementales mediante --listed-incremental=archivo.snar:

  • Copia completa (nivel 0):
    tar --create --file=full.tar.gz --listed-incremental=snapshot.snar --gzip /datos
    
  • Copia incremental (nivel 1):
    tar --create --file=incr1.tar.gz --listed-incremental=snapshot.snar --gzip /datos
    

Para restaurar, se extrae primero la copia completa y luego las incrementales sobre la misma ubicación.

3.2.9. Combinar compresión con tuberías

A veces interesa comprimir sin necesidad de archivo intermedio:

tar -c /datos | ssh usuario@servidor 'tar -xv -C /destino'

O sobre la marcha con gzip:

tar -c /datos | gzip > datos.tar.gz

3.3. Herramientas de compresión individuales

3.3.1. gzip / gunzip / zcat

  • Comprimir un archivo: gzip archivo (genera archivo.gz y borra el original, salvo con -k).
  • Descomprimir: gunzip archivo.gz (o gzip -d). Con -k mantiene el original.
  • Ver contenido sin descomprimir: zcat archivo.gz o gzip -dc.

Niveles de compresión: -1 (rápido) a -9 (mejor compresión). Por defecto -6.

3.3.2. bzip2 / bunzip2 / bzcat

Similar a gzip pero con mejor ratio de compresión y más lento. Extensiones .bz2.

  • Comprimir: bzip2 archivoarchivo.bz2
  • Descomprimir: bunzip2 archivo.bz2
  • Ver contenido: bzcat archivo.bz2

3.3.3. xz / unxz / xzcat

Compresión aún mayor (similar a 7z), usando LZMA2. Extensiones .xz.

  • Comprimir: xz archivoarchivo.xz
  • Descomprimir: unxz archivo.xz (o xz -d)
  • Ver: xzcat archivo.xz

Opciones de hilos: -T0 usa todos los núcleos, mejorando velocidad.

3.3.4. zip / unzip

Aunque es menos común en Linux para backups del sistema, puede aparecer en el examen. El comando zip empaqueta y comprime a la vez.

  • Crear zip: zip -r archivo.zip directorio/
  • Listar: unzip -l archivo.zip
  • Extraer: unzip archivo.zip -d destino/

No preserva por defecto permisos Unix ni propietarios (solo con --unix al crear/extraer, si el sistema lo soporta).

3.4. Ejemplos combinados y buenas prácticas

  • Copia de seguridad de /home excluyendo cachés:
    tar -czvf /backup/home.tar.gz /home --exclude='*.cache' --exclude='node_modules'
    
  • Transferir un árbol de directorios por ssh conservando atributos:
    tar -cpf - /origen | ssh destino 'tar -xpf - -C /destino'
    
  • Listar contenido de un tar.gz buscando un patrón:
    tar -tzvf copia.tar.gz | grep 'passwd'
    

3.5. Ejercicios – Archivado y compresión

  1. Crea un archivo .tar con el contenido de /var/log, muéstralo en pantalla durante la creación y comprímelo después con gzip sin tuberías (en dos pasos). Luego comprueba el tamaño de cada uno.
  2. Empaqueta el directorio /etc en un archivo .tar.bz2 excluyendo *.conf de forma anidada. Verifica que la exclusión funciona listando el contenido.
  3. Haz una copia completa y una incremental de /home/informe usando tar y un fichero de snapshot. Simula la restauración en otro directorio.
  4. Extrae únicamente los archivos passwd y group de un tarball de /etc que se encuentra en /tmp/etc.tar.gz hacia /tmp/restore.
  5. Comprime un archivo de log grande con xz con nivel máximo de compresión y usando todos los núcleos. Compara tiempo y tamaño con gzip.

Parte II: Permisos y atributos básicos de archivos

3.6. El modelo de permisos en Linux

Linux es un sistema multiusuario. Para proteger los archivos, cada uno tiene asociados:

  • Un propietario (usuario).
  • Un grupo propietario.
  • Tres conjuntos de permisos: para el usuario (u), para el grupo (g) y para otros (o).
  • Además, los permisos especiales: setuid, setgid y sticky bit.

Los permisos básicos son:

PermisoArchivo normalDirectorio
r (lectura)Permite leer el contenidoPermite listar los nombres de archivos (ls)
w (escritura)Permite modificar el contenidoPermite crear, renombrar, eliminar archivos dentro
x (ejecución)Permite ejecutar el archivo (si es binario o script)Permite atravesar el directorio (cd, acceder a sus archivos)

Los permisos se representan como una cadena de 10 caracteres en ls -l:

-rwxr-xr--  1 usuario grupo  4096 ago  3 10:00 script.sh
  • El primer carácter indica el tipo: - archivo normal, d directorio, l enlace simbólico, b/c dispositivo de bloques/caracteres.
  • Siguen 9 caracteres en bloques de 3: usuario, grupo, otros.

En el ejemplo: rwx (usuario: lectura, escritura, ejecución), r-x (grupo: lectura y ejecución), r-- (otros: solo lectura).

3.7. Interpretación numérica (octal)

Cada permiso se puede representar como un bit:

  • r = 4
  • w = 2
  • x = 1

La suma da el modo octal:

  • rwx = 7
  • rw- = 6
  • r-x = 5
  • r-- = 4
  • --x = 1

Así, los permisos rwxr-xr-- equivalen a 754.

3.8. Modificar permisos con chmod

3.8.1. Modo simbólico

chmod [ugoa][+-=][rwx] archivo
  • u usuario, g grupo, o otros, a todos.
  • + añadir, - quitar, = establecer exactamente.

Ejemplos:

chmod u+x script.sh        # añadir ejecución al usuario
chmod go-w archivo.txt     # quitar escritura a grupo y otros
chmod a=r archivo.txt      # todos solo lectura
chmod u=rwx,g=rx,o=rx dir  # establecer permisos específicos

Se pueden combinar: chmod u+x,go+r archivo.

3.8.2. Modo octal

chmod 755 script.sh   # rwxr-xr-x
chmod 600 clave.txt   # rw------- (solo el propietario)
chmod 644 doc.txt     # rw-r--r--

Es más rápido cuando se conocen los valores.

3.8.3. Opción recursiva -R

Aplica los permisos a todos los archivos y subdirectorios:

chmod -R 755 /var/www/misitio

¡Precaución! A veces no se desea que los archivos regulares tengan el mismo bit de ejecución que los directorios. En ese caso usar find con chmod simbólico por tipo.

3.9. Modificar propietario y grupo con chown y chgrp

3.9.1. chown

Cambia el propietario (y opcionalmente el grupo) de un archivo. Solo el root puede cambiar propietarios.

chown nuevo_usuario archivo
chown nuevo_usuario:nuevo_grupo archivo   # usuario y grupo
chown :nuevo_grupo archivo                # solo grupo (equivale a chgrp)

Opción recursiva -R: chown -R usuario:grupo /directorio.

3.9.2. chgrp

Cambia solo el grupo propietario. El usuario debe pertenecer al nuevo grupo (o ser root).

chgrp desarrolladores proyecto.c
chgrp -R staff /opt/datos

3.10. Permisos especiales

3.10.1. Setuid (SUID) – bit especial de ejecución

El bit SUID es un permiso especial de los sistemas Linux que, cuando está establecido en un archivo ejecutable, hace que el proceso se ejecute utilizando la identidad efectiva del propietario del archivo.

Esto permite que determinados programas realicen operaciones que requieren permisos diferentes a los del usuario que los inicia. Un ejemplo habitual en Linux es el programa encargado de gestionar las contraseñas del sistema.

El estado SUID puede identificarse mediante la letra s en los permisos del propietario:

chmod u+s archivo_ejecutable

También puede establecerse mediante notación octal utilizando el bit especial correspondiente:

chmod 4xxx archivo_ejecutable

Por ejemplo, si los permisos normales fueran 755, el bit especial se añadiría delante de ellos. Al consultar los permisos con ls -l, el resultado mostraría una s en la posición correspondiente.

Importante: el uso de SUID debe limitarse a programas que realmente lo necesiten, ya que un ejecutable con permisos especiales puede tener implicaciones importantes para la seguridad del sistema.

En ls -l aparece como rwsr-xr-x. Si el bit de ejecución no estaba activo, aparece S mayúscula (indica inconsistencia: setuid sin ejecución, poco útil).

3.10.2. Setgid (SGID) – 2 _ _ _

Similar pero a nivel de grupo. En archivos ejecutables: el proceso se ejecuta con los privilegios del grupo propietario.

En directorios: los archivos creados dentro heredan el grupo del directorio, no el grupo primario del usuario que los crea. Muy útil en carpetas compartidas.

chmod g+s directorio_compartido
chmod 2770 carpeta

Se muestra como rwxr-sr-x o rwxr-Sr-x.

3.10.3. Sticky bit – 1 _ _ _

Se aplica a directorios. Impide que un usuario pueda eliminar o renombrar archivos que no le pertenecen, aunque tenga permiso de escritura en el directorio. Ejemplo: /tmp y /var/tmp.

chmod +t /tmp   # simbólico
chmod 1777 /tmp # octal (1 + 777)

Se muestra con t en el lugar de ejecución de otros: drwxrwxrwt. Si el bit de ejecución de otros no existe, aparece T.

3.10.4. Ver y gestionar permisos especiales

Con ls -l se ven las banderas. Para asignar en octal se antepone el dígito correspondiente:

  • SUID=4, SGID=2, Sticky=1. Se suman si se necesita más de uno. Ej: chmod 5755 script → SUID+SGID (4+2=6) + permisos 755… Ojo, 6+755=6755? La notación octal es realmente un número de 4 dígitos: chmod 6755 (SUID+SGID, rwxr-xr-x). El primer dígito: 4 SUID, 2 SGID, 1 sticky. Se combinan sumándolos.

Ej: chmod 4750 (SUID, rwxr-x—), chmod 2775 (SGID), chmod 1770 (sticky).

3.11. La máscara de permisos por defecto: umask

umask define los permisos que se quitan a los nuevos archivos y directorios creados.

  • Para archivos regulares: los permisos base son 666 (rw-rw-rw-). Se resta la umask.
  • Para directorios: permisos base 777 (rwxrwxrwx). Se resta la umask.

La operación no es una resta aritmética sino un AND con el complemento. En la práctica:

  • umask 022 → archivos 644 (666 – 022), directorios 755 (777 – 022).
  • umask 002 → archivos 664, directorios 775 (útil en grupos de trabajo).
  • umask 077 → archivos 600, directorios 700 (muy restrictivo).

Ver umask actual: umask. Establecer: umask 027.

Normalmente se configura en ~/.bashrc o /etc/profile.

3.12. Atributos extendidos de archivos (chattr / lsattr)

Además de los permisos POSIX, los sistemas de archivos ext2/3/4 y XFS soportan atributos adicionales que modifican el comportamiento del archivo. Se gestionan con lsattr (listar) y chattr (cambiar). Solo root puede establecer la mayoría.

3.12.1. Atributos comunes

AtributoSignificado
a (append only)El archivo solo puede abrirse en modo añadir. No se puede modificar ni eliminar su contenido existente. Útil para logs.
i (inmutable)El archivo no puede ser modificado, renombrado, eliminado ni enlazado. Ni siquiera root puede (salvo que quite el atributo). Ideal para archivos de configuración críticos.
ANo actualiza la fecha de acceso (atime). Mejora rendimiento en accesos frecuentes.
SLas escrituras se realizan de forma sincrónica (como montaje con sync).
cEl archivo se comprime automáticamente en disco (si el FS lo soporta).
dExcluye el archivo de las copias de seguridad con dump.
eEl archivo utiliza extensiones (extents) para mapear bloques (no se puede quitar).
jLos datos se escriben en el journal antes que en el archivo (solo ext3/4 con journal de datos).

3.12.2. Uso de chattr y lsattr

Estas herramientas permiten consultar y gestionar los atributos especiales asociados a determinados archivos en Linux.

lsattr se utiliza para consultar los atributos actuales:

lsattr archivo
lsattr -R directorio/   # consultar recursivamente

Con chattr se pueden modificar estos atributos. Por ejemplo, el atributo inmutable impide realizar determinadas modificaciones sobre un archivo mientras permanezca activo, mientras que el atributo append-only permite añadir información sin modificar el contenido existente.

Los atributos pueden establecerse o eliminarse mediante la sintaxis de modificación de chattr. Para trabajar con ellos es importante comprobar primero los atributos actuales y tener en cuenta los permisos necesarios para realizar cambios.

Ejemplos prácticos

El comando chattr permite modificar determinados atributos especiales de los archivos en sistemas de archivos que los soportan. Estos atributos pueden utilizarse para añadir una capa adicional de protección sobre archivos importantes.

Proteger un archivo con el atributo inmutable

El atributo inmutable se establece mediante +i. Cuando un archivo tiene este atributo, no se puede modificar, eliminar ni renombrar normalmente mientras el atributo permanezca activo.

Por ejemplo, en un entorno de laboratorio podemos proteger un archivo de configuración:

chattr +i /ruta/de/ejemplo/config.conf

Para comprobar el atributo podemos utilizar:

lsattr /ruta/de/ejemplo/config.conf

Para volver a permitir modificaciones, primero debemos retirar el atributo:

chattr -i /ruta/de/ejemplo/config.conf

Permitir únicamente añadir información

El atributo solo añadir (append-only) se establece mediante +a. A diferencia del atributo inmutable, el archivo puede seguir recibiendo nuevas entradas, pero su contenido existente no puede modificarse o eliminarse mediante las operaciones habituales.

Este comportamiento resulta especialmente útil para archivos de registro. Por ejemplo:

chattr +a /ruta/de/ejemplo/registro.log

Mientras el atributo esté activo, una aplicación puede seguir añadiendo nuevas líneas al registro, pero no debería poder modificar las entradas que ya existen.

Cuando sea necesario retirar esta protección, se utiliza:

chattr -a /ruta/de/ejemplo/registro.log

Inmutable frente a solo añadir

  • +i — inmutable: bloquea las modificaciones, eliminación y renombrado del archivo.
  • +a — solo añadir: protege el contenido existente, pero permite añadir nueva información.
  • lsattr: permite consultar los atributos especiales de un archivo.
  • chattr: permite establecer o retirar estos atributos.

Consejo para el LFCS: si el objetivo es que un archivo no pueda modificarse ni eliminarse, piensa en +i. Si necesitas que un archivo pueda seguir recibiendo nuevas entradas, pero quieres proteger su contenido anterior, piensa en +a.

3.13. Ejercicios – Permisos y atributos

  1. Crea un directorio proyecto con permisos 770 y grupo staff. Configura el bit SGID para que los archivos hereden el grupo. Comprueba creando un archivo dentro con otro usuario del grupo.
  2. Encuentra todos los archivos con SUID activo en el sistema: find / -perm -4000 -ls 2>/dev/null. Comenta el riesgo.
  3. Establece la umask 027 y crea un archivo y un directorio. Verifica sus permisos resultantes. Explica por qué el archivo no tiene ejecución aunque el directorio sí.
  4. Protege el archivo /etc/hostname con el atributo inmutable. Intenta modificarlo como root y observa el error. Luego quítalo y restaura.
  5. Simula un entorno compartido: crea un directorio /compartido con propietario root, grupo shared (con varios usuarios), permisos 2770 (SGID, rwxrwx—). Comprueba que los archivos que crea cada usuario pertenecen al grupo shared y que un usuario puede borrar solo sus propios archivos (sin sticky). Añade entonces el sticky bit y repite la prueba de borrado.
  6. Convierte un script simple (script.sh) con chmod +x y luego aplica SUID al propietario (root). Ejecútalo como usuario normal: ¿qué muestra id dentro del script? Asegúrate de entender las implicaciones de seguridad.

Resumen y consejos LFCS

  • Domina tar con compresión: es la herramienta universal para mover conjuntos de archivos.
  • Conoce las diferencias entre gzip, bzip2, xz y cuándo usar cada uno (velocidad vs compresión).
  • Los permisos Unix son el primer nivel de seguridad. Entiende bien chmod en octal y simbólico, así como el impacto de chown/chgrp.
  • Los permisos especiales (SUID, SGID, sticky) aparecen con frecuencia en preguntas del examen. Recuerda el significado y cómo identificarlos (s, t).
  • umask define el comportamiento por defecto; saber interpretarla y modificarla es fundamental.
  • Los atributos con chattr / lsattr ofrecen una capa adicional de protección; memoriza al menos i y a.
  • Practica los ejercicios en una máquina de laboratorio hasta sentirte seguro.
Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio