Permisos especiales en Linux: SUID, SGID y Sticky Bit

permisos-especiales-en-linux
permisos-especiales-en-linux

Los permisos especiales en Linux permiten controlar de forma más avanzada cómo se ejecutan los archivos y cómo se gestionan los directorios compartidos. Además de los permisos básicos de lectura, escritura y ejecución, Linux incluye tres permisos especiales: SUID, SGID y Sticky Bit. Conocerlos es fundamental para administrar sistemas de forma segura, evitar errores de configuración y mejorar el control de acceso en entornos multiusuario.

Aunque pueden parecer avanzados al principio, son muy importantes para la administración de sistemas Linux, especialmente cuando hablamos de seguridad, ejecución de programas y control de acceso en directorios compartidos.

👉 Y recuerda, si quieres aprender más de Linux, pincha en este curso de Linux gratis

👉 También te dejo por aquí una guía de comandos Linux por categorías

¿Qué son los permisos especiales en Linux?

En Linux, cada archivo y directorio tiene permisos asociados para tres tipos de usuarios:

usuario  grupo  otros

Normalmente, estos permisos se representan así:

-rwxr-xr-x

Donde:

r = lectura
w = escritura
x = ejecución

Sin embargo, Linux también permite usar permisos especiales que añaden comportamientos adicionales:

SUID  = ejecución con permisos del propietario
SGID  = ejecución o herencia del grupo
Sticky Bit = protección contra borrado en directorios compartidos

Tabla comparativa

PermisoSe aplica principalmente aFunción
SUIDArchivos ejecutablesEjecuta con permisos del propietario
SGIDArchivos y directoriosEjecuta con permisos del grupo o hereda grupo
Sticky BitDirectoriosImpide borrar archivos de otros usuarios

SUID: Set User ID

El permiso SUID permite que un archivo ejecutable se ejecute con los permisos del propietario del archivo, y no con los permisos del usuario que lo ejecuta.

Este permiso se utiliza principalmente en archivos ejecutables.

Ejemplo clásico: passwd

Un ejemplo muy conocido es el comando:

/usr/bin/passwd

Este comando permite a un usuario cambiar su propia contraseña. Sin embargo, las contraseñas del sistema se almacenan en archivos protegidos como:

/etc/shadow

Un usuario normal no puede modificar directamente ese archivo. Entonces, ¿cómo puede cambiar su contraseña?

Gracias al permiso SUID.

Podemos verlo con:

ls -l /usr/bin/passwd

La salida puede ser parecida a esta:

-rwsr-xr-x 1 root root 68208 /usr/bin/passwd

Fíjate en esta parte:

rws

La s aparece en el lugar donde normalmente estaría la x del usuario propietario.

Esto significa que el archivo tiene el permiso SUID activado.

Cómo activar SUID

Para activar SUID en un archivo:

chmod u+s archivo

También se puede usar el modo numérico:

chmod 4755 archivo

El 4 inicial representa el permiso SUID.

Cómo quitar SUID

chmod u-s archivo

SGID: Set Group ID

El permiso SGID tiene dos comportamientos distintos dependiendo de si se aplica a un archivo o a un directorio.

SGID en archivos

Cuando SGID se aplica a un archivo ejecutable, el programa se ejecuta con los permisos del grupo propietario del archivo.

Se representa con una s en la zona de permisos del grupo:

-rwxr-sr-x

SGID en directorios

El uso más común de SGID es en directorios compartidos.

Cuando un directorio tiene SGID activado, los archivos y subdirectorios creados dentro heredan el grupo del directorio padre, en lugar del grupo principal del usuario que los crea.

Esto es muy útil en entornos colaborativos.

Ejemplo de SGID en un directorio

Supongamos que tenemos un directorio compartido:

/proyectos

Y queremos que todos los archivos creados dentro pertenezcan al grupo desarrollo.

Primero asignamos el grupo:

chown :desarrollo /proyectos

Después activamos SGID:

chmod g+s /proyectos

Al listar el directorio:

ls -ld /proyectos

Podríamos ver algo así:

drwxrwsr-x 2 root desarrollo 4096 /proyectos

La s en los permisos del grupo indica que SGID está activo.

Cómo activar SGID

chmod g+s archivo_o_directorio

También se puede usar el modo numérico:

chmod 2755 archivo_o_directorio

