Cuando usas un sistema GNU/Linux, debes dominar algunos aspectos de su funcionamiento, en especial los permisos en archivos y carpetas. Todo esto se hace desde la terminal.
Recuerda que en Linux puedes crear tantos usuarios como quieras. Hay un usuario especial con el que tienes todos los derechos y permisos (root).
¿Por qué es importante conocer y gestionar los permisos en archivos y/o carpetas?
¡La razón es muy simple! Si por error le das todos los derechos o suficientes derechos a un documento o carpeta, podrías corromper tu seguridad si estos contienen información sensible. Por ejemplo, un hacker que logra entrar en tu sistema puede modificar los archivos que tienen ciertos permisos dedicados al usuario en cuestión.
Un poco de teoría no nos hará daño:
Como sabes, en Linux todo es un archivo, incluidos las carpetas y los dispositivos que tienen autorizaciones para permitir o restringir ciertas operaciones. Entonces, cuando defines una autorización para un archivo, debes conocer los usuarios de Linux a los que autorizas o restringes las tres autorizaciones.
Los Usuarios
Un archivo en Linux pertenece a un usuario y a un grupo. Existen tres tipos de usuarios diferentes:
- u (para user): el usuario al que pertenecen los archivos o carpetas
- g (para group): el grupo al que pertenecen los archivos o carpetas
- o (para other): los demás usuarios
Los Permisos Básicos
Se pueden aplicar varios permisos en los archivos/carpetas:
r
(para read): derecho de lecturaw
(para write): derecho de modificar o derecho de escriturax
(para execute): derecho de ejecutar el archivo–
(para nada): ningún derecho sobre el archivo o carpeta
A veces verás la letra d
delante, simplemente significa que se trata de una carpeta (directorio).
¿Has prestado atención cuando usas el comando ls -l
o ls -la
? Bueno, hazlo y observa la primera columna. Verás que se trata de los derechos (permisos):

Gestión de Permisos
Para asignar permisos en archivos/carpetas, debes organizar correctamente los usuarios y los derechos. Para dar al usuario los derechos de lectura/escritura en un archivo, solo necesitas usar el comando: chmod
Ejemplo:
chmod u=rwxr g=xr o=x ejemplo.txt
También está la notación octal, tomemos el ejemplo anterior en representación octal:
chmod 755
Tabla resumen:
Derechos | Representación | Valor octal |
---|---|---|
Ningún derecho | – – – | 0 |
Solo ejecución | – – x | 1 |
Solo escritura | – w – | 2 |
Escritura y ejecución | – w x | 3 |
Solo lectura | r – – | 4 |
Lectura y ejecución | r – x | 5 |
Lectura y escritura | r w – | 6 |
Lectura, Escritura y Ejecución | r w x | 7 |
Si le das todos los derechos a un archivo, obtendrás: rwx-rwx-rwx (777).
Debes entender que estos derechos están divididos en 3 partes como vimos al principio de este artículo. Veamos ahora a qué corresponde cada parte:

Los Permisos Especiales
Acabamos de ver los permisos de los archivos/carpetas. Ya sabes que además existen 3 derechos especiales:
- SUID
- SGID
- Sticky Bit
Estos permisos también se asignan con el comando chmod
. También se pueden definir en octal, en este caso se colocan delante de los permisos como:

SUID
El SUID, que significa Set User ID, es un derecho que solo se aplica a los archivos y no a las carpetas. Pero hay un concepto importante que hay que entender, cuando ejecutas un script/archivo, realizas esta tarea con los derechos del UID (User ID) actual, en general con el usuario en cuestión.
Por lo tanto, hay algunas acciones que no están disponibles en función de los archivos con los derechos de usuario (escribir en un documento que pertenece a root). Veamos un ejemplo para aclarar las cosas:
Para cambiar tu contraseña, usas el comando passwd
, pero para que sea efectivo como usuario, debes poder escribir en /etc/passwd
y /etc/shadow
, aunque no tengas permiso.
Es el SUID el que nos permitirá realizar la acción anterior. Pero, ¿cómo podemos saberlo? Ve los derechos del archivo passwd
con el comando:
ls -l /usr/bin/passwd

Observa que hay una s
en lugar de una x
, por lo que tenemos los derechos para modificar una contraseña porque el script passwd tiene las autorizaciones SUID.
Ahora, ¿cómo puedo dar este derecho a otro archivo?
No es complicado, hay dos maneras de hacerlo. Más bien dos comandos, aquí tienes un ejemplo:
chmod u+s /usr/bin/passwd
O con la notación octal:
chmod 4755 /usr/bin/passwd
Aquí el 4 corresponde al bit SUID, ya sabes que también es posible eliminarlo con el comando:
chmod u-s /usr/bin/passwd
Dicho esto, ¿cómo puedo encontrar los archivos con los permisos SUID?
Nada más sencillo, aquí tienes el comando:\
find / -perm -u=s -type f 2>/dev/null
/:
la raíz del sistema de archivos y encuentra cada directorio-perm
: indica la búsqueda de las autorizaciones que siguen-u=s
: los archivos que pertenecen al usuario root-type
: el tipo de archivo que buscamosf
: designa un archivo normal, no los directorios o archivos especiales2
: designa el segundo descriptor de archivo del proceso, es decir, stderr (error estándar)>
: significa redirección/dev/null
: es un objeto de sistema de archivos especial que elimina todo lo que se escribe en él

