Saltar al contenido principal

Capítulo 5.3 - Permisos Avanzados

Objetivos de Aprendizaje​

Al final de este capítulo, usted será capaz de:

  • Comprender los permisos especiales (SUID, SGID, Sticky Bit)
  • Utilizar las ACL (Access Control Lists)
  • Gestionar los permisos de manera avanzada
  • Comprender umask y permisos predeterminados

Permisos Especiales​

SUID (Set User ID)​

Comportamiento:

  • El archivo se ejecuta con los permisos del propietario
  • No del usuario que lo ejecuta
# Definir SUID
chmod u+s archivo
chmod 4755 archivo # 4 = SUID

# Ver (s en lugar de x)
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd
# ^
# SUID

# Ejemplo: /usr/bin/passwd
# Permite a los usuarios modificar /etc/shadow
# (normalmente accesible solo para root)

Seguridad:

  • Utilizar con precaución
  • Puede ser explotado si está mal configurado

SGID (Set Group ID)​

Comportamiento:

  • El archivo se ejecuta con los permisos del grupo
  • En directorio: los nuevos archivos heredan el grupo
# Definir SGID
chmod g+s archivo
chmod 2755 archivo # 2 = SGID

# En directorio
chmod g+s directorio/
# Los nuevos archivos se crean con el grupo del directorio

# Ver (s en lugar de x)
ls -ld directorio/
# drwxrwsr-x ... directorio/
# ^
# SGID

Uso:

  • Directorios compartidos
  • Colaboración en equipo

Sticky Bit​

Comportamiento:

  • En directorio: impide la eliminación por parte de otros
  • Solo el propietario puede eliminar sus archivos
# Definir Sticky Bit
chmod +t directorio/
chmod 1777 directorio/ # 1 = Sticky Bit

# Ver (t en lugar de x)
ls -ld /tmp
# drwxrwxrwt ... /tmp
# ^
# Sticky Bit

# Ejemplo: /tmp
# Todos pueden crear archivos
# Pero solo pueden eliminar sus propios archivos

Uso:

  • Directorios compartidos (/tmp)
  • Prevención de eliminación accidental

ACL (Access Control Lists)​

Introducción​

Las ACL permiten permisos más detallados que el sistema estándar (owner/group/other).

# Instalar herramientas ACL
sudo apt install acl # Ubuntu/Debian
sudo yum install acl # Red Hat/CentOS

Ver las ACL​

# Ver ACL de un archivo
getfacl archivo.txt

# Ver ACL de un directorio
getfacl directorio/

# Ejemplo de salida:
# # file: archivo.txt
# # owner: user1
# # group: users
# user::rw-
# group::r--
# other::r--

Definir ACL​

# Permitir a user2 leer/escribir
setfacl -m u:user2:rw archivo.txt

# Permitir a un grupo
setfacl -m g:developers:rwx directorio/

# Permitir a otros
setfacl -m o::r archivo.txt

# ACL por defecto (heredada)
setfacl -d -m u:user2:rw directorio/
# Los nuevos archivos heredarán esta ACL

Eliminar ACL​

# Eliminar ACL de usuario
setfacl -x u:user2 archivo.txt

# Eliminar todas las ACL
setfacl -b archivo.txt

Máscara ACL​

La máscara limita los permisos efectivos:

# Definir máscara
setfacl -m m::r archivo.txt
# Incluso si la ACL otorga rwx, la máscara limita a r

umask - Permisos Predeterminados​

¿Qué es umask?​

El umask determina los permisos predeterminados de los nuevos archivos y directorios.

# Ver umask actual
umask

# Formato octal (a menudo 0022 o 0002)

Cálculo de Permisos​

Archivos:

  • Permisos base: 666 (rw-rw-rw-)
  • Permisos finales: 666 - umask

Directorios:

  • Permisos base: 777 (rwxrwxrwx)
  • Permisos finales: 777 - umask

Ejemplos​

# umask 022
# Archivos: 666 - 022 = 644 (rw-r--r--)
# Directorios: 777 - 022 = 755 (rwxr-xr-x)

# umask 002
# Archivos: 666 - 002 = 664 (rw-rw-r--)
# Directorios: 777 - 002 = 775 (rwxrwxr-x)

# umask 077
# Archivos: 666 - 077 = 600 (rw-------)
# Directorios: 777 - 077 = 700 (rwx------)

Definir umask​

# Temporal (sesión)
umask 002

# Permanente (en ~/.bashrc o /etc/profile)
umask 002

Ejemplos Prácticos​

Escenario 1: Directorio Compartido​

# Crear directorio compartido
sudo mkdir /srv/shared
sudo chgrp developers /srv/shared
sudo chmod 2775 /srv/shared # SGID

# Los nuevos archivos heredarán el grupo

Escenario 2: Permisos Detallados​

# Archivo con permisos específicos
setfacl -m u:user1:rw archivo.txt
setfacl -m u:user2:r archivo.txt
setfacl -m g:developers:rwx archivo.txt

Escenario 3: Directorio Colaborativo​

# Directorio donde todos pueden crear pero no eliminar
sudo mkdir /srv/collab
sudo chmod 1777 /srv/collab # Sticky Bit + todos los permisos

Resumen​

En este capítulo, usted ha aprendido:

SUID: Ejecución con permisos del propietario
SGID: Ejecución con permisos del grupo, herencia de grupo
Sticky Bit: Impide la eliminación por parte de otros
ACL: Permisos detallados, más flexibles que el estándar
umask: Permisos predeterminados de los nuevos archivos
Práctica: Combinar para necesidades específicas


Próximos Pasos​

Capítulo 5.4: Buenas Prácticas
Módulo 6: Scripting Shell


Capítulo creado el: Diciembre 2024