Cómo recuperar permisos y ACLs perdidos tras restaurar un backup en un servidor Linux sin interrumpir servicios (paso a paso)

Por · Publicado el · 9 min de lectura

Portátil con teclado retroiluminado rojo y pantalla mostrando paneles de interfaz digital
Imagen tecnológica adecuada para guías técnicas sobre permisos y ACLs en Linux. Foto: Rafael Minguet Delgado / Pexels

¿Cómo recuperar permisos y ACLs perdidos tras una restauración de backup en un servidor Linux sin parar servicios? Corrige metadatos (permisos, propietarios, ACLs y xattrs) de forma segura, manteniendo procesos en ejecución. Aquí verás cómo diagnosticar los cambios, restaurar solo atributos desde un snapshot o referencia confiable y validar el resultado antes de cerrar el incidente.

Qué se pierde realmente cuando el backup ignora metadatos

Cuando la restauración no preserva metadatos, se pierden los modos (chmod), propietarios y grupos (chown), ACLs, atributos extendidos (xattrs) y, en entornos con SELinux, los contextos. Los servicios pueden seguir en ejecución, pero al reabrir archivos o al escribir de nuevo pueden aparecer fallos.

Los síntomas comunes ayudan a priorizar la corrección inmediata. Úsalos para acotar el alcance y reducir el riesgo de cambios amplios e innecesarios.

  • 403/401 en el servidor web tras restaurar el sitio aunque el contenido esté íntegro.
  • Servicios que no pueden crear archivos en directorios de spool/cache por falta de permisos.
  • La base de datos no accede al directorio de datos por propietario incorrecto.
  • Scripts de systemd que no se ejecutan porque perdieron el bit de ejecución.
  • ACLs finas de carpetas compartidas desaparecieron, rompiendo accesos de equipo.
Componente (ejemplo) Directorio Propietario típico Permiso típico Observación
PostgreSQL /var/lib/postgresql/... postgres:postgres 700 Prefiera PITR para datos; aquí tratamos metadatos.
Nginx /var/www/site www-data:www-data dirs 750, files 640 Puede involucrar ACL para CI/CD.
Cola/Cache (Redis) /var/lib/redis redis:redis 770 Verificar systemd tmpfiles.d.
Jobs (app) /srv/app deploy:www-data dirs 755, files 644 Varía según stack y política interna.

Cómo diagnosticar qué permisos y ACLs se perdieron

El diagnóstico compara el estado actual con una referencia confiable. Valen un snapshot LVM, un backup anterior con metadatos o un servidor gemelo. Sin referencia, recolecta señales de riesgo y prioriza áreas críticas.

Verifica si el sistema de archivos soporta ACLs y que no esté montado con noacl. Genera inventarios de permisos y ACLs para comparar y versionar. Si aún no tienes snapshots automatizados, revisa el guía de snapshots LVM con Restic en S3.

# 1) Verifique opções de montagem (procure 'acl' ou 'noacl')
findmnt -no SOURCE,FSTYPE,OPTIONS /

# 2) Liste donos/permissões rapidamente (ex.: webroot)
find /var/www -xdev -printf '%m %u:%g %p\n' | head -n 20

# 3) Inspecione ACLs atuais (prefixos absolutos com -p)
getfacl -R -p /var/www | head -n 40

# 4) Se tiver um snapshot montado em /mnt/snap, gere dumps p/ diff
getfacl -R -p /mnt/snap/var/www > /root/acl.ref
getfacl -R -p /var/www         > /root/acl.now

diff -u /root/acl.ref /root/acl.now | sed -n '1,200p'

Cómo recuperar metadatos desde un snapshot sin detener servicios

Restaurar solo metadatos es posible y seguro para servicios en ejecución porque chmod/chown/setfacl son operaciones atómicas sobre los inodos. Ejecuta como root y prueba en un directorio de ensayo antes.