El 2 inicial representa el permiso SGID.

Cómo quitar SGID

chmod g-s archivo_o_directorio

Sticky Bit

El Sticky Bit se utiliza principalmente en directorios.

Cuando un directorio tiene Sticky Bit activado, los usuarios pueden crear archivos dentro de él, pero solo pueden borrar o renombrar los archivos que les pertenecen.

Esto es muy útil en directorios compartidos donde varios usuarios tienen permisos de escritura.

Ejemplo clásico: /tmp

El directorio /tmp es un ejemplo típico:

ls -ld /tmp

La salida suele ser parecida a:

drwxrwxrwt 10 root root 4096 /tmp

Fíjate en la última letra:

t

Esa t indica que el Sticky Bit está activo.

Gracias a esto, cualquier usuario puede crear archivos en /tmp, pero no puede borrar archivos de otros usuarios.

Cómo activar Sticky Bit

chmod +t directorio

También se puede usar el modo numérico:

chmod 1777 directorio

El 1 inicial representa el Sticky Bit.

Cómo quitar Sticky Bit

chmod -t directorio

Representación numérica de SUID, SGID y Sticky Bit

Los permisos especiales también pueden representarse mediante números:

Permiso especialValor numérico
SUID4
SGID2
Sticky Bit1

Estos valores se colocan delante de los permisos normales.

Por ejemplo:

chmod 4755 archivo

Significa:

4 = SUID
755 = rwxr-xr-x

Otro ejemplo:

chmod 2755 directorio

Significa:

2 = SGID
755 = rwxr-xr-x

Y:

chmod 1777 directorio

Significa:

1 = Sticky Bit
777 = rwxrwxrwx

Diferencia entre s, S, t y T

A veces podemos encontrar permisos como estos:

-rwsr-xr-x
-rwSr-xr-x
drwxrwxrwt
drwxrwxrwT

La diferencia es importante.

Letra s

Indica que SUID o SGID está activo y que también existe permiso de ejecución.

Ejemplo:

-rwsr-xr-x

Letra S

Indica que SUID o SGID está activo, pero no existe permiso de ejecución.

Ejemplo:

-rwSr-xr-x

Esto suele ser una configuración incorrecta si hablamos de archivos ejecutables.

Letra t

Indica que Sticky Bit está activo y que también existe permiso de ejecución en el directorio.

Ejemplo:

drwxrwxrwt

Letra T

Indica que Sticky Bit está activo, pero no existe permiso de ejecución.

Ejemplo:

drwxrwxrwT

En directorios, el permiso de ejecución es necesario para poder acceder al contenido, por lo que una T mayúscula puede indicar un problema de configuración.

Cómo buscar archivos con SUID, SGID o Sticky Bit

En sistemas Linux, es recomendable revisar periódicamente qué archivos tienen permisos especiales, especialmente SUID y SGID, ya que pueden suponer riesgos de seguridad.

Buscar archivos con SUID

find / -perm -4000 -type f 2>/dev/null

Buscar archivos con SGID

find / -perm -2000 -type f 2>/dev/null

Buscar directorios con Sticky Bit

find / -perm -1000 -type d 2>/dev/null

Riesgos de seguridad

Los permisos especiales son muy útiles, pero también pueden ser peligrosos si se usan mal.

Un archivo con SUID activado y propietario root puede permitir que un usuario ejecute acciones con privilegios elevados. Por eso, no se debe activar SUID en cualquier script o binario sin entender bien sus consecuencias.

Algunas recomendaciones básicas:

  • No aplicar SUID a scripts innecesarios.
  • Revisar periódicamente archivos con SUID y SGID.
  • Evitar permisos 777 salvo que sean realmente necesarios.
  • Usar Sticky Bit en directorios compartidos.
  • Controlar correctamente propietarios y grupos.

Conclusión

Los permisos especiales en Linux permiten controlar de forma más avanzada el acceso y comportamiento de archivos y directorios.

SUID permite ejecutar un archivo con permisos del propietario.
SGID permite ejecutar con permisos del grupo o hacer que los archivos hereden el grupo de un directorio.
Sticky Bit protege archivos dentro de directorios compartidos para que solo su propietario pueda eliminarlos.

Entender estos permisos es fundamental para administrar correctamente sistemas Linux y mantener una buena seguridad en servidores y entornos multiusuario.

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *