Permisos de usuario en Linux

Los permisos en Linux son fundamentales para mantener la seguridad y estabilidad del sistema. Como sysadmin, entender los permisos avanzados te permitirá controlar el acceso a archivos, directorios y servicios de manera precisa.


Introducción

Linux utiliza un modelo de permisos basado en usuarios, grupos y otros:

  • Usuario propietario (owner)
  • Grupo (group)
  • Otros (others)

Cada archivo o directorio tiene tres tipos de permisos:

  • r → lectura
  • w → escritura
  • x → ejecución

En sistemas multiusuario, la correcta configuración de permisos es clave para la seguridad.


Ver permisos

ls -l /ruta/al/archivo
# Salida ejemplo:
# -rwxr-xr-- 1 david admin 1024 Abr 7 12:00 script.sh

Interpretación:

  • Primer carácter: tipo de archivo (- regular, d directorio, l enlace)
  • Siguientes 3: permisos del propietario
  • Siguientes 3: permisos del grupo
  • Últimos 3: permisos de otros

Modificar permisos con chmod

Notación simbólica

chmod u+x archivo.sh   # Añadir ejecución al usuario
chmod g-w archivo.txt  # Quitar escritura al grupo
chmod o+r archivo.log  # Añadir lectura a otros

Notación octal

  • r = 4, w = 2, x = 1
  • Combinación = suma de valores
chmod 755 archivo.sh   # rwx r-x r-x
chmod 644 archivo.txt  # rw- r-- r--

Cambiar propietario y grupo

chown david:admin archivo.txt
# Propietario = david, Grupo = admin
  • Solo root puede cambiar propietario
  • Usuarios pueden cambiar grupo de archivos que posean si pertenecen a ese grupo

Permisos especiales

SUID (Set User ID)

  • Ejecutable corre con permisos del propietario, no del usuario que lo ejecuta
  • Indicador en permisos: s en posición de usuario
chmod u+s /usr/bin/passwd

SGID (Set Group ID)

  • Archivos: ejecución corre con permisos del grupo propietario
  • Directorios: nuevos archivos creados heredan el grupo del directorio
chmod g+s /opt/proyectos

Sticky bit

  • Solo el propietario del archivo o root puede borrarlo en un directorio
  • Muy usado en /tmp

```bash id="perm7" chmod +t /tmp


---

## ACL (Access Control Lists)

Permite permisos **más finos** por usuario o grupo:

```bash
# Ver ACL
getfacl archivo.txt

# Asignar permisos específicos a un usuario
setfacl -m u:usuario:rwx archivo.txt

  • Útil en entornos complejos con múltiples usuarios
  • ACL se hereda si el sistema de archivos lo soporta

Umask

Define permisos por defecto al crear archivos:

umask           # Ver valor actual
umask 022       # Archivos 644, directorios 755
  • Controla seguridad inicial de nuevos archivos

Puntos críticos para sysadmins

Permisos demasiado laxos

  • Archivos sensibles accesibles a otros → riesgo de seguridad

Permisos demasiado restrictivos

  • Servicios o usuarios no pueden ejecutar tareas necesarias → fallos

No usar SUID/SGID correctamente

  • Puede ser un vector de ataque

Ignorar ACL

  • Usuarios pueden perder acceso inesperadamente

Ejercicios prácticos

Cambiar permisos de un script para que el usuario y grupo puedan ejecutarlo, otros solo leerlo:

```bash id="lab1" chmod 750 script.sh


### Asignar SUID a un ejecutable (solo ejemplo seguro en entorno controlado):

```bash id="lab2"
chmod u+s /usr/local/bin/mi_programa

Crear ACL para que un usuario específico tenga acceso completo a un archivo:

bash id="lab3" setfacl -m u:pepe:rwx archivo.txt getfacl archivo.txt


Mentalidad

  • Siempre evalúa quién necesita acceso y por qué
  • Aplica el principio de mínimos privilegios
  • Combina permisos, SUID/SGID, sticky bit y ACL para un control granular
  • Verifica permisos antes de implementar servicios críticos

Resumen

  • Permisos = control de acceso básico: rwx para usuario, grupo y otros
  • SUID/SGID/Sticky bit = control avanzado
  • ACL = permisos específicos por usuario o grupo
  • Umask = define permisos por defecto
  • Correcta gestión de permisos = seguridad + funcionalidad

Siguiente paso

En el siguiente módulo entrarás en:

Procesos y gestión de servicios (procesos.md)

Donde verás:

  • Cómo Linux maneja procesos
  • Prioridades y señales
  • Gestión de servicios y demonios