5.- GESTIÓN DE USUARIOS

GNU/Linux es un sistema multiusuario, lo que significa que varios usuarios se pueden conectar simultáneamente (abrir una sesión) al sistema a través de la línea de comandos o la GUI. Por ello, un sistema de este tipo debe incorporar mecanismos que permitan identificar y autenticar a los usuarios que se conectan para ejecutar programas en el equipo, y controlar qué pueden hacer en el sistema dichos usuarios.

Es por ello que la gestión de usuarios es uno de los capítulos más importantes de la administración de un sistema, pues a parte de definir las características y los entornos básicos de trabajo de cada usuario, define el entorno de seguridad en base a los mecanismos de seguridad tradicionales utilizados por UNIX para conceder derechos de acceso a los recursos del sistema, que restringirá las tareas que un usuario puede realizar en el sistema.

Aunque la mayor parte de las cuentas de usuario corresponden a personas concretas, a veces también es necesario crear cuentas para pseudousuarios, es decir, cuentas que no están asociadas a una persona determinada, sino que son utilizadas por una aplicación o para ejecutar ciertas tareas.

En todo sistema UNIX existe una cuenta con nombre "root" y UID 0 que corresponde al superusuario o administrador. Esta cuenta tiene el control total del sistema y acceso ilimitado a todos los recursos, mientras que todas las demás cuentas se ven sujetas a los mecanismos normales de comprobación de permisos y restricciones de uso de recursos.

Por otra parte, se pueden definir grupos de usuarios. Esto permite tratar en bloque a subconjuntos de usuarios a la hora de comprobar permisos de acceso a ficheros, directorios, dispositivos, etc. Un usuario puede pertenecer a varios grupos a la vez.

PROCESO DE LOGIN

Tras introducir las credenciales, se ejecuta una aplicación denominada login, que realiza las siguientes acciones:

  • Comprueba que el usuario y el grupo existen y que se permite el acceso al usuario.

  • Comprueba que el usuario tiene permitido el acceso a una ubicación concreta.

  • Comprueba que la contraseña sea correcta, y en caso de que no lo sea, permite un determinado número de reintentos, tres por lo general.

  • Comprueba que la contraseña sea válida y le solicita al usuario una nueva contraseña en caso de que ésta haya expirado.

  • Asigna variables de entorno como el directorio home del usuario y la ruta.

  • Inicia el proceso shell.

  • Presenta al usuario el prompt de la línea de comandos.

USUARIOS Y PRIVILEGIOS

Todo sistema operativo multiusuario cuenta con algún mecanismo para definir usuarios que pueden ejecutar acciones privilegiadas y saltarse las protecciones habituales, para que puedan administrar el sistema o partes del mismo; a estos usuarios se los denomina, en general, usuarios privilegiados. Por otra parte, existen también usuarios no privilegiados que sólo pueden acceder a sus propios recursos o a otros que se lo permitan, no pueden efectuar diversas operaciones especiales en la máquina, ni ver cualquier dato de la misma, saltarse protecciones, etc.

En el caso concreto de los sistemas Unix, casi todos cuentan con dos categorías de usuarios: el superusuario y los demás usuarios.

  • El superusuario (normalmente llamado root) es un usuario privilegiado que puede hacer cualquier cosa en el sistema y saltarse cualquier protección. Es la cuenta desde la que habitualmente se hacen las tareas de administración de la máquina. No se recomienda utilizarla para otros trabajos que no sean de administración del sistema, ya que su poder sin límites hace que se corra el riesgo de destruir el sistema completo en caso de equivocaciones especialmente graves. El superusuario se caracteriza por que su UID (identificador numérico) es cero. De hecho, cualquier usuario cuyo UID sea cero tiene poderes de superusuario, independientemente de cómo se llame la cuenta.

  • El resto de los usuarios son usuarios no privilegiados. Sólo pueden acceder a aquellos recursos cuyos permisos se lo autoricen. Además, no pueden hacer diversas operaciones especiales, como cambiar de identidad, parar la máquina, montar y desmontar sistemas de ficheros, enviar señales a los procesos de otros usuarios, etc.

A veces se desea que un cierto usuario pueda ejecutar determinada operación privilegiada. Un método podría ser utilizar el mandato su, sin embargo, si se le comunica al usuario en cuestión la contraseña de root, dicho usuario puede usarla para hacer cualquier operación privilegiada, lo cual constituye una preocupación de seguridad y estabilidad del sistema.

