deustux

Guía de Permisos en Linux 🐧

prored-bits-de-permisos-unix-permission-bits.png

En Linux todo son ficheros y procesos, y detrás de cada uno de ellos hay un sistema de permisos que decide quién puede leer, modificar o ejecutar cada cosa. Entender esto no es opcional si alguna vez vas a administrar sistemas, depurar errores de acceso o simplemente quieres trastear sin romper nada importante.

Esta guía explica de forma práctica cómo identificar permisos, cómo cambiarlos con chmod, qué significan los números octales y cómo funcionan los permisos especiales como SUID, GUID y sticky bit. No es una lista de teoría seca: veremos ejemplos de terminal y la lógica detrás de cada comando.

Vamos a ello.


📌 Tabla de Contenidos


1️⃣ Identificación de permisos

Antes de cambiar permisos o entender bits raros, hay que saber leerlos. Cada archivo y directorio en Linux tiene dueño, grupo y un conjunto de permisos que determinan quién puede hacer qué.

La forma más directa de ver esto es con ls -l:

1
2
$ ls -l archivo.txt
-rw-r--r-- 1 anon anon 122 ene 13 05:24 archivo.txt

representacion-permisos-en-linux1.png

Desglose de los permisos:

Otros elementos:

Con esto ya puedes ver quién puede hacer qué en un archivo o directorio, y es la base antes de modificar permisos.


2️⃣ Cambiar propietario y grupo

Antes de tocar permisos, sueles necesitar definir quién “posee” realmente un archivo o directorio, porque los permisos que se aplican dependen del propietario y del grupo.

En Linux usamos chown y chgrp para esto.

Cambiar propietario (usuario):

1
chown nuevo_usuario archivo.txt

Cambiar grupo:

1
chgrp nuevo_grupo archivo.txt

Cambiar propietario y grupo a la vez:

1
chown nuevo_usuario:nuevo_grupo archivo.txt

Aplicar recursivamente en directorios:

1
chown -R nuevo_usuario:nuevo_grupo /ruta/directorio

🔍 Con esto controlas quién tiene realmente el “poder” sobre el archivo, y después ya puedes ajustar los permisos con chmod según quieras que otros lean, escriban o ejecuten.


3️⃣ Cambiar permisos con chmod

El comando que usamos para modificar los permisos de un archivo es chmod. Para ver cómo funcionan los cambios de manera sencilla, podemos tomar como ejemplo un archivo llamado archivo.txt. Su salida con ls -l es la siguiente:

1
2
~ [void] % ls -l archivo.txt
-rw-r--r-- 1 anon anon 122 ene 13 05:24 archivo.txt

Si queremos quitar el permiso de lectura al grupo, podemos usar chmod g-r archivo.txt. Después de aplicar el comando, si volvemos a listar el archivo, la salida muestra que el grupo ya no puede leer:

1
2
3
~ [void] % chmod g-r archivo.txt
~ [void] % ls -l archivo.txt
-rw----r-- 1 anon anon 122 ene 13 05:24 archivo.txt

En este ejemplo vemos cómo podemos ir ajustando los permisos de forma directa y específica para cada usuario, grupo u otros. También podemos hacer cambios más complejos, por ejemplo sobre un archivo que originalmente tiene todos los permisos activados para todos:

1
2
~ [void] % ls -l archivo.txt
-rwxrw-rwx 1 anon anon 122 ene 13 05:24 archivo.txt

En este caso podríamos ir quitando o añadiendo permisos según sea necesario, pero hacerlo de forma manual con cada letra resulta ineficiente, especialmente cuando trabajamos con muchos archivos o con combinaciones de permisos más complejas. Por eso, veremos como usar la notación octal, que permite expresar los permisos de manera mucho más rápida y precisa.

Permisos en octal:

Cuando los permisos empiezan a ser muchos o queremos aplicarlos rápido, usar letras con chmod puede resultar un poco lioso. Aquí es donde entra la notación octal, que convierte los permisos en números para que sea mucho más fácil de leer y aplicar. La forma de entenderlo correctamente es pensar primero en binario.

Cada bloque de permisos, sea del propietario, del grupo o de otros, tiene tres posiciones: lectura, escritura y ejecución. Si lo representamos en binario, ponemos un 1 cuando el permiso está activo y un 0 cuando no lo está. Por ejemplo, rw- sería lectura y escritura activas, ejecución apagada. En binario se escribiría como 110.

Ahora, cada combinación de tres bits se puede convertir directamente a un número octal. Siguiendo el ejemplo anterior, 110 en binario equivale a 6 en octal, porque 1×4 + 1×2 + 0×1 = 6. Esto se hace para cada bloque: propietario, grupo y otros. Así, rw-r--r-- se convierte en 644: el propietario tiene 6, el grupo 4 y los otros 4.

chmodtanla.jpg

Si el concepto del binario nos resulta confuso al principio, no hay problema. Podemos simplificarlo mucho pensando solo en los valores de cada permiso: lectura vale 4, escritura 2 y ejecución 1. Sumamos los valores de los permisos activos en cada bloque y obtenemos el número octal correspondiente. Por ejemplo, si un archivo tiene permisos de lectura y ejecución para el propietario, sumamos 4+1 y obtenemos 5. Si el grupo solo tiene lectura, es 4. Y si los otros no tienen permisos, es 0. El resultado final sería 540.

