19.2. Derechos de usuario

Linux fue concebido desde un principio como un sistema multiusuario, es decir, para ser usado por varios usuarios al mismo tiempo. Esta es una de las grandes diferencias con respecto al sistema operativo Windows de Microsoft.

La característica más importante es la obligación de registrarse en el sistema al inicio de cada sesión de trabajo. Para ello el usuario dispone de un nombre de usuario propio con su contraseña correspondiente. Esta diferenciación entre usuarios impide que personas no autorizadas puedan acceder a archivos que les han sido vetados. Un usuario, por lo general, no puede (o sólo de forma muy limitada) hacer grandes cambios en el sistema como, por ejemplo, la instalación de programas. Tan sólo el superusuario o administrador root dispone prácticamente de derechos ilimitados y posee acceso sin restricciones a todos los archivos. Quien utilice este concepto con precaución y sólo se registre como root cuando sea realmente necesario, puede reducir en gran medida el riesgo de perder datos de forma involuntaria. La amenaza de caballos de Troya o de comandos destructivos introducidos sin querer se reducen de forma significativa dado que normalmente sólo el superusuario puede borrar archivos del sistema o formatear discos duros.

19.2.1. Derechos en el sistema de archivos

Fundamentalmente, en el sistema de archivos Linux, cada archivo pertenece a un usuario y a un grupo. Cada uno de estos dos tipos de propietarios, así como también los extraños, pueden obtener derechos de escritura, de lectura así como de ejecución por parte del propietario del archivo.

Se denomina grupo a un conjunto de usuarios con un tipo concreto de derechos colectivos: un ejemplo podría ser un grupo que trabajase en un proyecto concreto al que podríamos llamar proyecto3. En Linux, todos los usuarios son miembros de al menos una de estas unidades de administración. El grupo por defecto es users. Pueden crearse casi tantos grupos adicionales como se desee, si bien, esta función está reservada para root. Todos los usuarios pueden averiguar de qué grupo son miembros con ayuda del comando groups.

Derechos sobre archivos

A continuación observaremos más de cerca la estructura de los derechos en el sistema de archivos. El resultado de ejecutar ls -l podría ser lo que se ve en el Ejemplo 19.1, “Muestra de los derechos de acceso a un archivo”.

Ejemplo 19.1. Muestra de los derechos de acceso a un archivo

-rw-r----- 1 tux proyecto3 14197 Jun 21  15:03 Roadmap

Tal y como se puede observar en la tercera y cuarta columna, este archivo pertenece al usuario tux, y al grupo proyecto3. Para poder ver detalladamente los derechos sobre el archivo, hay que mirar con atención la primera columna.

-

rw-

r--

---

Tipo

Derechos de usuario

Derechos de grupo

Derechos de otros usuarios

Esta columna consta de un carácter inicial y de otros nueve caracteres divididos en grupos de tres. La primera de las diez letras representa el tipo de archivo. El guión (-) nos indica que en este caso se trata de un archivo. Podría tratarse también de un directorio (d), un enlace (l), un dispositivo de bloques (b) o un dispositivo de caracteres (c).

Los tres bloques siguientes siguen un esquema común: El primer carácter de cada uno de los tres grupos indica si los diferentes grupos de usuarios tienen derecho de lectura sobre este archivo (r) o si no lo tienen (). Los dos signos siguientes funcionan de manera similar: el carácter (w) situado en el medio simboliza el derecho a escribir en el objeto en cuestión; esto no sería posible si aparece un guión (). Por otra parte, en la columna de la derecha de cada grupo puede aparecer el carácter (x) que indica el permiso de ejecución. Dado que en este caso se trata de un archivo de texto y no de un programa ejecutable, se puede prescindir perfectamente de este permiso de ejecución.

En este ejemplo tux, como dueño del archivo Roadmap, tiene tanto el permiso de lectura (r) como el de escritura (w), pero no puede ejecutarlo (no hay x). Los miembros del grupo proyecto3 sólo tienen permiso de lectura sobre el archivo, pero no de escritura ni de ejecución. El resto de usuarios no tiene ningún tipo de permiso sobre este archivo. Es posible asignar otros permisos por medio de las listas de control de acceso o ACLs. Vea a este respecto la Sección 19.2.6, “Access Control Lists” y el capítulo correspondiente en el Manual de administración.

Permisos sobre directorios

Ahora nos dedicaremos a los permisos de acceso sobre los directorios, representados por el carácter d. Los permisos tienen aquí un significado algo diferente. Sirva de aclaración el siguiente ejemplo:

Ejemplo 19.2. Ejemplo de derechos de acceso a un directorio

drwxrwxr-x 1 tux proyecto3 35 Jun 21 15:15 Datosproyecto

En el Ejemplo 19.2, “Ejemplo de derechos de acceso a un directorio” es fácil reconocer que el propietario de (Datosproyecto) es (tux) y que el grupo de propietarios es (proyecto3). A diferencia de los permisos de archivos de la Derechos sobre archivos, el derecho de lectura (r) indica aquí que se puede ver el contenido del directorio. El permiso de escritura (w) hace referencia a la posibilidad de añadir nuevos archivos en este directorio y el derecho de ejecución (x) autoriza a cambiar a este directorio. En relación al ejemplo anterior, esto significa que tanto el usuario tux como los miembros del grupo proyecto3 tienen derecho a cambiar al directorio Datosproyecto -indicado mediante x-, ver su contenido (r), y añadir o borrar archivos (w). Los demás usuarios tienen menos derechos: sólo pueden acceder a él (x) y echar un vistazo (r), pero no pueden añadir ningún archivo (falta w).

19.2.2. Modificar los permisos sobre archivos

Cambiar derechos de acceso

Los permisos de acceso de un archivo o de un directorio pueden ser modificados por el propietario (y por supuesto también por root) mediante el comando chmod, que se introduce junto con los parámetros de permisos de acceso que se desean cambiar y con el nombre del archivo a modificar.

Los dos parámetros están formados por:

  1. las categorías afectadas

    • u (user): el propietario del archivo

    • g (group): el grupo al que pertenece el propietario del archivo

    • o (others): otros usuarios (si no se introduce ningún parámetro, los cambios afectarán a todas las categorías)

  2. un carácter para retirar permisos (-), no modificarlos (=) o añadir (+)

  3. las abreviaturas ya conocidas para

    • r (read): lectura

    • w (write): escritura

    • x (execute): ejecución

  4. así como el nombre del archivo (o archivos) correspondiente escrito a continuación y separado por un espacio en blanco.

Si por ejemplo, el usuario tux, del Ejemplo 19.2, “Ejemplo de derechos de acceso a un directorio”, desea otorgar el permiso de escritura (w) sobre el directorio Datosproyecto a otros usuarios, lo puede llevar a cabo usando el comando: chmod o+w Datosproyecto.

Sin embargo, para quitar el derecho de escritura a todos los usuarios aparte de uno mismo, utilice el comando chmod go-w Datosproyecto. Para prohibir a todos los usuarios crear un archivo en el directorio Datosproyecto introduzca chmod -w Datosproyecto. Ahora ni siquiera el propietario del archivo tiene derecho de modificar su archivo antes de que restablezca el derecho de escritura.

Cambiar los derechos de propiedad

Otros comandos importantes al respecto son chown (Change Owner) y chgrp (Change Group), que gestionan las relaciones de propiedad de los elementos del sistema de archivos. El comando chown permite cambiar el propietario de un archivo. No obstante, esta modificación sólo puede ser realizada por root.

Supongamos que el archivo Roadmap del Ejemplo 19.2, “Ejemplo de derechos de acceso a un directorio” ya no debe pertenecer a tux, sino al usuario geeko. El comando que root debe utilizar para esta modificación es: chown geeko Roadmap.

Asimismo y de forma análoga, el comando chgrp permite cambiar el grupo de propietarios. Hay que tener en cuenta que el propietario del archivo debe pertenecer al grupo al que desea otorgar la categoría de grupo de propietarios. Así por ejemplo, mediante el siguiente comando, el usuario tux del Ejemplo 19.1, “Muestra de los derechos de acceso a un archivo” puede cambiar el grupo de propietarios del archivo Datosproyecto a proyecto4 utilizando el comando chgrp proyecto4 Datosproyecto, siempre y cuando él sea miembro de este grupo. Para root no existe esta restricción.

19.2.3. El bit setuid

Hay situaciones en las que los derechos de acceso son demasiado restrictivos. En estos casos, existen en Linux opciones adicionales que permiten cambiar temporalmente el usuario y grupo de identidad actual para realizar una determinada acción.

