Gestión de usuarios y grupos
En un SO multiusuario se utiliza el concepto de usuario para controlar el acceso al sistema. Se pueden declarar diferentes usuarios y asignar un nivel de acceso diferente, o unos privilegios, para cada uno de ellos. Normalmente antes de trabajar en el sistema es necesario iniciar una sesión, momento en el que la persona que quiere acceder al sistema se identifica como uno de los usuarios del sistema.
Aunque de forma intuitiva se puede pensar que cada usuario del sistema es una persona diferente, esto no tiene porqué ser siempre así. Un usuario del sistema (usuario u1 identificado por la contraseña c1) puede ser utilizado por diferentes personas físicas. Independientemente de quien declare ser 'u1', si se identifica con la contraseña adecuada, recibirá el mismo trato por parte del sistema informático.
Además, es común definir usuarios en el SO que no corresponden a ninguna persona. Son usuarios que se utilizan para ejecutar determinados procesos, normalmente servicios, y restringir el acceso a los recursos por parte de dichos procesos.
Así, un usuario del SO se puede corresponder con:
- Una persona
- Un conjunto de personas (todas conocen el identificador y contraseña del usuario)
- Ninguna persona
Los SO que trabajan con usuarios, normalmente también permiten declarar grupos. Un grupo es una colección de usuarios y normalmente se utiliza para aplicar un mismo trato (por ejemplo imponer una limitación en la cantidad de disco utilizada) a cada uno de los usuarios que pertenecen al grupo.
Seguridad
Si se van a definir diferentes usuarios/grupos para controlar el acceso al sistema, es necesario aplicar algunas medidas elementales:
- Se debe explicar a los usuarios que las cuentas son personales. Cualquiera que acceda a su cuenta, porque la dejan abierta, o porque le dicen el usuario/contraseña a otra persona, puede realizar las mismas acciones que ellos.
- No se deben escribir las contraseñas en papel, ni en el teclado, ni en la mesa debajo del teclado, ni en una nota junto al monitor, etc...
- Las contraseñas no deben ser fáciles de adivinar. Una persona que conozca al usuario puede adivinar una contraseña con datos personales. Una máquina puede probar de manera automática muchas contraseñas hasta dar con la correcta (ataque basados en diccionarios). Una buena contraseña debe incluir mayúsculas, minúsculas, números y signos, además de contar con una longitud suficiente. El administrador puede establecer criterios como: longitud mínima, tiempo máximo de uso de la contraseña, etc...
- Se debe configurar el sistema para que permita al usuario realizar su labor, pero no entorpecer la de los otros usuarios, ni robarles información.
- Se debe configurar el sistema para que un usuario no pueda acaparar tantos recursos que provoque una denegación de servicio.
La seguridad no es algo que se pueda alcanzar de manera automática con un producto o una acción. Es un objetivo que se debe tener en mente cuando se realiza cualquier acción.
Usuarios en Unix
El fichero de configuración /etc/passwd contiene la lista de los usuarios declarados en el sistema. Se puede modificar dicho fichero, si se cuenta con los permisos adecuados, directamente con un editor de textos o bien se pueden utilizar comandos (useradd, userdel, usermod...) para gestionar este fichero de forma automática.
Una máquina puede contener, entre otras líneas, algo así:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/sh
daemon:x:2:2:daemon:/sbin:/bin/sh
adm:x:3:4:adm:/var/adm:/bin/sh
lp:x:4:7:lp:/var/spool/lpd:/bin/sh
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/bin/sh
news:x:9:13:news:/var/spool/news:/bin/sh
uucp:x:10:14:uucp:/var/spool/uucp:/bin/sh
operator:x:11:0:operator:/var:/bin/sh
nobody:x:65534:65534:Nobody:/:/bin/sh
vcarceler:x:500:500:vcarceler:/home/vcarceler:/bin/bash
sshd:x:76:76:system user for openssh:/var/empty:/bin/true
rborrell:x:501:501::/home/rborrell:/bin/bash
zope:x:77:77:system user for zope:/var/lib/zope:/bin/false
Cada línea del fichero declara un usuario diferente. Los campos de la línea especifican los atributos del usuario. Este fichero es legible por otodo el mundo, pero sólo el administrador lo puede modificar.
Por cada usuario encontramos:
- login
- Una cadena que identifica al usuario. Debe ser única. El sistema distingue entre mayúsculas y minúsculas.
- contraseña
- Antiguamente en este campo se guardaba la contraseña (cifrada) del usuario. Pero para mejorar la seguridad en la mayoría de los sistemas ya no se guarda aquí, sinó en el fichero /etc/shadow que sólo es legible por el superusuario.
- ID Usuario
- Número que identifica al usuario (UID). El usuario con UID 0 es el superusuairo independientemente del login que tenga. Normalmente se reservan los primeros UIDs para usuarios del sistema, dejando para los usuarios personales UIDs superiores a 999.
- ID Grupo
- Número que identifica el grupo por defecto al que pertenece el usuario (GID)
- Nombre completo
- Información descriptiva utilizada por el comando finger
- Directorio personal
- Directorio al que se accede al iniciar una sesión de trabajo
- Comando
- Comando que se lanza para atender una conexión del usuario, normalmente es un shell. Si el usuario no es una persona, y por tanto no debe iniciar sesión de trabajo, puede escribirse la dirección de un shell que no exista. En el ejemplo, el usuario Zope tiene por shell a /bin/false que es un comando que no hace nada.
Para gestionar los usuarios se utilizan los comandos:
Comando | Función |
---|---|
useradd | Añade usuarios al sistema o bien modifica los parámetros por defecto para los nuevos usuarios. Cuando se crea un usuario nuevo se tiene en cuenta:
en el directorio personal los ficheros que se encuentran en /etc/skel |
userdel | Elimina un usuario. Si se utiliza la opción -r, también se borra su directorio personal (con todo lo que contiene) además de la cola de correo del usuario. |
usermod | Cambia las propiedades de una cuenta de usuario que ya existe. Los cambios más frecuentes incluyen:
|
pwck | Comprueba la integridad de los ficheros de contraseña |
Grupos en Unix
En el sistema están declarados los grupos que lista el fichero /etc/group. Para cada grupo existe una línea que define:
- Nombre del grupo: Una cadena única
- Contraseña: Un grupo puede tener contraseña, si este fuese el caso aquí se guarda la contraseña cifrada. Si por seguridad se utilizan los ficheros shadow, entonces este campo estará vacío y la contraseña se guarda en /etc/gshadow.
- ID de grupo: Número que identifica al grupo, debe ser único. GID.
- Lista de usuarios: login de los usuarios miembros del grupo. Los elementos están separados por comas.
Cada usuario tiene definido un grupo inicial, o grupo por defecto. Este es el grupo al que pertenecen los ficheros que crea el usuario antes de que los cambie. Normalmente cuando se crea un usuario se crea también un grupo para que el usuario lo utilice como grupo por defecto. Además, un usuario puede pertenecer a un número variable de grupos.
Un usuario puede cambiar el grupo de sus ficheros a cualquiera de los grupos a los que el pertenece.
Para gestionar los grupos se utilizan los siguientes comandos:
Comando | Función |
---|---|
groupadd | Define un nuevo grupo. Opciones más frecuentes:
|
groupdel | Elimina un grupo. |
groupmod | Permite cambiar el nombre de un grupo. |
groups | Retorna los grupos a los que pertenece un usuario. |
gpasswd | Permite definir administradores y miembros de grupo |
grpck | Comprueba la integridad de los ficheros de grupo group y gshadow |
Administradores de grupo
Un grupo puede tener:
- Administradores de grupo
- Miembros
- Contraseña
El comando gpasswd permite definir usuarios administradores de grupo. Los administradores de grupo pueden: añadir miembros, eliminar miembros y quitar la contraseña del grupo. Con el comando newgrp un usuario puede cambiar a un nuevo grupo.
Cambiando temporalmente de usuario
Es conveniente que el administrador del sistema tenga con una cuenta personal y sólo utilice la cuenta de root cuando sea necesario. De este modo algunas veces es necesario ejecutar un comando, o acceder a un shell, como si fuésemos otro usuario.
El comando su (swap user) permite que un usuario acceda a un shell como si fuese otro usuario. De este modo puede ejecutar todos los comandos que considere oportuno, y al terminar, símplemente cerrar el shell.
Cuando cambiamos de usuario podemos conservar nuestras variables de entorno, o bien pasar a utilizar las del nuevo usuario. La diferencia depende de si se utiliza o no el parámetro -.
También podemos encontrar el comando sudo que permite que un usuario ejecute determinado comando como si fuese otro. El fichero de configuración /etc/sudoers lista qué acciones puede realizar cada usuario. En algunas distribuciones de GNU/Linux como Ubuntu, se ha optado por desabilitar la cuenta de root para evitar que se acceda al sistema de esta manera. De este modo sudo y su son los únicos modos de ejecutar algún programa como administrador.