Los permisos son uno de los aspectos más importantes de Linux (en realidad, de todos los sistemas basados en Unix). Estos se utilizan para varios fines, pero sirven principalmente para proteger el sistema y los archivos de los usuarios y por ello el comando CHMOD nos permite modificar cualquier permiso.
Índice de contenidos
Te recomendamos la lectura sobre nuestras guías:
Permisos básicos en Linux, Ubuntu, Debian con CHMOD
Manipular los permisos es una actividad interesante, pero compleja al mismo tiempo. Pero tal complejidad no debe ser interpretada como una dificultad, sino como una posibilidad de hacer frente a una gran variedad de configuraciones, lo que permite crear diversos tipos de protección a los archivos y directorios.
Como seguramente ya sabes, solo el super-usuario (root) tiene acciones sin limites en el sistema, justamente por ser el usuario responsable de la configuración, administración y mantenimiento de Linux. Depende de este, por ejemplo, determinar lo que cada usuario puede ejecutar, crear, modificar, etcétera.
Por supuesto, la forma utilizada para especificar lo que cada usuario del sistema puede hacer es la determinación de permisos. Siendo así, en este artículo verás cómo establecer permisos de archivos y directorios, así como modificarlos.
Descripción de permisos
- drwx——
- -rw-rw-r–
Las líneas de arriba representan el resultado de un comando escrito (ls -l) para listar un directorio y sus permisos. Los dos elementos que aparecen (“drwx——” y “-rw-rw-r–”) es la forma utilizada para mostrar los permisos de los directorios y archivos. Es este elemento, que recibe el nombre de cadena, el que vamos a estudiar.
Un punto interesante de mencionar es que Linux trata a todos los directorios como archivos, por lo tanto, los permisos se aplican de igual manera para ambos. Dichos permisos pueden ser divididos en cuatro partes para indicar: tipo, propietario, grupo y otros permisos.
El primer carácter de la cadena indica el tipo de archivo: si se trata de «d» representa un directorio, si es «-» equivale a un archivo. Sin embargo, otros caracteres pueden aparecer para indicar otros tipos de archivos, como se muestra en la siguiente tabla:
- d: directorio
- b: archivo de bloque
- c: archivo especial de caracteres
- p: canal
- s: socket
- –: archivo normal
Observa ahora que en el resto de la cadena todavía hay 9 caracteres. Ya sabes lo que significa el primero. Los demás se dividen en tres grupos de tres, cada uno representando el propietario, el grupo y todos los demás, respectivamente. Tomando la línea 2 del ejemplo (-rw-rw-r–), dejando de lado el primer carácter y la división de la cadena restante en 3 partes, quedaría así:
- rw-: la primera parte significa permisos del propietario.
- rw-: la segunda parte significa los permisos del grupo al que pertenece el usuario.
- r–: la tercera parte significa los permisos a los demás usuarios.
Vamos a entender lo que significan estos caracteres (r, w, x, –). Hay, básicamente, tres tipos de permisos: lectura, escritura y ejecución.
La lectura permite al usuario leer el contenido del archivo pero no cambiarlo. La escritura permite que el usuario modifique el archivo. La ejecución, como el nombre lo dice, permite que el usuario ejecute el archivo, en caso de ser ejecutable.
Pero sucede que los permisos no funcionan aisladamente, o sea, de forma que el usuario tenga permiso de lectura o de escritura o de ejecución. Los permisos funcionan en conjunto. Esto quiere decir que cada archivo/directorio tiene los tres permisos establecidos, corresponde al dueño determinar cuál de estos permisos está habilitado para los usuarios o no.
Puede ser que una determinada cantidad de usuarios tengan permiso para modificar un archivo, pero otros no, por ejemplo. De ahí la necesidad de usar grupos. En este caso, el permiso de escritura de este archivo será dada al grupo, por lo que todo usuario miembro puede cambiar el archivo. Ten en cuenta que es necesario tener cierto cuidado con los permisos. Por ejemplo, el que informa de que el usuario tenga permiso de escritura si no tiene permiso de lectura habilitada.
Ahora que ya sabemos el significado de las divisiones de la cadena, vamos a entender lo que las letras r, w, x, y el caracter – representan:
- r: significa permiso de lectura (read)
- w: significa permiso de escritura (write)
- x: significa permiso de ejecución (execution)
- –: significa permiso deshabilitado.
El orden en que los permisos deben aparecer es rwx. Siendo así, vamos a entender la cadena de nuestro ejemplo dividiéndola en 4 partes:
Línea 1:
- drwx——
- – es un directorio (d)
- – el propietario puede leerlo, modificarlo y ejecutarlo (rwx)
- – el grupo no puede leerlo, modificarlo ni ejecutarlo (—)
- – los demás usuarios no pueden leerlo, modificarlo ni ejecutarlo (—).
Línea 2:
- -rw-rw-r–
- – es un archivo (-)
- – el propietario puede leerlo y modificarlo pero no ejecutarlo. Observa que este archivo no es ejecutable, el permiso de ejecución aparece deshabilitado (rw-)
- – el grupo tiene permisos idénticos al propietario (rw-)
- – los demás usuarios sólo tienen permiso para leer el archivo, pero no lo pueden modificar ni ejecutar (r–).
La siguiente tabla muestra los permisos más comunes:
- – – -: ningún permiso
- r–: permiso de lectura
- r-x: lectura y ejecución
- rw-: lectura y escritura
- rwx: lectura, escritura y ejecución
Configuración de permisos con chmod
En los temas anteriores, has adquirido por lo menos una noción de lo que son los permisos y de su importancia en Linux. Llegó la hora de aprender a configurar permisos, y esto se hace a través del comando chmod (change mode). Un detalle interesante de este comando es que se pueden configurar permisos de dos maneras: simbólica y numéricamente. Primero veremos el método simbólico.
Para tener una visión más clara de la forma simbólica con chmod, imagina que tales símbolos se encuentran en dos listas, y la combinación de ellos genera el permiso:
Lista 1
u: usuario
g: grupo
O (letra ‘o’ mayúscula): otro
a: todos
Lista 2
r: lectura
w: escritura
x: ejecución
Para poder combinar los símbolos de estas dos listas, se usan los operadores:
+ (signo más): agregar permiso
– (signo menos): quitar permiso
= (signo de igualdad): configuración del permiso
Para mostrar cómo se hace esta combinación, vamos a suponer que desees agregar permiso de escritura en el archivo prueba.txt para un usuario. El orden introducido es:
[php]chmod u+w prueba.txt[/php]La «u» indica que el permiso se da a un usuario, el signo de suma (+) indica que se agrega un permiso y «w» indica que el permiso que se da es de escritura.
En caso de que quieras dar permisos de lectura y escritura a tu grupo, el comando será:
[php]chmod g+rw prueba.txt[/php]Ahora, vamos a suponer que el archivo prueba.txt deberá estar con todos los permisos disponibles para el grupo. Podemos entonces utilizar:
[php]chmod g=rwx prueba.txt[/php]Consejo: crea archivos y directorios. A continuación, prueba la combinación de permisos con chmod. Esto te ayudará mucho en el entendimiento de este recurso.
Usando chmod con el método numérico
Usar chmod con valores numéricos es una tarea bastante práctica. En vez de utilizar letras como símbolos para cada permiso, se usan números. Si un permiso está habilitado, se le asigna el valor 1, en caso contrario, se asigna el valor 0.
Siendo así, la cadena de permisos r-xr—– en forma numérica sería 101100000. Esta combinación de 1 y 0 es un número binario. Pero todavía tenemos que añadir la forma decimal (o sea, los números de 0 a 9). Para esto, ten en cuenta la siguiente tabla:
Permiso | Binario | Decimal |
– – – | 000 | 0 |
– -x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
Si no conoces el sistema binario, te debes estar preguntando lo que esta tabla de 0 y 1 tiene que ver con los números de 0 a 7. Como el sistema binario sólo trabaja con los números 0 y 1 (el decimal trabaja con los números de 0 a 9, o sea, es el sistema de numeración que utilizamos en nuestra vida cotidiana), se necesita de una secuencia para representar los valores. Siendo así, en la tabla anterior, la columna “Binario” muestra cómo son los valores binarios de los números de 0 a 7 en el sistema decimal.
Llegó el momento entonces de relacionar la explicación del párrafo anterior con la columna “Permiso”. Para ejemplificarla, vamos a utilizar el permiso rw-, cuyo valor en binario es de 110, que a su vez, en decimal corresponde al número 6. Entonces, en vez de usar rw- o 110 para crear el permiso, simplemente se utiliza el número 6. Ten en cuenta que, con el método numérico, usamos sólo un dígito para representar un permiso, en vez de tres. Así, la cadena de permisos r–r–r– puede ser representado por 444, pues r– en decimal es igual a 4. Observa el siguiente ejemplo:
[php]chmod 600 notas.txt[/php]De esta manera, se están dando los permisos rw——- al archivo notas.txt, pues 6 equivale a rw- y 0 equivale a —. Como el cero aparece dos veces, se forma entonces el valor de 600.
Otros ejemplos:
[php]chmod 755 prueba.txt[/php]Asigna permisos de lectura, escritura y ejecución para el propietario del archivo (7), lectura y ejecución para los usuarios del mismo grupo (5), y también para otros usuarios (5).
chmod 640 prueba.txt
Asigna permisos de lectura y escritura (6) para el propietario, solo lectura para los usuarios del mismo grupo (4) y ningún permiso para otros usuarios (0).
Inicia el comando anterior con un archivo de prueba y después escribe ls – l notas.txt para ver lo que aparece (notas.txt debe ser reemplazado por el archivo que estás utilizando). La siguiente tabla muestra una lista de las configuraciones más utilizadas:
– – – – – – – – – | 000 |
r——– | 400 |
r—r–r– | 444 |
rw—— | 600 |
rw-r–r– | 644 |
rw-rw-rw- | 666 |
rwx—— | 700 |
rwxr-x— | 750 |
rwxr-xr-x | 755 |
rwxrwxrwx | 777 |
Los tres últimos permisos de la tabla son usados comúnmente para programas y directorios.
Últimos detalles
Como has visto, es mucho más práctico utilizar chmod con el método numérico. Pero puedes haber quedado confundido con todo este esquema de permisos.
La cuestión es que en los sistemas basados en Unix, los permisos son uno de los aspectos más complejos que existen. Tal complejidad es equivalente a la eficiencia del uso de los permisos. Por eso, la mejor manera de entender los permisos es entrenando. Practica, crea permisos y observa los resultados.