Implementación de permisos POSIX básicos

En esta práctica del módulo de Sistemas Operativos Monopuesto, profundizaremos en el modelo de control de acceso y seguridad mediante permisos. Aunque el sistema de permisos POSIX es nativo de entornos GNU/Linux, aprenderemos a implementarlo con comandos de consola y veremos su equivalente práctico en entornos Windows utilizando la herramienta de gestión de ACLs.

Objetivo:

Crear estructuras de directorios y ficheros, aplicar permisos específicos (como 750 y 644 en Linux o sus equivalentes en Windows) y comprobar de forma empírica el comportamiento del sistema ante accesos de distintos usuarios.

Escenario:

  • Un equipo de prácticas con un sistema operativo GNU/Linux o una terminal de comandos en Windows.
  • Permisos de superusuario (sudo / Administrador) para la creación de usuarios adicionales y modificación de permisos avanzados.

Instrucciones:

Opción A: Entorno GNU/Linux (Permisos POSIX Estándar)

  1. Creación de usuarios de prueba:
    • Abre una terminal con privilegios de superusuario y crea dos usuarios distintos:
      sudo useradd -m -s /bin/bash user1
      sudo useradd -m -s /bin/bash user2
    • Asigna una contraseña a cada uno: sudo passwd user1 y sudo passwd user2.
  2. Creación de la estructura de archivos y aplicación de permisos numéricos:
    • Inicia sesión o cambia al usuario user1: su - user1
    • Crea un directorio de trabajo y un fichero de texto dentro de él:
      mkdir proyecto_seguro && cd proyecto_seguro
      echo "Información confidencial del proyecto" > documento.txt
    • Aplica permisos restrictivos al directorio utilizando notación octal POSIX (750: rwx para el propietario, rx para el grupo, ninguno para otros):
      chmod 750 . (o sobre el directorio chmod 750 ~/proyecto_seguro)
    • Aplica permisos estándar al fichero interior (644: rw- para propietario, r-- para grupo y otros):
      chmod 644 documento.txt
    • Comprueba el estado de los permisos ejecutando: ls -l y ls -ld .
  3. Comprobación de acceso con distintos usuarios:
    • Abre otra terminal (o cambia a user2 ejecutando su - user2).
    • Intenta acceder al directorio privado de user1 y leer el archivo:
      cat /home/user1/proyecto_seguro/documento.txt
    • Observa el mensaje de error denegado (Permission denied) que devuelve el sistema operativo al no pertenecer al grupo ni ser el propietario.

Opción B: Entorno Windows (Gestión mediante comandos icacls)

  1. Preparación del directorio de pruebas en la terminal:
    • Abre el Símbolo del sistema (CMD) o PowerShell con privilegios de administrador.
    • Crea un directorio y un archivo de prueba:
      mkdir C:\practica_acl
      echo Datos seguros de Windows > C:\practica_acl\secreto.txt
  2. Aplicación y modificación de permisos con icacls:
    • Para consultar los permisos actuales heredados de la carpeta, ejecuta:
      icacls C:\practica_acl
    • Para aplicar una regla equivalente a los permisos restrictivos (bloquear herencia y otorgar control total solo al administrador denegando el acceso a usuarios invitados o estándar), utiliza los comandos de control de listas de acceso:
      icacls C:\practica_acl /inheritance:d
      icacls C:\practica_acl /remove Users

Verificación

  1. Comprueba que has creado correctamente la estructura de directorios y ficheros en la plataforma elegida.
  2. Verifica mediante comandos de listado (ls -l o icacls) que los permisos octales o de listas de control se han aplicado de forma precisa.
  3. Confirma que un usuario sin privilegios o ajeno al grupo obtiene un error de acceso denegado al intentar consultar el contenido protegido.

Preguntas de reflexión:

  1. En un sistema POSIX clásico, ¿qué representan exactamente cada uno de los tres dígitos que componen un comando de permisos como chmod 750 (propietario, grupo, otros) y cómo se calculan sumando los valores binarios r (4), w (2) y x (1)?
  2. ¿Por qué es un riesgo de seguridad dejar permisos abiertos (como 777) en directorios compartidos dentro de un sistema operativo multiusuario y qué principio de mínimo privilegio se debe aplicar?
  3. ¿Qué diferencias fundamentales existen entre el modelo de permisos POSIX tradicional (basado en tres roles fijos: UGO) y las Listas de Control de Acceso (ACL) avanzadas utilizadas tanto en sistemas Linux modernos como en NTFS de Windows?
Haz clic aquí para ver la solución orientativa

1. En un sistema POSIX clásico, ¿qué representan exactamente cada uno de los tres dígitos que componen un comando de permisos como chmod 750...

Los tres dígitos de un permiso octal POSIX representan de izquierda a derecha: el propietario (User), el grupo principal asignado al archivo (Group) y el resto de usuarios del sistema (Others). Cada dígito se calcula sumando los valores binarios de los permisos básicos: Lectura (r = 4), Escritura (w = 2) y Ejecución (x = 1).

Por tanto, en el caso de 750: el dígito 7 resulta de sumar 4+2+1 (Lectura, Escritura y Ejecución para el dueño); el dígito 5 resulta de sumar 4+0+1 (Lectura y Ejecución, sin escritura para el grupo); y el dígito 0 indica ausencia total de permisos para el resto de usuarios.


2. ¿Por qué es un riesgo de seguridad dejar permisos abiertos (como 777) en directorios compartidos...

Asignar permisos totales de lectura, escritura y ejecución a cualquier usuario (777) significa que cualquier cuenta local del sistema, proceso con privilegios estándar o software malicioso (malware) ejecutado en la máquina puede modificar, borrar o inyectar archivos arbitrarios en ese directorio.

Esto vulnera directamente el principio de mínimo privilegio, una norma básica de ciberseguridad que establece que cualquier usuario o proceso debe disponer únicamente de los permisos estrictamente necesarios para desempeñar su función, reduciendo así la superficie de ataque y el impacto de posibles brechas de seguridad.


3. ¿Qué diferencias fundamentales existen entre el modelo de permisos POSIX tradicional... y las Listas de Control de Acceso (ACL)?

El modelo POSIX tradicional es rígido porque solo permite definir permisos para tres entidades fijas: el propietario individual, los miembros de un único grupo asignado y el resto del mundo.

En contraste, las Listas de Control de Acceso (ACLs) permiten asociar reglas de permisos granulares y personalizadas a múltiples usuarios y grupos específicos de forma individual para un mismo fichero o directorio, sin necesidad de alterar el grupo principal ni recurrir a configuraciones complejas o inseguras. Este modelo es el estándar nativo en NTFS de Windows y está plenamente soportado en ext4/Btrfs mediante comandos como setfacl y getfacl.