Gestión de permisos

La gestión de permisos en GNU/Linux es el mecanismo fundamental de control de acceso que determina qué usuarios o grupos pueden leer, modificar o ejecutar archivos y directorios, garantizando la seguridad y el aislamiento de la información en el sistema.

Para un administrador de sistemas, dominar el modelo clásico de propietarios, los modificadores de permisos (chmod, chown, chgrp) y el uso avanzado de permisos especiales (SUID, SGID y Sticky Bit) es indispensable para asegurar una correcta política de privilegios.

Modelo Básico de Permisos y Propiedad

Cada archivo y directorio en Linux está asociado estrictamente a una entidad propietaria y a un grupo, rigiéndose por tres tipos de acciones básicas:

    Permisos de Lectura, Escritura y Ejecución: Se aplican a tres categorías de usuarios: el propietario (u), el grupo asignado (g) y los demás usuarios del sistema (o). La Lectura (r) permite ver el contenido de un archivo o listar un directorio; la Escritura (w) permite modificar archivos o crear/borrar elementos dentro de un directorio; y la Ejecución (x) permite ejecutar archivos binarios/scripts o atravesar un directorio.
    Propietario y Grupo: El Propietario (User) es el usuario creador o dueño del recurso, con capacidad máxima para modificar sus permisos. El Grupo (Group) agota a un conjunto de usuarios que comparten privilegios comunes sobre ese archivo.
    Comandos de Modificación (chmod, chown y chgrp):
    • chmod: Modifica los permisos de acceso de un archivo o directorio, ya sea mediante notación simbólica (ej. chmod u+x) o numérica/octal (ej. chmod 755).
    • chown: Cambia el usuario propietario (y opcionalmente el grupo) de un recurso (ej. chown usuario:grupo archivo).
    • chgrp: Modifica exclusivamente el grupo asignado a un archivo o directorio (ej. chgrp nuevo_grupo archivo).

Permisos Especiales (SUID, SGID y Sticky Bit)

Además de los permisos estándar, Linux soporta tres modificadores avanzados de control de acceso que alteran el comportamiento habitual de ejecución y almacenamiento:

    SUID (Set User ID): Permite que un archivo ejecutable se ejecute temporalmente con los privilegios del propietario del archivo (habitualmente root), en lugar de con los privilegios del usuario que lo invoca (representado numéricamente con un 4 en la posición más alta, ej. 4755). Un ejemplo clásico es el comando passwd, que necesita modificar /etc/shadow temporalmente con permisos de superusuario.
    SGID (Set Group ID): Aplicado a un archivo, permite que se ejecute con los privilegios del grupo propietario. Aplicado a un directorio, fuerza a que todos los subdirectorios y archivos creados dentro de él hereden automáticamente el grupo propietario de dicho directorio padre, facilitando el trabajo colaborativo (representado con un 2, ej. 2770).
    Sticky Bit (Bit de Persistencia o Inmovilidad): Aplicado tradicionalmente en directorios públicos compartidos (como /tmp), garantiza que únicamente el propietario de un archivo específico (o el usuario root) pueda borrar o renombrar dicho archivo, impidiendo que otros usuarios con permisos de escritura en el directorio eliminen ficheros ajenos (representado con un 1, ej. 1777).

Analogía: Imagina un casillero o buzón de documentos en una oficina compartida. Los permisos básicos (lectura, escritura y ejecución) equivalen a las llaves que determinan quién puede abrir la cerradura para leer un informe, quién puede reescribirlo y quién puede llevárselo puesto; el propietario y el grupo definen al autor principal y al departamento responsable del documento; los comandos chmod, chown y chgrp son las órdenes administrativas para cambiar las cerraduras o reasignar responsabilidades; el SUID es como una llave maestra temporal que permite a un empleado común abrir una puerta blindada solo durante los dos segundos que dura una tarea autorizada; el SGID en un directorio es una norma de oficina que obliga a que cualquier documento que se archive allí lleve automáticamente el sello del departamento; y el Sticky Bit es un buzón común donde cualquiera puede echar cartas, pero solo el dueño de cada carta (o el director general) tiene permiso para sacarla o destruirla.