La estrategia: montar el backup en modo solo lectura, aplicar atributos sin copiar contenido y reescribir ACLs/xattrs. Haz un backup de los metadatos actuales para rollback rápido. Para sincronizaciones, recuerda rsync con -A -X; para migraciones con mínima indisponibilidad, consulta la guía de migración de host Docker con rsync.

  • Monta el snapshot/backup en modo lectura (ro).
  • Guarda metadatos actuales (ACLs/xattrs) para rollback.
  • Aplica atributos con cp --attributes-only.
  • Restaura ACLs con setfacl --restore y xattrs con setfattr --restore.
  • Trabaja con alcance quirúrgico: una ruta a la vez (p. ej.: /srv/app, /var/www).
# Exemplo: restaurar metadados de /srv/app a partir de /mnt/snap/srv/app
# 0) Backups de metadados atuais (rollback)
getfacl  -R -p /srv/app > /root/acl.before
getfattr --dump -R /srv/app > /root/xattr.before || true

# 1) Aplique donos/permissões/tempos SEM tocar no conteúdo
cp -a --attributes-only /mnt/snap/srv/app/. /srv/app/

# 2) Restaure ACLs a partir do snapshot
getfacl -R -p /mnt/snap/srv/app | setfacl --restore=-

# 3) Restaure atributos estendidos (xattrs)
getfattr --dump -R /mnt/snap/srv/app > /root/xattr.dump || true
setfattr --restore=/root/xattr.dump  || true

Restaurar ACLs y atributos extendidos con seguridad

Las ACLs controlan permisos finos además del trío propietario/grupo/otros. Los xattrs incluyen marcas como capabilities y, en algunas distribuciones, etiquetas MAC. Errores pueden bloquear accesos; valida siempre con pruebas en directorios pequeños primero.

Si SELinux está habilitado, vuelve a etiquetar contextos después de restaurar xattrs/ACLs. En AppArmor, revisa perfiles si las rutas cambiaron.

  • Usa getfacl -R -p en el snapshot y setfacl --restore en el destino.
  • Para xattrs, combina getfattr --dump y setfattr --restore.
  • En SELinux, ejecuta restorecon -RF en el alcance afectado.
  • Evita aplicar sobre / recursivamente; trabaja por componentes.
# ACLs e xattrs de um diretório compartilhado
getfacl -R -p /mnt/snap/data/shared | setfacl --restore=-
getfattr --dump -R /mnt/snap/data/shared > /root/shared.xattrs || true
setfattr --restore=/root/shared.xattrs || true

# SELinux (se aplicável)
command -v getenforce >/dev/null 2>&1 && restorecon -RF /data/shared || true

¿Y si no tengo un snapshot con metadatos correctos?

Sin una referencia, reconstruir metadatos requiere criterios. Para binarios y archivos de paquetes, restaura patrones desde la base del gestor de paquetes. Para datos de aplicación, adopta políticas conservadoras y revisiones por pares.

En sistemas RPM, los metadatos de paquetes pueden restablecerse desde la base local. En Debian/Ubuntu, revisa dpkg-statoverride y considera reinstalaciones controladas en ventana de mantenimiento.

  • RPM (RHEL/CentOS/Fedora): usa rpm --setperms -a y rpm --setugids -a.
  • Debian/Ubuntu: consulta dpkg-statoverride --list para directorios con overrides.
  • Para apps: adopta patrones seguros (dirs 750/755, files 640/644) y ajusta excepciones.
  • Revisa capabilities (getcap/setcap) si tu stack usa file capabilities.
# RPM-based: restaurar donos y permissões padrão de pacotes
rpm --setperms -a
rpm --setugids -a

# Debian/Ubuntu: listar overrides registrados
dpkg-statoverride --list | sed -n '1,50p'

# Capabilities (se usados)
getcap -r /usr/bin 2>/dev/null | sed -n '1,50p'

Cómo evitar que esto vuelva a ocurrir en el próximo backup

Evita pérdidas recurrentes garantizando que tu backup preserve metadatos. Las herramientas deben capturar ACLs y xattrs y restaurarlas por defecto. Además, genera dumps de referencia de ACL/xattrs junto al backup para auditoría.

Prueba restauraciones en un entorno de homologación periódicamente. Usa snapshots para reducir ventanas de inconsistencia y minimizar copias activas de servicios. Para una estrategia robusta, revisa backups incrementales cifrados.

  • Rsync: usa -aAX (archive + ACLs + xattrs) y valida con --dry-run.
  • Tar/bsdtar: incluye --acls y --xattrs al crear/extraer.
  • Adjunta dumps: getfacl --absolute-names y getfattr --dump en el mismo job.
  • Documenta el alcance: evita /proc, /sys, /dev, /run y mounts efímeros.
  • Programa pruebas de restauración con systemd timers y snapshots LVM.
