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 otrosNormalmente, estos permisos se representan así:
-rwxr-xr-xDonde:
r = lectura
w = escritura
x = ejecuciónSin 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 compartidosTabla comparativa
| Permiso | Se aplica principalmente a | Función |
|---|---|---|
| SUID | Archivos ejecutables | Ejecuta con permisos del propietario |
| SGID | Archivos y directorios | Ejecuta con permisos del grupo o hereda grupo |
| Sticky Bit | Directorios | Impide 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/passwdEste comando permite a un usuario cambiar su propia contraseña. Sin embargo, las contraseñas del sistema se almacenan en archivos protegidos como:
/etc/shadowUn 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/passwdLa salida puede ser parecida a esta:
-rwsr-xr-x 1 root root 68208 /usr/bin/passwdFíjate en esta parte:
rwsLa 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 archivoTambién se puede usar el modo numérico:
chmod 4755 archivoEl 4 inicial representa el permiso SUID.
Cómo quitar SUID
chmod u-s archivoSGID: 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-xSGID 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:
/proyectosY queremos que todos los archivos creados dentro pertenezcan al grupo desarrollo.
Primero asignamos el grupo:
chown :desarrollo /proyectosDespués activamos SGID:
chmod g+s /proyectosAl listar el directorio:
ls -ld /proyectosPodríamos ver algo así:
drwxrwsr-x 2 root desarrollo 4096 /proyectosLa s en los permisos del grupo indica que SGID está activo.
Cómo activar SGID
chmod g+s archivo_o_directorioTambién se puede usar el modo numérico:
chmod 2755 archivo_o_directorioEl 2 inicial representa el permiso SGID.
Cómo quitar SGID
chmod g-s archivo_o_directorioSticky 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 /tmpLa salida suele ser parecida a:
drwxrwxrwt 10 root root 4096 /tmpFíjate en la última letra:
tEsa 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 directorioTambién se puede usar el modo numérico:
chmod 1777 directorioEl 1 inicial representa el Sticky Bit.
Cómo quitar Sticky Bit
chmod -t directorioRepresentación numérica de SUID, SGID y Sticky Bit
Los permisos especiales también pueden representarse mediante números:
| Permiso especial | Valor numérico |
|---|---|
| SUID | 4 |
| SGID | 2 |
| Sticky Bit | 1 |
Estos valores se colocan delante de los permisos normales.
Por ejemplo:
chmod 4755 archivoSignifica:
4 = SUID
755 = rwxr-xr-xOtro ejemplo:
chmod 2755 directorioSignifica:
2 = SGID
755 = rwxr-xr-xY:
chmod 1777 directorioSignifica:
1 = Sticky Bit
777 = rwxrwxrwxDiferencia entre s, S, t y T
A veces podemos encontrar permisos como estos:
-rwsr-xr-x
-rwSr-xr-x
drwxrwxrwt
drwxrwxrwTLa diferencia es importante.
Letra s
Indica que SUID o SGID está activo y que también existe permiso de ejecución.
Ejemplo:
-rwsr-xr-xLetra S
Indica que SUID o SGID está activo, pero no existe permiso de ejecución.
Ejemplo:
-rwSr-xr-xEsto 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:
drwxrwxrwtLetra T
Indica que Sticky Bit está activo, pero no existe permiso de ejecución.
Ejemplo:
drwxrwxrwTEn 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/nullBuscar archivos con SGID
find / -perm -2000 -type f 2>/dev/nullBuscar directorios con Sticky Bit
find / -perm -1000 -type d 2>/dev/nullRiesgos 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.
