Cómo recuperar permisos y ACLs perdidos tras restaurar un backup en un servidor Linux sin interrumpir servicios (paso a paso)
Por Kevin Marcondes · Publicado el · 9 min de lectura
¿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 casoVer también
- 502 Bad Gateway intermitente en Docker Compose con Nginx y PHP‑FPM: cómo diagnosticar y corregir timeouts y exceso de conexiones
- Cómo diagnosticar y capturar paquetes por intermitencias de red entre contenedores Docker en Debian
- Cómo detectar y corregir inconsistencias de SKUs duplicados entre WooCommerce y ERP sin perder pedidos
- Cómo resolver el error 'Too many open files' en Linux en servidores PHP‑FPM durante picos de carga