lunes, 23 de abril de 2018

07 - Administración de Usuarios y Grupos

Usuarios

Linux es un SO multiusuario y es imprescindible que el sistema implemente mecanismos de administración y seguridad para proteger los datos de los diferentes usuarios.

Las cuentas de usuarios representan a personas físicas, usuarios reales, o a entidades que gestionan servicios o aplicaciones, usuarios lógicos. Todo usuario definido en el sistema se corresponde con un identificador único (UID) y con una cuenta, donde se almacenan sus datos personales en una zona de disco reservada.

Observación

Normalmente a los usuarios normales se les asignan identificadores desde 1000 en adelante (o desde 500, en otras distros). Los identificadores por debajo de 100 se reservan para usuarios especiales del sistema.

Características generales de una cuenta
  • Nombre e identificador de usuario únicos.
  • Pertenece a un grupo principal.
  • Puede pertenecer a otros grupos de usuarios.
  • Tiene asociado un directorio personal para datos (carpeta home) y un intérprete de comandos (shell).
  • Debe contar con una clave de acceso personal y difícil de averiguar.
  • Tiene un perfil de entrada propio, donde se definen las características iniciales de su entorno de operación.
  • Puede tener una fecha de caducidad.
  • Pueden definirse cuotas de disco para cada sistema de archivos.
  • Es posible contar con un sistema de auditoria que registre las operaciones realizadas por el usuario.
Grupos

Para poder administrar los permisos de los usuarios de una forma más flexible, Linux permite la organización de usuarios en grupos y establecer permisos a los grupos.

Los grupos son construcciones lógicas usadas para agrupar varias cuentas de usuario con un propósito común, habitualmente compartir los mismos permisos de acceso en algunos recursos. Cada grupo se corresponde con un identificador único (GID). Los grupos solo pueden contener usuarios, no otros grupos.

Cada cuenta de usuario debe pertenecer al menos a un grupo principal o grupo primario y opcionalmente puede pertenecer a otros grupos secundarios.

Por ejemplo, si en un centro educativo el grupo "profesores" tiene acceso a ciertas carpetas, cuando demos de alta un profesor nuevo, tan solo tendremos que añadirlo al grupo "profesores" para que pueda acceder a todas esas carpetas.


Observación

Normalmente a los grupos que creemos se les asignan identificadores desde 1000 en adelante (o desde 500, en otras distros). Los identificadores por debajo de 100 se reservan para grupos especiales del sistema.

Ficheros de configuración y perfiles

Linux proporciona varios métodos para definir los usuarios que pueden conectarse al sistema. Lo típico es definir localmente en cada máquina las cuentas de los usuarios y grupos, aunque también pueden usarse métodos externos de autentificación (como PAM), que permiten que varias máquinas compartan las mismas definiciones para sus usuarios comunes.

En el proceso de definición de usuarios locales se ven involucrados los siguientes ficheros:
  1. /etc/passwd
  2. /etc/shadow
  3. /etc/group
  4. /etc/gshadow
1. /etc/passwd

Es el fichero principal de descripción de usuarios locales. Se compone de:
  1. Nombre de usuario.
  2. No usado (antiguamente, clave).
  3. Identificador de usuario (UID).
  4. Identificador del grupo primario.
  5. Descripción o nombre completo de la persona.
  6. Directorio personal.
  7. Intérprete de comandos.
/etc/passwd
2. /etc/shadow

Fichero que incluye las contraseñas encriptadas y las restricciones de las claves de acceso a las cuentas. Campos:
  1. Nombre de usuario.
  2. Clave codificada.
  3. Fecha del último cambio de clave.
  4. Días hasta que la clave pueda ser cambiada.
  5. Días para pedir otro cambio de clave.
  6. Días para avisar del cambio de la clave.
  7. Días para deshabilitar la cuenta tras su caducidad.
  8. Fecha de caducidad.
  9. Reservado (normalmente ignorado).

Notas

- Las fechas se expresan como el nº de días desde el 1/1/1970. Una ! al principio de la contraseña significaría que está bloqueada.

- Si en el campo de la contraseña aparece un * o una ! quiere decir que el usuario no podrá logearse a través de la contraseña (aunque podría logearse por otros métodos)

/etc/shadow
3. /etc/group

