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