UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2017 - Enero 2018

13.6. Permisos

Todo fichero y carpeta en Linux tiene un conjunto de permisos. Para mostrar los permisos se utiliza la opción -l del comando ls. A continuación se muestra un ejemplo de la información que muestra este comando.

$ ls -l fichero.txt
-rw-r--r-- 1 teleco teleco 33 2010-06-10 12:05 fichero.txt

La convención utilizada por el intérprete para mostrar esta información es la siguiente (campos por orden de izquierda a derecha):

  • El primer símbolo es - para un fichero y d para un directorio. Los 9 símbolos siguientes son los permisos. r para lectura, w para escritura, x para ejecución y - para la ausencia de ese permiso.

  • Un número natural mayor que uno que denota el número de enlaces duros que apuntan al fichero (irrelevante por ahora).

  • Nombre del usuario propietario

  • Grupo del propietario

  • Tamaño en bytes

  • Fecha de la última modificación

  • Nombre del fichero

La siguiente figura muestra el significado de cada campo para el ejemplo.

Los permisos se agrupan en tres categorías: usuario (u), grupo (g) y otros (o). Cada categoría contiene a su vez permisos para tres tipos de eventos: lectura (r), escritura (w) y ejecución (x). El permiso es un valor binario, o se dispone o se carece de él. En conclusión, cada fichero o carpeta contiene un subconjunto de nueve posibles permisos. Además de los permisos, cada fichero y carpeta tiene también dos nombre: el nombre del usuario propietario, y el nombre de un grupo de usuarios al que pertenece el propietario.

Cada usuario en Linux tiene asignado un nombre (su login), y pertenece a uno o varios grupos de usuarios. El comando id muestra el nombre del usuario y los grupos a los que pertenece. Tanto usuarios como grupos se definen con un nombre y un número natural.

Supongamos que un usuario con nombre uname quiere realizar una operación sobre un fichero. El sistema primero selecciona qué categoría de permisos debe utilizar. Si el propietario del fichero es uname utiliza la categoría usuario. Si no es el caso, pero el grupo del fichero es uno de los que es miembro el usuario uname entonces se utiliza la segunda categoría (grupo). Si tampoco es el caso, entonces se utilizan los permisos de la tercera categoría. Una vez seleccionada la categoría se comprueba si se dispone del permiso para realizar la operación (lectura, escritura o ejecución) y se autoriza o rechaza la operación.

Para cambiar los permisos de un fichero o carpeta desde el intérprete de comandos se utiliza el comando chmod (change mode). En su versión más simple recibe dos parámetros, una cadena de texto describiendo los cambios en los permisos y una ruta a un fichero o carpeta sobre el que aplicar estos cambios. La cadena tiene tres partes: una o varias de las letras u, g u o, seguida del signo + o -, seguida de una o varias de las letras r, w o x. La interpretación es que a la categoría especificada en el primer grupo de letras se le añade (si se utiliza +) o se le retira (si se utiliza -) el permiso indicado por el segundo grupo de letras. Por ejemplo, para añadir a un fichero el permiso de ejecución para su propietario y su grupo se ejecuta el comando:

$ chmod ug+x fichero.txt

Otra manera de cambiar los permisos de un fichero o carpeta desde el intérprete de comandos utilizando el comando chmod es también recibiendo dos parámetros: el primer parámetro son 3 números, cada uno del 0 al 7, que se transforma a 3 bits en binario, coincidiendo respectivamente cada bit si está activo o no si tiene permiso de lectura, escritura y ejecución. Los tres números se corresponden con usuario, grupo y otros. Por ejemplo, para dar todos los permisos del archivo al propietario y ninguno al resto se ejecuta:

$ chmod 700 fichero.txt