SGID
A diferencia del SUID, el SGID se aplica tanto a los archivos como a las carpetas. En lo que respecta a los archivos, nada cambia.
SGID, significa: Set Group ID
Por otro lado, debes saber que un usuario que ejecute un script que le pertenece pero con derechos SGID, se ejecutaría entonces con los derechos del grupo al que pertenece.
Cuando un usuario ejecuta un script que tiene permisos SGID, ese script se ejecutará con los derechos del grupo al que pertenece. Por ejemplo, si el script pertenece al grupo root, tendrá los derechos del grupo root durante su ejecución, aunque el usuario no los tenga. ¿Ves la diferencia?
Bueno, eso está claro para los archivos, pero ¿cómo funciona para las carpetas?
Bueno, la verdad es que es completamente diferente! No hablamos de derechos de ejecución, sino de pertenencia. Por ejemplo, si en un directorio que pertenece a un grupo (con derechos SGID) se crean varios archivos y/o subdirectorios por un usuario, entonces estos archivos pertenecerán a ese grupo de usuarios.
Es un método práctico para trabajar en grupo. Imaginemos que son tres usuarios trabajando en el mismo directorio que contiene archivos, entonces sería más práctico asignar los derechos SGID que usar el comando chmod 777 (todos los derechos).
Ejemplo:
ls -l

Observa que hay una s
en lugar de una x
para el grupo de permisos del grupo (parrot). Su valor octal es 2. Los derechos del directorio ensayo son 2755.
Pero, ¿cómo puedo conceder estos derechos?
El comando es similar al del SUID, con una ligera diferencia:
chmod g+s carpeta/
o:
chmod 2755 carpeta/
Aquí tienes el comando para encontrar los archivos con los permisos SGID:
find / -perm -g=s -type f 2>/dev/null

¡Atención!
Estas autorizaciones especiales presentan un riesgo para la seguridad. Algunos usuarios decididos pueden encontrar una manera de mantener las autorizaciones que se les conceden mediante el proceso setuid incluso cuando el proceso ha terminado de ejecutarse.
Debes supervisar tu sistema para detectar cualquier uso no autorizado de los derechos setgid para obtener privilegios de superusuario (root). Las autorizaciones sospechosas conceden el acceso del grupo a tal programa a un grupo inusual en lugar de a root o bin.
STICKY BIT
El Sticky Bit, se puede aplicar como el SGID a los archivos (binarios) y a las carpetas. Con un pequeño añadido, este método conserva en memoria un ejecutable aunque el programa que lo ha llamado haya terminado (por eso se llama «Sticky» que significa pegajoso en inglés).
En el pasado, cuando los ordenadores eran menos potentes, el Sticky Bit era útil para mantener los ejecutables en el swap y acelerar su carga. Hoy en día, con la potencia actual de los ordenadores, este método ya no es necesario.
Por el contrario, sigue sirviendo para los directorios y resulta muy importante. El Sticky Bit permite prohibir la eliminación de un directorio y/o su contenido por cualquier persona que no sea el propietario, ¿potente, no?
El ejemplo más conocido en los sistemas UNIX es el directorio /tmp
, en el que cualquier usuario del sistema puede crear o eliminar archivos o carpetas en /tmp
, pero no podrá eliminar los que haya creado otro usuario. Esto se permite gracias a la colocación del STICKY BIT.
Lo que hay que recordar sobre este método es que protege los archivos de un directorio.
Vamos a ver los derechos de este directorio:

Aquí, la t
al final sustituye la x
para el grupo de permisos de los demás. Su valor octal es 1.
Para colocar el STICKY BIT, existen 2 comandos, idénticos a los que hemos visto antes, con una pequeña diferencia también:
chmod 1777 /tmp
o,
chmod o+t /tmp
Ejemplo:
Comandos:
mkdir compartir y chmod o+t compartir/

Esto es todo en cuanto a la explicación de los permisos y derechos especiales en GNU/Linux.
Conclusión
Los derechos SUID y SGID deben utilizarse con mucha precaución, ya que pueden provocar una escalada de privilegios.
La mejor manera de evitar una catástrofe es mantenerlos para algunas aplicaciones necesarias (comprobar en función de la necesidad y el correcto funcionamiento). Es preferible utilizar los programas su
y sudo
en lugar de estos derechos especiales.
Si quieres listar todos los setuid/setgid presentes en tu sistema, utiliza el siguiente comando:
find / -type f -perm /6000 -ls 2>/dev/null
Para el Sticky Bit, es preferible asegurarse de que las carpetas accesibles para todos en escritura pertenecen al usuario root! para evitar que el usuario propietario pueda modificar todo, a pesar de la presencia del Sticky Bit.
Hemos llegado al final de este artículo, un poco técnico pero fundamental para la buena gestión de los archivos/carpetas y los derechos asignados (nivel de seguridad). Si hay puntos que no te queden claros, no dudes en ponerte en contacto conmigo o dejar un comentario. Además, si tienes alguna petición especial sobre otros temas, házmelo saber.