Existe un programa llamado sudo que permite que un usuario ejecute con privilegios de superusuario sólo los mandatos que se desee, por lo que es una herramienta muy útil para delegar tareas de administración en usuario no privilegiados.

BASE DE DATOS DE USUARIOS Y GRUPOS

Las distribuciones Linux almacenan la información sobre las cuentas de los usuarios conocidos en una serie de ficheros a los que conjuntamente se denominan base de datos de usuarios y grupos. Estos ficheros son: /etc/passwd, /etc/shadow, y /etc/group. Por lo general no se necesita modificar estos archivos, puesto que existen comandos que nos permiten agregar (useradd), modificar (usermod y eliminar (userdel) usuarios y grupos. No obstante, sí es útil conocer qué información contienen.

El primer archivo, /etc/passwd, contiene la información sobre los usuarios definidos en el sistema. Se trata de un fichero de texto con una línea por usuario. Cada línea contiene varios campos, separados por el carácter de dos puntos (:). El orden en que aparecen los campos es el siguiente:

nombre:contraseña:UID:GID:GECOS:directorio home:shell

Se recomienda no modificar manualmente el contenido de este fichero. No obstante, si en algún momento fuera necesario tocar directamente este fichero, debe ejecutarse el mandato vipw.

El significada de cada uno de los campos es:

  • nombre: es el nombre de la cuenta en cuestión, es decir, la cadena alfanumérica por la que se conoce al usuario. Cada usuario debe tener un nombre de cuenta diferente. Para mantener una cierta coherencia, conviene que el administrador del sistema asigne los nombres de cuenta siguiendo alguna política sistemática. Por ejemplo, en muchas ocasiones se utiliza la inicial del nombre seguida del primer apellido completo. Si aplicando las reglas anteriores coinciden dos nombres de cuenta, se puede añadir la inicial del segundo apellido.

  • contraseña: este campo siempre aparece con una x como un marcador para la contraseña. La contraseña real se encuentra en el archivo /etc/shadow.

  • UID: es el identificador numérico asociado a la cuenta. Las personas recuerdan y manejan mejor identificadores alfanuméricos, como nombres, pero el sistema operativo y las aplicaciones manejan mucho más eficientemente los identificadores numéricos. Por este motivo, todo usuario tiene, además de su nombre de cuenta, un identificador numérico denominado UID (User Identifier). Cada usuario debe tener un UID diferente, aunque en determinadas circunstancias puede ser útil que dos o más usuarios tengan el mismo UID.

    Al crearse cada usuario y grupo, se les asigna una única ID de usuario (UID) e ID de grupo (GID). Los UIDs y GIDs van del 0 al 65535.

    Es muy importante destacar que la característica que define al superusuario es tener un UID de 0. Por tanto, cualquiera cuenta con UID 0, independientemente de cuál sea su nombre, es una cuenta de superusuario. Evidentemente, sólo la cuenta "root" debería tener un UID 0.

    A la hora de asignar los identificadores numéricos nuevamente conviene que el administrador siga alguna política coherente. La mayoría de las distribuciones reservan rangos de números para tipos particulares de usuarios y grupos. Por ejemplo, la distribución Red Hat reserva las UID y GID del 1 al 499 para usuarios y grupos del sistema que ejecutan servicios. Ubuntu reserva las UID y GID del 1 al 999 para el mismo fin. De este modo, el primer usuario creado en un host Red Hat tendrá una UID de 500 y también una GID de 500. En Ubuntu, el primer usuario creado tendrá una UID y una GID de 1000.

    Se puede comprobar el rango de las UID y GID asignadas a los usuarios en el archivo /etc/login.defs. El rango está delimitado por UID_MIN y UID_MAX para las UID y el delimitado por GID_MIN y GID_MAX para las GID.

  • GID: es el identificador numérico del grupo primario al que pertenece el usuario.

  • GECOS: contiene información adicional sobre el usuario, de interés para otros usuarios, aunque no para el sistema operativo. Habitualmente aquí figura el nombre completo del usuario, su dirección o despacho, su número de teléfono del trabajo o particular, separados por comas.

  • directorio home: indica cuál es el directorio base de este usuario, es decir, el directorio a partir del cual se almacenan sus ficheros y donde comienzan sus sesiones de trabajo interactivas.

  • intérprete: indica el nombre absoluto del intérprete de mandatos que este usuario utiliza para las sesiones de trabajo interactivas. EN UNIX cada usuario puede tener el intérprete de mandatos que prefiera, siempre que aparezca listado en el fichero /etc/shells.

En el fichero /etc/passwd no aparece más contraseña que la letra x. Esto se debe a que la mayoría de las distribuciones modernas utilizan contraseñas ocultas para gestionar la administración de contraseñas.

Antiguamente, las contraseñas se almacenaban mediante funciones hash de sentido en /etc/passwd, lo cual ofrecía una seguridad limitada y exponía los nombre de usuario y las contraseñas a ataques de fuerza bruta. Los ataques por fuerza bruta son un método para averiguar contraseñas consistentes en probar miles o millones de contraseñas diferentes hasta encontrar una contraseña coincidente. El archivo /etc/passwd era especialmente susceptible a este ataque, pues al ser utilizado por aplicaciones debía ser legible para todos los usuarios. Esto se volvía especialmente peligroso cuando existía la posibilidad de robar una copia del archivo passwd del host y atacarla mediante fuerza bruta en otro equipo. Dada la débil seguridad del tipo de contraseñas almacenadas en el archivo passwd, cualquier ordenador moderno puede averiguar contraseñas sencillas en cuestión de minutos o contraseñas más complejas en unos días.

Las contraseñas ocultas ayudan a reducir este riesgo, separando los usuarios de las contraseñas y almacenando las contraseñas mediante una función hash en el archivo /etc/shadow. Por defecto se utilizan hashes MD5 (aunque las distribuciones más recientes emplean otros tipos de hash, como Blowfish). Estos hashes MD5 son difíciles de romper, y para dotar a las contraseñas de una mayor protección se asigna la propiedad del archivo /etc/shadow al usuario root, de modo que root sea el único usuario con acceso al archivo.

El fichero /etc/shadow mantiene una estructura similar a la del fichero /etc/passwd, con una línea por cada usuario y el carácter de dos puntos para separar los campos de que consta cada línea. Cada línea contiene los siguientes campos, que son:

  • Nombre de usuario.

  • Contraseña: este campo está encriptado, y hay dos tipos de caracteres especiales que pueden prefijar el campo de la contraseña y que indican el estado de la cuenta de usuario. Si el campo está prefijado con "¡" o con "*", la cuenta está bloqueada y el usuario no podrá acceder. Si el campo está prefijado con "!!", lo que ocurre es que la contraseña nunca se ha asignado y el usuario no podrá acceder al host.

  • Fecha de última modificación de la contraseña.

  • Mínimo de días entre cambios de contraseña.

  • Tiempo de expiración de la contraseña en días.

  • Periodo de aviso de expiración de la contraseña en días.

  • Número de días tras la expiración de la contraseña en los que se desactivará la cuenta.

  • Fecha de desactivación de la cuenta.

El fichero /etc/groups contiene la información sobre los grupos de usuarios definidos en el sistema. Su estructura es similar a la del fichero /etc/passwd, con una línea por cada grupo y el carácter de dos puntos para separar los campos de que consta cada línea. Cada línea contiene cuatro campos, que son:

nombre:contraseña:GID:miembros

Se recomienda no modificar manualmente el contenido de este fichero. De todas formas, si fuera necesario cambiar este fichero se puede hacer con cualquier editor de texto.

  • nombre: es el nombre del grupo.

  • contraseña: este campo permite al usuario acceder a dicho grupo utilizando el comando newgrp. Si se activan las contraseñas ocultas, como ocurre en el archivo passwd, se sustituirán las contraseñas del archivo group por una x y se almacenarán las contraseñas reales en el archivo /etc/gshadow.

# gpasswd groupname
New Password:
Re-enter new password:

$ newgrp groupname
  • GID: es el identificador numérico asociado al grupo.

  • miembros: lista de los miembros del grupo (nombres de usuario), separados por comas.

MENSAJES DE ACCESO

La pantalla de acceso es lo primero que ven los usuarios. Es recomendable que se incluya algún aviso e información relevante en dicha pantalla. Para ello se debe modificar el contenido de los archivos /etc/issue y /etc/issue.net. El archivo issue se muestra cuando se accede mediante la línea de comandos de la consola del host, y el archivo issue.net se muestra cuando se accede a la línea de comandos mediante una sesión SSH.

Además de los archivos /etc/issue y /etc/issue.net, el contenido del archivo /etc/motd también se muestra justo tras acceder desde la línea de comandos.

CREAR USUARIO

Por defecto, en la mayoría de las distribuciones Linux, incluyendo a Red Hat y Ubuntu, al crear un nuevo usuario se crea un nuevo grupo con el mismo nombre que el usuario que se está creando. El nuevo usuario es siempre el único miembro de este grupo.

Al crearse cada usuario y grupo, se les asigna una única ID de usuario (UID) e ID de grupo (GID). Las UID van del 0 al 65535, teniendo siempre el usuario root la UID 0. Las GID también van del 0 al 65535, con el valor 0 reservado al usuario root.

$ id
uid=5000(sistemas) gid=5000(sistemas) groups=5000(sistemas),10(wheel)
$ id root
uid=0(root) gid=0(root) groups=0(root)

ELIMINAR USUARIO

Cuando se elimina un usuario, se elimina el directorio /home/username y todos los archivos que éste contengo, pero no eliminará los archivos de este usuario que pudieran encontrarse fuera de este directorio. El comando userdel tampoco eliminará un usuario que se encuentre en el host en ese momento, es decir, que haya accedido al host y aún no haya salido de éste.

Eliminar un usuario que posee archivos puede resultar problemático. Al eliminar un usuario, todos los objetos del usuario ya no le pertenecerán. Podemos identificar estos objetos gracias a que el nombre de usuario será sustituido en el listado de archivos por su UID anterior (y lo mismo ocurre con los grupos eliminados). En consecuencia, si creamos otro usuario que utilice el mismo UID o GID, dicho usuario pasará a ser propietario de los archivos del usuario eliminado. Es recomendable confirmar los archivos y directorios que posee un usuario y decidir qué se va a hacer con ellos antes de borrar el usuario. Para comprobar los archivos de un usuario y su grupo primario se puede ejecutar el siguiente mandato:

find / -user UID -o -group GID

DESACTIVAR USUARIO

El siguiente comando, permite bloquear la cuenta de un usuario e impedir su acceso al host utilizando su contraseña:

$ sudo usermod -L dppascual
$ sudo passwd -l dppascual

Se puede desbloquear la cuenta mediante la opción -U:

$ sudo usermod -U dppascual
$ sudo passwd -u dppascual

Sin embargo, esto no desactivaría completamente el acceso al host. Los usuarios podrían acceder al host a través de otros mecanismos de autenticación, como claves públicas para el acceso remoto mediante SSH. Hay otra manera de desactivar totalmente el acceso al usuario, y es:

$ sudo usermod -e YYY-MM-DD dppascual

Por último, podemos establecer /bin/false como shell en Ubuntu, o /sbin/nologin en Red Hat. Esto no bloquearía la cuenta de usuario, pero desactivaría el acceso del usuario a la línea de mandatos:

$ sudo usermod -s /bin/false
$ chsh -s /bin/false

VIGENCIA DE LAS CONTRASEÑAS

La vigencia de las contraseñas nos permite especificar el periodo temporal de validez de las contraseñas. Una vez expirado este periodo, el usuario tendrá que elegir una nueva contraseña. Esto tiene la ventaja de garantizar que las contraseñas se cambiarán regularmente y de que cualquier contraseña robada, reventada o revelada por un antiguo empleado tendrá una validez temporal limitada. Desafortunadamente para muchos usuarios, la necesidad de cambiar regularmente sus contraseñas incrementa su deseo de anotar éstas. Se recomienda una vigencia de entre 30 y 60 días para la mayoría de las contraseñas, dependiendo de la naturaleza del host.

Hay dos maneras de gestionar la vigencia de las contraseñas. La primera hace uso de una herramienta de la línea de comandos llamada chage para asignar o cambiar individualmente la expiración de la contraseña de una cuenta de un usuario. El otro método es asignar valores por defectos para todos los usuarios en el archivo /etc/login.defs. Los controles disponibles para la vigencia de contraseñas en /etc/login.defs son:

PASS_MAX_DAYS 60
PASS_MIN_DAYS 0
PASS_WARN_AGE 7

results matching ""

    No results matching ""