9.3. Administración de permisos
Linux es definitivamente un sistema multiusuario por lo que necesita proveer un sistema de permisos para controlar el conjunto de operaciones autorizadas sobre archivos y directorios, lo que incluye todos los recursos del sistema y los dispositivos (en un sistema Unix cualquier dispositivo es representado por un archivo o un directorio). Este principio es común a todos los sistemas Unix pero siempre es útil recordarlo, especialmente porque existen algunos usos avanzados interesantes y relativamente desconocidos.
Cada archivo o directorio tiene permisos específicos para tres categorías de usuarios:
su dueño (representado con u
por «usuario»);
su grupo dueño (representado con g
por «grupo»), que incluye a todos los miembros del grupo;
y los demás (representado con o
por «otros»).
Puede combinar tres tipos de permisos:
lectura (representado por r
por «read»: leer);
escritura (o modificación, representado con w
por «write»: escribir);
ejecución (representado con x
por «eXecute»: ejecutar).
En el caso de un archivo, estos permisos se entienden fácilmente: la lectura permite acceder al contenido (inclusive copiarlo), la escritura permite cambiarlo y la ejecución permite ejecutarlo (lo cual sólo funcionará si es un programa).
Los directorios se manejan diferente. El permiso de lectura provee acceso para consultar su lista de elementos (archivos y directorios), el permiso de escritura permite crear o borrar archivos y el permiso de ejecución permite atravesarlo (especialmente para llegar a él con cd
). Poder atravesar un directorio sin leerlo permite acceder a los elementos que contenga siempre que se conozca su nombre, pero no le permitirá encontrarlos si no sabe que existen o conoce sus nombres exactos.
Tres programas controlan los permisos asociados a un archivo:
chown usuario archivo
cambia el dueño de un archivo;
chgrp group archivo
modifica el grupo dueño;
chmod permisos archivo
cambia los permisos del archivo.
Hay dos formas de representar permisos. Entre ellas, la representación simbólica es probablemente la más sencilla de entender y recordar. Involucra las letras mencionadas anteriormente. Puede definir permisos para cada categoría de usuarios (u
/g
/o
) definiéndolos explícitamente (con =
, agregar permisos (+
) o eliminar (-
) permisos. Por lo tanto, la fórmula u=rwx,g+rw,o-r
provee al dueño permisos de lectura, escritura y ejecución, agrega permisos de lectura y escritura al grupo dueño y elimina el permiso de lectura para los otros usuarios. Los permisos que no son modificados cuando se agreguen o eliminen permisos en estas fórmulas se mantienen intactos. La letra a
(por «all», todos) incluye las tres categorías de usuarios, por lo que a=rx
otorga los mismos permisos (lecutra y ejecución, pero no escritura) a las tres categorías de usuario.
La representación numérica (octal) asocia cada permiso con un valor: 4 para lectura, 2 para escritura y 1 para ejecución. Asociamos cada combinación de permisos con la suma de dichos valores. Se asigna cada valor a las diferentes categorías de usuarios uniéndolos en el orden usual (dueño, grupo, otros).
Por ejemplo, chmod 754 archivo
configurará los siguientes permisos: lectura, escritura y ejecución para el dueño (ya que 7 = 4 + 2 + 1); lectura y ejecución para el grupo (ya que 5 = 4 +1); sólo lectura para los otros usuarios. 0
significa ningún permiso; por lo tanto chmod 600 archivo
provee permisos de lectura y escritura al dueño y ningún permiso para todos los demás. La combinación de permisos más frecuente es 755
para archivos ejecutables y directorios y 644
para archivos de datos.
Para representar permisos especiales, puede agregar un cuarto dígito antes que los demás según el mismo principio, donde los bits setuid
, setgid
y «sticky
» son, respectivamente, 4, 2 y 1. chmod 4754
asociará el bit setuid
con los permisos descriptos anteriormente.
El uso de notación octal sólo permite definir todos los permisos en un archivo de forma simultanea; no puede utilizarse para agregar un nuevo permiso a un conjunto anterior, como p.ej. agregar el permiso de lectura al grupo dueño, ya que deben tenerse en cuenta los permisos existentes y hay que calcular el nuevo valor numérico correspondiente.