linux-permisos-archivos-830x404.png

Con esta forma de pensar, el octal deja de ser un misterio y se convierte en una herramienta práctica para aplicar permisos complejos de manera rápida y confiable, sin tener que escribir toda la combinación de letras cada vez.

Una vez que entendemos cómo funciona la notación octal, aplicarla con chmod es muy sencillo. Por ejemplo, si queremos darle todos los permisos a todos, usamos chmod 777 archivo.txt. Esto significa que el propietario, el grupo y los demás tienen lectura, escritura y ejecución activas. Después de ejecutar el comando, si listamos el archivo con ls -l, vemos que efectivamente todos los permisos están activados:

1
2
3
~ [void] % chmod 777 archivo.txt  
~ [void] % ls -l archivo.txt  
-rwxrwxrwx 1 anon anon 122 ene 13 05:24 archivo.txt

Cuando trabajamos con directorios que contienen varios archivos y subdirectorios, puede resultar tedioso cambiar los permisos de cada uno por separado. Para eso usamos la opción -R, que aplica los permisos recursivamente. Por ejemplo, tenemos un directorio a con permisos iniciales:

1
2
3
~ /a [void] % ls -l  
total 1  
drwxr-xr-x 2 anon anon 2 ene 13 05:46 a

Si queremos ajustar los permisos de forma recursiva para que el propietario tenga lectura, escritura y ejecución, y el grupo y los otros tengan lectura y escritura, podemos usar chmod 766 -R a. Después de aplicar el comando y listar de nuevo, vemos cómo los permisos se han aplicado a todos los contenidos del directorio:

1
2
3
4
~ /a [void] % chmod 766 -R a  
$~ /a [void] % ls -l  
total 1  
drwxrw-rw- 2 anon anon 2 ene 13 05:46 a

Con esto, vemos que el octal nos permite aplicar permisos complejos de forma rápida y consistente, y que la opción -R es muy útil cuando necesitamos cambiar permisos en directorios con varios archivos o subdirectorios.


4️⃣ SUID, GUID y sticky bit

Además de los permisos normales que ya hemos visto, en Linux existen permisos especiales que suelen tener usos concretos y avanzados. Estos no se aplican a todos los archivos de forma común, pero resultan muy útiles en programas o directorios con necesidades específicas de seguridad o comportamiento.

El primero de ellos es el SUID, o Set User ID. Cuando un archivo ejecutable tiene SUID, se ejecuta con los privilegios del propietario del archivo, no con los del usuario que lo ejecuta. Esto permite, por ejemplo, que ciertos programas puedan realizar acciones que normalmente solo el propietario podría hacer, sin necesidad de que el usuario tenga permisos elevados. Se ve en la salida de ls -l como una s en la posición de ejecución del propietario. Por ejemplo:

1
2
3
4
5
6
~ [void] % ls -l script.sh
-rwxr-xr-x 1 anon anon 123 ene 13 06:00 script.sh

~ [void] % chmod u+s script.sh
~ [void] % ls -l script.sh
-rwsr-xr-x 1 anon anon 123 ene 13 06:00 script.sh

El segundo es el GUID, o Set Group ID. Funciona de manera similar al SUID, pero afecta al grupo. En archivos ejecutables, permite que el programa se ejecute con los permisos del grupo del archivo. En directorios, tiene un uso muy práctico: todos los archivos que se creen dentro de ese directorio heredan automáticamente el grupo del directorio, lo que facilita la gestión de archivos compartidos entre varios usuarios de un mismo grupo. Por ejemplo:

1
2
3
4
5
6
~ [void] % ls -ld compartido
drwxr-xr-x 2 anon anon 2 ene 13 06:10 compartido

~ [void] % chmod g+s compartido
~ [void] % ls -ld compartido
drwxr-sr-x 2 anon anon 2 ene 13 06:10 compartido

Por último está el sticky bit, que se aplica normalmente a directorios. Su función principal es impedir que los usuarios borren o renombren archivos que no son suyos dentro de ese directorio, aunque tengan permisos de escritura. Un ejemplo típico es /tmp, donde todos pueden escribir, pero no pueden tocar los archivos de otros usuarios. En la salida de ls -l, se representa como una t en el bloque de permisos de otros:

1
2
3
4
~ [void] % mkdir prueba
~ [void] % chmod +t prueba
~ [void] % ls -ld prueba
drwxrwxrwt 2 anon anon 2 ene 13 06:20 prueba

Estos permisos especiales permiten controlar el comportamiento de archivos y directorios de manera más “específica” que los permisos normales..


Hasta aquí llegamos con la guía de permisos en Linux. Hemos visto cómo identificar permisos, cambiar propietario y grupo, ajustar permisos con chmod, manejar octal y, por último, entender los permisos especiales como SUID, GUID y sticky bit.

Con esto puedes entender que suceden con los permisos que poseen tus arhivos y tener un control sobre quién puede hacer qué en tus archivos y directorios, y aplicar configuraciones de forma rápida y segura. Aprender estos conceptos es esencial para administrar correctamente tu sistema.

Más adelante podrás complementar esta guía con chattr y ACLs, para tener un control todavía más fino sobre tus archivos y directorios. Pero con lo que acabas de aprender, ya tienes una base sólida para moverte como un auténtico administrador de sistemas.

#guia