Por ejemplo, el programa passwd requiere normalmente derechos de root para acceder a /etc/passwd. Este archivo contiene información importante como por ejemplo los directorios personales de los usuarios y los IDs de usuarios y grupos. Un usuario normal no podría cambiar passwd porque sería demasiado peligroso conceder a todos los usuarios acceso directo a este archivo. La solución a este problema se encuentra en el mecanismo setuid. Setuid (Set User ID) es un atributo especial de archivo que el sistema regula, con el fin de que se ejecuten los programas seleccionados con una determinada identificación de usuario previamente indicada. Veamos el comando passwd:

-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

En el ejemplo puede ver el bit s definido para los permisos de usuario. Gracias al bit setuid, todos los usuarios que inicien el comando passwd lo ejecutarán como usuario root.

19.2.4. El bit setgid

El atributo setuid es válido para usuarios, pero existe un atributo equivalente para grupos: setgid. Cuando se asigne a un programa, este se ejecutará con la identificación de grupo definida, independientemente del usuario que lo haya arrancado. Por eso todos los archivos y subdirectorios que se crean dentro de este directorio pertenecen al mismo grupo que el directorio. Veamos el siguiente ejemplo:

drwxrws---   2 tux archive   48 Nov 19 17:12 backup

Aquí puede ver el bit s definido para los permisos de grupo, lo que significa que el propietario del directorio y los miembros del grupo archive pueden acceder a este directorio. Los usuarios que no son miembros de este grupo se “mapean” al grupo correspondiente. El ID de grupo efectivo de todos los archivos escritos es archive. Por ejemplo, una copia de seguridad que se ejecute con el ID de grupo archive podrá acceder a este directorio sin tener permisos de root.

19.2.5. El bit sticky

Además de los bits setuid y setgid, existe el sticky bit. Aquí se debe diferenciar si se trata de un programa ejecutable o de un directorio. En el caso de un programa, un archivo marcado con este bit se carga a la memoria RAM para no tener que obtenerlo del disco duro cada vez que se utiliza. Hoy en día, este atributo se usa en raras ocasiones porque los discos duros modernos cumplen con creces los requisitos de velocidad. Ahora bien, si se asigna este atributo a un directorio, este impide los usuarios borren los archivos. (En directorios con sticky bit, los usuarios sólo puede eliminar archivos que posean ellos mismos). Los ejemplos típicos son los directorios /tmp y /var/tmp:

drwxrwxrwt   2 root  root   1160 2002-11-19 17:15 /tmp

19.2.6. Access Control Lists

Una extensión del concepto tradicional de derechos sobre archivos y directorios es el concepto de las listas de control de acceso o ACL (Access Control Lists). Mediante estas listas es posible otorgar derechos de acceso a usuarios y grupos distintos de los usuarios y grupos que son dueños de los objetos.

Los directorios y archivos con derechos extendidos se reconocen con un sencillo ls -l por lo siguiente:

-rw-r--r--+  1 tux  proyecto3   517 2003-01-08 18:12 Roadmap

A primera vista, el resultado del comando ls apenas ha cambiado. El dueño del archivo Roadmap es el usuario tux que forma parte del grupo proyecto3. tux tiene tanto derechos de lectura como de escritura sobre este archivo; el grupo y el resto del mundo tienen derecho de lectura. El único indicador de un cambio respecto a un archivo sin ACL es el símbolo + en la primera columna, junto a los bits de derechos.

Para obtener detalles sobre la ACL del fichero de ejemplo Roadmap, utilice el comando getfacl:

# file: Roadmap
# owner: tux
# group: proyecto3
user::rw-
user:jane:rw-       effective: r--
group::r--
group:djungle:rw-   effective: r--
mask::r--
other::---

Las primeras tres líneas no dan ninguna información que no se pueda obtener con ls -l, ya que sólo se trata del nombre de archivo, del dueño y del grupo. Las líneas 4 a 9 representan los verdaderos parámetros de la ACL ACL entries. Los derechos habituales son un subconjunto de los derechos que se pueden definir con la ACL. El ejemplo de ACL otorga derechos de lectura y escritura al dueño del archivo y al usuario jane (líneas 4 y 5). Lo mismo vale para los grupos: El grupo del dueño del archivo tiene derecho de lectura (línea 6) y el grupo djungle tiene derechos de lectura y escritura. El parámetro mask en línea 8 limita los derechos del usuario jane y del grupo djungle a solo lectura. Todos los demás usuarios y grupos no tienen derecho de lectura (línea 9).

Puede encontrar información adicional sobre ACL en el Manual de administraciónen el capítulo Access Control Lists en Linux.


SUSE LINUX Manual de usuario 9.3