# Exemplo de sincronização que preserva metadados (somente leitura no destino antes)
rsync -aAX --numeric-ids --info=SKIP,NAME --dry-run /origem/ /destino/

# Dumps anexos no job de backup
getfacl  -R --absolute-names /srv/app > /backup/refs/acl.srv-app
getfattr --dump -R              /srv/app > /backup/refs/xattr.srv-app

Verificaciones finales y auditoría tras la corrección

Valida que los servicios puedan crear y leer archivos. Busca bits peligrosos e inconsistencias. Genera un informe final comparando ACLs antes/después y archívalo en un lugar seguro.

Si unidades systemd o configuraciones fueron afectadas, un reload suele ser suficiente; no es necesario reiniciar servicios si el contenido no cambió. Para entornos con contenedores, consulta prácticas de bind mounts en la guía para mover volúmenes Docker.

  • Pruebas de escritura/lectura en la app (p. ej.: upload temporal).
  • Busca world-writable y SUID inesperados.
  • Compara ACLs antes/después para cerrar el incidente.
  • Considera un reload de servicios que leen configs bajo demanda.
# World-writable e SUID/SGID suspeitos no escopo tratado
find /srv/app -xdev \( -perm -0002 -o -perm -2000 -o -perm -4000 \) -ls

# Diff de ACLs
getfacl -R -p /srv/app > /root/acl.after
diff -u /root/acl.before /root/acl.after | sed -n '1,200p'

# Reload (se necessário)
systemctl daemon-reload || true
# Ex.: nginx, php-fpm, etc. (apenas reload se alterou configs)
# systemctl reload nginx || true

Recursos relacionados y cuándo usar PITR

Cuando la pérdida afecta solo datos de una base, considera restaurar a nivel de la propia base (PITR) en vez de manipular los archivos del data directory. Para backups de sistema de archivos, los snapshots reducen riesgo y preservan metadatos.

Consulta materiales prácticos para implementar snapshots y rutinas de backup verificables en servidores Linux. Para PostgreSQL, el artículo sobre PITR sin tiempo de inactividad profundiza en la estrategia.

Preguntas frecuentes

¿Necesito detener los servicios para restaurar permisos y ACLs?

En la mayoría de los casos, no. chmod, chown y setfacl son operaciones atómicas y no requieren reinicio. Si no modificaste el contenido, un reload de servicios puede bastar cuando hay lectura dinámica de configuraciones.

¿Puedo recuperar ACLs de un backup hecho con tar o rsync común?

Sí, si el backup almacenó ACLs y xattrs. Con tar, usa las opciones --acls y --xattrs. Con rsync, preserva con -A y -X. Sin esos metadatos, usa una referencia (snapshot/host gemelo) para reconstituir ACLs.

¿Y si el sistema de archivos está montado con noacl?

Vuelve a habilitar soporte de ACLs remontando con la opción acl o configurándolo en /etc/fstab. Sin soporte de ACLs, setfacl no tendrá efecto y las permisiones finas no estarán disponibles.

¿Cómo tratar volúmenes Docker o bind mounts durante la corrección?

Ajusta propietarios/permisos/ACLs en el host, en los directorios reales de los volúmenes. Mapea los UIDs/GIDs usados por los contenedores y aplica chown/chmod/setfacl en la ruta del volumen, evitando alterar capas de imagen.

¿Reinstalar paquetes corrige permisos del sistema?

En distribuciones RPM, rpm --setperms/--setugids restaura a los valores por defecto del paquete. En Debian/Ubuntu, reinstalar puede restaurar valores por defecto, pero puede sobrescribir configuraciones. Planifica en ventana de mantenimiento y haz backup previo.

¿Necesitas ayuda ahora?

Si estás frente a una restauración que rompió permisos y ACLs, podemos diseñar un plan seguro y aplicar correcciones sin interrumpir servicios.

Hablar sobre tu caso

Ver también