Objetivo:
Diagnosticar y resolver un fallo de acceso denegado a una carpeta o recurso compartido en un sistema Linux, aprendiendo a auditar y corregir de forma metódica los permisos tradicionales de usuario/grupo/otros, la propiedad de los archivos, los permisos avanzados mediante ACLs (Access Control Lists) y las restricciones a nivel de exportación de red.
Escenario:
- Herramientas: Terminal Linux, comandos
ls -l,getfacl/setfacl,chown,chmod, y auditoría de accesos. - Conceptos analizados: Máscaras de permisos POSIX, herencia de directorios, pertenencia a grupos suplementarios, listas de control de acceso extendidas y verificación de permisos de red (NFS/Samba).
- Proceso clave: Comprobación de la identidad del usuario y sus grupos activos, inspección de permisos y propietario de la ruta compartida, análisis de ACLs aplicadas y reconfiguración de los accesos necesarios.
Escenario Real: Usuario sin privilegios para consultar un recurso departamental
Un empleado de la organización intenta acceder a una carpeta compartida en el servidor para consultar documentación de su departamento, pero el sistema le devuelve de forma persistente un error de "Permiso denegado" (Permission denied). Como administrador de sistemas, debes realizar un diagnóstico estructurado para identificar si el fallo proviene del propietario, de los permisos de grupo o de una ACL restrictiva.
NOTA: Para realizar esta práctica con total seguridad, utilizaremos comandos de consulta e inspección sobre los metadatos de los ficheros y directorios, evitando modificar configuraciones sin antes comprender el origen del fallo.
Instrucciones:
Fase 1: Verificación de la identidad del usuario y grupos activos:
- Comprobar el identificador de usuario y los grupos suplementarios a los que pertenece el usuario afectado:
id - Verificar si el usuario forma parte del grupo de trabajo propietario del recurso compartido.
Fase 2: Inspección de permisos tradicionales y propietario del directorio:
- Listar los permisos detallados, el usuario propietario y el grupo asignado al directorio compartido:
ls -ld /ruta/de/la/carpeta/compartida - Comprobar si los permisos de lectura (
r), escritura (w) o ejecución (x) están correctamente asignados para el usuario, el grupo o el resto del sistema.
Fase 3: Auditoría de permisos avanzados (ACL - Access Control Lists):
- Verificar si la carpeta utiliza listas de control de acceso avanzadas que modifiquen o amplíen los permisos tradicionales:
getfacl /ruta/de/la/carpeta/compartida - Comprobar si existen restricciones heredadas en los subdirectorios o ficheros internos del recurso compartido.
Fase 4: Corrección de privilegios y propiedad de la ruta:
- Modificar el grupo propietario del recurso para adaptarlo al departamento correspondiente si existía una discrepancia:
sudo chown -R :nombre_grupo /ruta/de/la/carpeta/compartida - Otorgar los permisos de acceso y ejecución necesarios mediante comandos de permisos tradicionales o estableciendo una ACL específica para el usuario o grupo:
sudo setfacl -R -m u:nombre_usuario:rwx /ruta/de/la/carpeta/compartida
Verificación:
- Comprobar con el usuario afectado que ahora puede acceder al directorio compartido, listar su contenido y modificar o crear ficheros según sus funciones.
- Verificar mediante
getfaclque las reglas de control de acceso aplicadas se han propagado correctamente.
Posibles errores y resolución de problemas:
Si a pesar de haber otorgado permisos de lectura y escritura en una carpeta a un usuario, este sigue sin poder acceder al interior de la misma obteniendo un error de acceso denegado, se debe a la ausencia del permiso de ejecución en el directorio.
Solución: En Linux, el permiso de ejecución (
x) en un directorio es obligatorio para poder atravesarlo o consultar los metadatos de sus ficheros internos. Aplica el permiso de ejecución consudo chmod +x /ruta/de/la/carpeta/compartida.
Alternativa directa: Comprobación rápida de permisos detallados
Si necesitas auditar de forma inmediata los permisos detallados y la estructura completa de un directorio compartido y sus niveles inferiores sin ejecutar consultas complejas, puedes emplear el listado recursivo optimizado:
ls -lR /ruta/de/la/carpeta/compartida
Preguntas de reflexión:
- ¿Por qué un usuario con permisos de lectura (
r) sobre los ficheros internos de un directorio no puede acceder a los mismos si carece del permiso de ejecución (x) en la carpeta contenedora? - ¿Qué diferencia técnica fundamental existe entre los permisos tradicionales de Linux (Usuario/Grupo/Otros) y las Listas de Control de Acceso (ACLs)?
- ¿Qué implicaciones de seguridad tiene asignar permisos de acceso globales excesivamente laxos (como
777) en una carpeta compartida frente a utilizar grupos o ACLs específicas? - ¿Cómo influye el mapeo de identidades y UID/GID al acceder a una carpeta compartida a través de protocolos de red como NFS o Samba en comparación con el acceso local en la misma máquina?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Por qué un usuario con permisos de lectura (r) sobre los ficheros internos de un directorio no puede acceder a los mismos si carece del permiso de ejecución (x) en la carpeta contenedora?
Porque en los sistemas de ficheros UNIX/Linux, el permiso de ejecución sobre un directorio otorga el derecho de "búsqueda" o traversia; es decir, la capacidad de atravesar el directorio para resolver las rutas internas y consultar los inodos de los ficheros que contiene. Sin el bit x activo, el sistema bloquea el acceso a cualquier ruta situada dentro de esa carpeta, independientemente de los permisos que tengan los ficheros en sí.
2. ¿Qué diferencia técnica fundamental existe entre los permisos tradicionales de Linux (Usuario/Grupo/Otros) y las Listas de Control de Acceso (ACLs)?
Los permisos tradicionales limitan el control de acceso a un único usuario propietario y a un único grupo asignado al fichero, lo que resulta restrictivo para entornos colaborativos complejos. Por el contrario, las ACLs permiten definir reglas de permisos granulares específicas para múltiples usuarios y grupos adicionales de forma independiente sobre un mismo objeto.
3. ¿Qué implicaciones de seguridad tiene asignar permisos de acceso globales excesivamente laxos (como 777) en una carpeta compartida frente a utilizar grupos o ACLs específicas?
Asignar permisos 777 significa que cualquier usuario local o proceso del sistema puede leer, modificar y borrar el contenido de la carpeta compartida sin restricciones, lo que vulnera el principio de mínimo privilegio y expone los datos confidenciales a modificaciones accidentales o maliciosas por parte de usuarios no autorizados.
4. ¿Cómo influye el mapeo de identidades y UID/GID al acceder a una carpeta compartida a través de protocolos de red como NFS o Samba en comparación con el acceso local en la misma máquina?
En local, el kernel evalúa los permisos basándose en los UID y GID numéricos del usuario autenticado en el sistema. En entornos de red (como NFS), si los identificadores numéricos (UID) no coinciden entre el cliente y el servidor, o si no se configuran correctamente las políticas de mapeo de usuarios anónimos o invitados, el servidor interpretará las peticiones con privilegios erróneos, denegando el acceso aunque los permisos locales parezcan correctos.