Permisos de acceso a los archivos
Conceptos de cuentas de usuario y de grupos
El sistema GNU/Linux es multiusuario, por tanto las personas que lo usan deben identificarse para asegurar la confidencialidad de los datos contenidos en los archivos. En efecto, no sería aceptable que el usuario "Nicolas" pudiera consultar los archivos personales de "Richard" sin el permiso de este.
Cada una de estas personas dispone por tanto de una "cuenta de usuario" en el sistema; pueden utilizarlo tras ser claramente identificadas. Sin embargo, está permitido compartir archivos entre colaboradores y existe una noción de "grupo de usuarios" en GNU/Linux.
Un usuario debe ser miembro obligatoriamente de un grupo de usuarios en un sistema Unix como GNU/Linux: su grupo principal es el utilizado al crear archivos. Por el contrario, puede pertenecer a otros varios grupos: sus grupos secundarios determinan sus derechos de acceso a los archivos creados por otros miembros de los grupos.
Por ejemplo, si se representa los diferentes servicios de una empresa con su personal, puede observarse que, si bien cada individuo tiene una función primaria (indicada entre paréntesis), algunos pueden asumir varias misiones:
Se observa aquí que:
-
Richard y Gerardo pertenecen al servicio técnico (Tec).
-
Nicolas, que es ante todo formador (Curso), también forma parte del servicio técnico (Tec).
-
Willy, que pertenece al servicio técnico (Tec)...
Permisos de Unix
Los permisos de acceso a los archivos determinan las acciones que pueden emprender los usuarios.
La mayoría de los problemas de instalación, configuración y funcionamiento de las aplicaciones en GNU/Linux se debe a derechos de acceso mal adjudicados.
En primer lugar, es necesario saber que los derechos de acceso en Linux se definen por:
-
Una cuenta de usuario: propietario del archivo, es en principio el usuario que lo ha creado.
-
Un grupo: este grupo es generalmente el grupo principal del propietario del archivo, pero puede ser modificado por este y tomar el valor de uno de sus grupos secundarios.
-
Los otros: esta entidad representa toda persona distinta del propietario y que no es miembro del grupo citado anteriormente.
Los derechos de acceso a un archivo se llaman también "modos" en Unix.
Los derechos, el usuario y el grupo propietarios de un archivo pueden verse con el comando ls -l:
En este último ejemplo, el archivo pertenece al usuario willy y al grupo tec; los nueve caracteres rw-r--r-- definen los derechos de acceso a este archivo para el usuario willy (user o u), los miembros del grupo tec (group o g) y los demás (other u o). Más exactamente, estos caracteres se distribuyen así:
Todo usuario está asociado, pues, a una de estas entidades para determinar los permisos vigentes.
Atención: si el usuario es propietario del archivo, se aplican los permisos del propietario, y no los del grupo, aunque el usuario sea también miembro de ese grupo.
El comando GNU ls puede añadir un carácter adicional a la sucesión de nueve derechos Unix estándar cuando las autorizaciones especiales están ubicadas. Un punto ’.’ señala un contexto de seguridad SELinux específico y un ’+’ indica que se utiliza otro método de autorización, como las ACL (Access Control Lists).
1. Permisos estándar
Los permisos de acceso fundamentales en los archivos y directorios en Unix/Linux son los permisos de lectura r (Read), escritura w (Write) y ejecución x (eXecute).
Estos permisos -definidos para las entidades u, g y o- aparecen en el orden r, seguido de w, seguido de x con el comando ls -l. Cuando uno de estos caracteres se reemplaza por un guión, significa que el permiso asociado no está otorgado.
En el ejemplo del apartado anterior, el usuario willy que tiene...
Administrar permisos
1. chgrp
El grupo predeterminado atribuido a los nuevos archivos es el grupo principal del usuario que lo ha creado, a menos que esté habilitado el permiso SGID en el directorio de bienvenida.
El comando chgrp (change group) permite cambiar este grupo; el usuario puede ceder el archivo a cualquier grupo al que pertenezca. La sintaxis del comando es:
chgrp [-R] <grupo> <archivo ...>
La opción principal -R indica al comando que aplique el cambio de forma recursiva (es decir, a todos los archivos y subdirectorios del directorio pasado como argumento).
A diferencia del administrador, el usuario normal sólo puede cambiar los archivos de los que es propietario.
Por ejemplo:
[alejandro]$ id
uid=1006(alejandro) gid=1002(venta) grupos=1002(venta),1003(conta)
[alejandro]$ touch archivo
[alejandro]$ ls -l archivo
-rw-r--r-- 1 alejandro venta 0 jun 3 03:58 archivo
[alejandro]$ chgrp conta archivo
[alejandro]$ ls -l archivo
-rw-r--r-- 1 alejandro conta 0 jun 3 03:58 archivo
El comando similar chown (change owner) también permite cambiar el propietario de un archivo, pero sólo el administrador cuenta con los permisos necesarios.
2. chmod
El comando chmod permite cambiar los permisos (o "modo") de los archivos. Sólo el propietario del archivo y el administrador del sistema (root) pueden utilizarlo.
La sintaxis general del comando es la siguiente:
chmod [-R] <permisos> <archivo ...>
Como en el comando chgrp, la opción -R indica al comando la aplicación del cambio de forma recursiva.
Hay dos maneras de indicar los permisos de acceso a un archivo en Unix: en notación simbólica y en notación octal.
Notación simbólica
La notación simbólica se basa en los caracteres r (lectura), w (escritura) y x (ejecución) para indicar los permisos y u (usuario), g (grupo) y o (otros) para simbolizar las entidades afectadas.
En la notación simbólica, el carácter a equivale a ugo y representa las tres entidades.
Un + en esta sintaxis indica que hay que activar el permiso, un - indica que este permiso debe quitarse y un = permite definir los tres permisos en una sola etapa para la entidad especificada.
La sintaxis general se parece ahora a:
<entidad(es)>[+-=]<permiso(s)>
Tenemos, por ejemplo:
u+x |
Agrega (+) el permiso de ejecución... |
Ejercicios
Ejercicio 1
Determine los permisos de los archivos /usr/bin/passwd y /usr/bin/write, y del directorio /tmp. ¿Qué tienen de particular?
Solución
El comando ls -l permite listar los archivos solicitados mostrando sus permisos. En el caso de un directorio, la opción adicional -d evita mostrar el interior del directorio.
[javier]$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54192 nov 18 2015 /usr/bin/passwd
[javier]$ ls -l /usr/bin/write
-rwxr-sr-x 1 root tty 19584 7 sep 13:05 /usr/bin/write
[javier]$ ls -ld /tmp
drwxrwxrwt 22 root root 4096 ago 3 20:36 /tmp
El carácter s en los permisos de usuario en el archivo /usr/bin/passwd indica que se ejecuta con la identidad de su propietario, en este caso root.
El carácter s dentro de los permisos del grupo en el archivo /usr/bin/write indica que se ejecutará bajo la identidad de su grupo, en este caso tty.
El carácter t en los permisos de otros en el directorio /tmp significa que solo el propietario de este directorio (root en este caso) y el propietario de un archivo creado en el directorio pueden eliminar el archivo de /tmp.
Ejercicio 2
Hacer que los usuarios que no pertenezcan a su grupo no tengan ningún permiso en los archivos que cree en el futuro.
Solución
Basta con modificar la máscara binaria utilizada para los permisos...