Actividad práctica

Objetivo:

Modificar permisos y propietarios de archivos utilizando comandos de consola y analizar el funcionamiento de los permisos especiales.

Tareas:

  1. Crea un archivo de texto de pruebas en la terminal y utiliza el comando chmod 644 para establecer permisos de lectura y escritura para el propietario y solo lectura para el grupo y otros.
  2. Cambia el propietario del archivo recién creado utilizando el comando sudo chown otro_usuario:nuevo_grupo archivo.txt.
  3. Investiga los permisos actuales de un directorio compartido del sistema como /tmp ejecutando ls -ld /tmp para identificar la presencia del Sticky Bit (representado con la letra t en los permisos).
  4. Reflexiona sobre los riesgos de seguridad que implica aplicar de forma incorrecta el permiso SUID (ej. 4755) a un script o binario ejecutable desconocido.

Preguntas de reflexión:

    ¿Qué diferencias operativas existen entre asignar permisos usando la notación simbólica frente a la notación octal (numérica)?
    ¿Por qué el permiso SUID es una herramienta crítica que debe auditarse estrictamente para evitar vulnerabilidades de escalada de privilegios?
    ¿Qué utilidad aporta el Sticky Bit en directorios compartidos como /tmp frente a la supresión accidental o malintencionada de archivos entre usuarios?
    ¿Cómo simplifica la administración colaborativa el uso del bit SGID en directorios compartidos de equipos de trabajo?
    ¿Qué sucede con los permisos de un archivo o directorio si un usuario sin privilegios de root intenta modificar su propietario usando el comando chown?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué diferencia hay entre notación simbólica y octal?

La notación simbólica utiliza letras y operadores directos (como chmod u+x o g-w) para añadir o quitar permisos de forma específica sin alterar los demás. La notación octal o numérica utiliza un código de tres o cuatro dígitos (como 755 o 644) que define de golpe y de manera absoluta el estado exacto de todos los permisos (lectura, escritura y ejecución) para cada una de las tres categorías de usuarios.


2. ¿Por qué el SUID es crítico para la seguridad?

Porque otorga temporalmente los privilegios del propietario del archivo (frecuentemente el superusuario root) a cualquier usuario que ejecute el programa. Si un archivo con SUID contiene fallos de diseño o vulnerabilidades de código (como desbordamientos de búfer), un atacante puede explotarlo para ejecutar comandos arbitrarios con privilegios máximos y tomar el control total del sistema operativo.


3. ¿Qué utilidad aporta el Sticky Bit en /tmp?

En un directorio público donde cualquier usuario puede crear archivos, el Sticky Bit restringe los derechos de borrado de forma que un usuario solo pueda eliminar los archivos de su absoluta propiedad. Esto evita que usuarios malintencionados o descuidados borren archivos temporales generados por otros usuarios o por el propio sistema operativo.


4. ¿Cómo simplifica el SGID la administración colaborativa?

Por defecto, al crear un archivo, Linux le asigna como grupo propietario el grupo principal del usuario creador. Al activar el SGID en un directorio compartido, se obliga a que cualquier archivo o subcarpeta creada dentro de él herede automáticamente el grupo del directorio principal, permitiendo que todos los miembros del equipo tengan acceso inmediato y conjunto sin necesidad de reasignar permisos manualmente.


5. ¿Qué sucede si un usuario sin privilegios intenta usar chown?

El sistema operativo denegará la operación y arrojará un error de permisos insuficientes. Cambiar el propietario de un archivo es una prerrogativa de seguridad reservada exclusivamente al usuario administrador (root), evitando que los usuarios suplanten la autoría de los recursos o eludan cuotas y restricciones de espacio.