Contiene la definición de los grupos de usuarios. Campos:

  1. Nombre del grupo.
  2. No usado (antiguamente, clave del grupo).
  3. Identificador del grupo (GID).
  4. Lista de usuarios que tienen este grupo como secundario.
/etc/group
4. /etc/gshadow

Fichero oculto y opcional que contiene las claves de grupos privados. Normalmente no se utiliza. Campos:
  1. Nombre del grupo.
  2. Clave codificada (opcional).
  3. Lista de usuarios administradores.
  4. Lista de usuarios normales.

/etc/gshadow
Nota: La ! indica que no se usa clave o que está bloqueada


5. profile vs bashrc vs .bash_logout

Son tres ficheros ocultos en el home de cada usuario que permiten configurar de forma automática el entorno de su cuenta en tres momentos distintos:
  • profile es el mas importante y todas las órdenes que contiene se ejecutan en cada inicio de sesión. Si se modifica habrá que reiniciar la sesión para poder apreciar los cambios.
  • bashrc se lee cuando el usuario arranca una shell. Si lo modificamos bastaría arrancar una shell nueva para visualizar los cambios.
  • bash_logout se interpreta cuando salimos del sistema, es decir podemos aprovecharlo realizar ciertas acciones cuando finalicemos la sesión.

Comandos

La administración de usuarios y grupos solamente puede realizarlas el superusuario utilizando los comandos de gestión de usuarios. Las tareas y los comandos para realizarlas son:
  1. Creación de usuarios             useradd
  2. Modificación de usuarios        usermod
  3. Eliminación de usuarios         userdel
  4. Creación de grupos               groupadd
  5. Modificación de grupos          groupmod
  6. Eliminación de grupos           groupdel
  7. Añadir usuarios a un grupo    adduser
  8. Quitar usuarios de un grupo   deluser
useradd

Permite añadir un usuario indicando como parámetros su información particular en la misma línea de comandos. La sintaxis es:

useradd [opciones] nombre-usuario

Se añade el usuario javier al grupo principal profesores y al grupo secundario direccion, creando su directorio personal en /home/javier si no existe ya y seleccionando bash como intérprete de comandos
Nota: Aunque existe la posibilidad de asignar una clave al usuario a través del comando anterior, no es conveniente por seguridad y es mejor hacerlo de la manera habitual, a través del comando passwd.

Importante: Contrastar con adduser

usermod

Permite modificar todos los parámetros de la cuenta del usuario.

usermod [opciones] nombre-usuario


Mueve el directorio home de javier a alumno, le asigna un nuevo UID, un nuevo  login y un nuevo shell y bloquea la cuenta


userdel

Elimina una cuenta de usuario (pero por defecto no elimina los datos)

userdel [opciones] nombre-usuario


-r para eliminar también el home


groupadd

Crear un nuevo grupo indicando como parámetro el nombre del grupo.

groupadd nuevo_grupo

groupmod

Modificar el nombre de un grupo o el GID del mismo.

groupmod [-g GID] [-n nuevo-nombre] nombre-grupo

groupdel

Borrar un grupo. Sólo se puede borrar un grupo si ningún usuario lo tiene como grupo primario

# groupdel grupo_existente

gpasswd

Permite agregar o eliminar un usuario a un grupo. Lo usuarios y grupos deben existir

# gpasswd -a usuario grupo
# gpasswd -d usuario grupo

adduser

Es una utilidad mas amigable que se utiliza para crear y configurar un usuario por defecto como se espera o añadir un usuario a un grupo.

  • Si se invoca con un argumento (sin opciones), adduser pensará que el argumento es un usuario para el que se creará de forma automática el home, se solicitará la contraseña y también información personal de forma interactiva. 
  • Si se invoca con dos argumentos (sin opciones), adduser tratará de añadir el usuario (primer argumento) al grupo (segundo argumento)

Notas:
adduser dispone de opciones en la línea de comandos similares a useradd
- Se recomienda el uso de esta utilidad frente al comando useradd

deluser

Es una utilidad mas amigable que se utiliza para eliminar un  usuario o eliminar un usuario de un grupo.

  • Si se invoca con un argumento (sin opciones), deluser pensará que el argumento es un usuario que hay que eliminar
  • Si se invoca con dos argumentos (sin opciones), deluser tratará de eliminar el usuario (primer argumento) del grupo (segundo argumento).