7.3
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 el 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 cautela y sólo se registre como el
todopoderoso 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.
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 la salida de pantalla del
ejemplo siguiente:
Ejemplo: Muestra de los derechos de acceso a un
archivo
-rw-r----- 1 Javier proyecto3 14197 Jun 21 15:03
Roadmap
Tal y como se puede observar en la tercera y cuarta
columna, este archivo pertenece al usuario Javier,
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 Javier, 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 tienen ningún tipo de permiso
sobre este archivo. Se puede seguir concediendo
más permisos mediante las llamadas ACLs
Access Control Lists.
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: Ejemplo de derechos de acceso a un directorio
drwxrwxr-x 1 Javier proyecto3 35 Jun 21 15:15
Datosproyecto En la salida de pantalla es fácil reconocer
que el propietario de (Datosproyecto) es (Javier)
y que el grupo de propietarios es (proyecto3).
A diferencia de los permisos de archivos de 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 Javier como los miembros del grupo
proyecto3 tienen derecho a cambiar al directorio
Datosproyecto (x), ver su contenido (r), y añadir
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).
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
· 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
(-), dejar igual (=) o añadir (+)
3. las abreviaturas ya conocidas para
n r read - lectura
n w write - escritura
n 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 Javier, del ejemplo
anterior, 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 sí 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
anterior ya no debe pertenecer a tux, sino al
usuario geeko. El comando que root debe utilizar
para esta modificación es: chown geeko
Roadmap.
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 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.
El Setuid-Bit
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 cdrecord, empleado para
escribir CDs (o DVDs) requiere derechos de root
para acceder al grabador. Por tanto, un usuario
normal no puede grabar CDs. Sin embargo, sería
peligroso que todos los usuarios tuvieran acceso
directo a todos los dispositivos.
La solución 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 cdrecord:
-rwxr-x--- 1 root root 281356 2002-10-08 21:30
/usr/bin/cdrecord Asignamos el Setuid Bit con el comando chmod
u+s /usr/bin/cdrecord. Mediante chgrp users /usr/bin/cdrecord el programa
cdrecord se asigna al grupo users. Los derechos
de acceso que tenemos: -rws--x--- 1 root users 281356 2002-10-08 21:30
/usr/bin/cdrecord Con Setuid-Bit, todos los usuarios que pertenezcan
al grupo users pueden utilizar el programa. En
la práctica ésto significa que el
programa se puede ejecutar como usuario root.
Hay que tener en cuenta que cada vez que otorga
a un programa el Setuid-Bit, existe una nueva
posibilidad de acceder malintencionadamente al
computador, por ello debemos realizar este proceso
sólo en casos excepcionales, cuando conozca
el programa con toda exactitud y pueda calcular
los riesgos que corre.
El Setgid-Bit
El atributo Setuid es válido para el usuario,
pero el atributo Setgid tiene las mismas propiedades
para el grupo. En este caso, se ejecutará
un programa con la identificación de grupo
que se indicó, independientemente del usuario
que lo arrancó. Por eso todos los archivos
y subdirectorios que se crean dentro de este directorio
pertenecen al mismo grupo que el directorio: drwxrwxr-- 2 root archive
48 Nov 19 17:12 backup Ahora asignamos el Setgid-Bit mediante el comando
chmod g+s /prueba
A continuación, los derechos de acceso
serán: drwxrwsr-- 2 root archive
48 Nov 19 17:12 backup El Sticky-Bit
Además del Setuid-Bit y el Setgid-Bit,
existe el denominado Sticky-Bit. Aquí se
debe diferenciar si se trata de un programa ejecutable
o de un directorio. Hoy en día, este Bit
no se utiliza para archivos por lo que solo tiene
un significado histórico.
Pero si se asigna este atributo a un directorio,
éste impide que el usuario borre sus 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 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 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 a
penas ha cambiado. El dueño del archivo
Roadmap es el usuario Javier que forma parte del
grupo proyecto3. Javier 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: Javier
# group: proyecto3
user::rw-
user:jose:rw- effective: r--
group::r--
group:djungla: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 comprendidas entre la 4 y la
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
jose (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 djungla tiene derechos de lectura y escritura.
El parámetro mask en línea 8 limita
los derechos del usuario jose y del grupo djungla
a solo lectura. Todos los demás usuarios
y grupos no tienen derecho de lectura (línea
9). |