Llegamos a ustedes gracias a:



Reportajes y análisis

Administrar usuarios en sistemas Linux

[11/11/2017] Sus usuarios de Linux pueden no ser toros de lidia, pero mantenerlos felices es siempre un desafío, ya que implica la gestión de sus cuentas, el seguimiento de sus derechos de acceso, el seguimiento de las soluciones a los problemas que ejecutan, y mantenerlos informados acerca de cambios importantes en los sistemas que utilizan. Estas son algunas de las tareas y herramientas que hacen que el trabajo sea un poco más fácil.

Configuración de cuentas

La adición y la eliminación de cuentas es la parte más fácil de administrar usuarios, pero todavía hay muchas opciones a considerar. Ya sea que utilice una herramienta de escritorio o vaya con opciones de línea de comandos, el proceso se automatiza en gran medida. Puede configurar un nuevo usuario con un comando tan simple como adduser jdoe y muchas cosas sucederán. La cuenta de John se creará utilizando el siguiente UID disponible y probablemente se rellenará con una serie de archivos que le ayudarán a configurar su cuenta. Cuando ejecuta el comando adduser con un único argumento (el nuevo nombre de usuario), solicitará información adicional y explicará qué está haciendo.

$ sudo adduser jdoe
Adding user `jdoe' ...
Adding new group `jdoe' (1001) ...
Adding new user `jdoe' (1001) with group `jdoe' ...
Creating home directory `/home/jdoe' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for jdoe
Enter the new value, or press ENTER for the default
        Full Name []: John Doe
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y

Como se puede ver, adduser añade la información del usuario (a los / etc / passwd y / etc / archivos en la sombra), crea el nuevo directorio home y lo rellena con algunos archivos de / etc / skel, y le pide que asigne la contraseña inicial y la información de identificación, y luego verifica que todo esté bien. Si responde "n" para no en la final "¿Es correcta la información?", se ejecutará de nuevo a través de todas sus respuestas anteriores, lo que le permite cambiar cualquier cosa que desee cambiar.

Una vez que ha configurado una cuenta, es posible que desee verificar si se ve como espera. Sin embargo, una estrategia mejor es asegurarse de que las elecciones que se hacen "automágicamente" coincidan con lo que desea ver antes de que agregue su primera cuenta. Los valores predeterminados son valores por defecto por un buen motivo, pero es útil saber dónde están definidos en caso de que desee que algunos sean diferentes. Por ejemplo, si no desea que los directorios de inicio en / home, no desea que la UID de usuario empiece con 1000, o no desea que los archivos de los directorios locales sean legibles por todos los usuarios del sistema.

Algunos de los detalles de cómo funciona el comando adduser se configuran en el archivo /etc/adduser.conf. Este archivo contiene una gran cantidad de configuraciones que determinan cómo se configuran las nuevas cuentas y se verá algo así. Tenga en cuenta que las líneas de comentarios y espacios en blanco se omitirán en la salida de abajo para poder centrarnos más fácilmente en la configuración.

$ cat /etc/adduser.conf | grep -v "^#" | grep -v "^$"
DSHELL=/bin/bash
DHOME=/home
GROUPHOMES=no
LETTERHOMES=no
SKEL=/etc/skel
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999
FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999
FIRST_UID=1000
LAST_UID=29999
FIRST_GID=1000
LAST_GID=29999
USERGROUPS=yes
USERS_GID=100
DIR_MODE=0755
SETGID_HOME=no
QUOTAUSER=""
SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"

Como se puede ver, tenemos una shell predeterminada (DSHELL), el valor inicial para UIDs (FIRST_UID), la ubicación de los directorios de inicio (DHOME) y la ubicación de origen de los archivos de inicio (SKEL) que se agregarán a cada cuenta cuando esté configurada -junto con una serie de ajustes adicionales. Este archivo también especifica los permisos que se asignarán a los directorios principales (DIR_MODE).

Una de las configuraciones más importantes es DIR_MODE, que determina los permisos que se utilizan para el directorio de inicio de cada usuario. Dado este ajuste, los permisos asignados a un directorio que el usuario crea serán 755. Dado este ajuste, los directorios caseros se configurarán con los permisos rwxr-xr-x. Los usuarios podrán leer los archivos de otros usuarios, pero no modificarlos ni eliminarlos. Si desea ser más restrictivo, puede cambiar esta configuración a 750 (no hay acceso por parte de nadie fuera del grupo del usuario) o incluso a 700 (sin acceso, pero sí al usuario).

Cualquier configuración de cuenta de usuario se puede cambiar manualmente después de que se configuran las cuentas. Por ejemplo, puede editar el archivo / etc / passwd o el directorio home de chmod, pero configurar el archivo /etc/adduser.conf antes de comenzar a agregar cuentas en un nuevo servidor garantizará cierta consistencia y le ahorrará tiempo y problemas a lo largo del tiempo de ejecución.

Los cambios en el archivo /etc/adduser.conf afectarán a todas las cuentas que se configuren posteriormente a esos cambios. Si desea configurar una cuenta específica de forma diferente, también tiene la opción de proporcionar opciones de configuración de cuentas como argumentos con el comando adduser, además del nombre de usuario. Tal vez quiera asignar una shell diferente para algún usuario, solicitar una UID específica o desactivar los inicios de sesión por completo. La página de manual del comando adduser mostrará algunas de sus opciones para configurar una cuenta individual.

adduser[options][--homeDIR][--shellSHELL][--no-create-home]
[--uid ID] [--firstuid ID] [--lastuid ID] [--ingroup GROUP | --gidID]
[--disabled-password]      [--disabled-login]      [--gecos      GECOS]
[--add_extra_groups] [--encrypt-home] user

En estos días probablemente cada sistema Linux, por defecto, pondrá a cada usuario en su propio grupo. Como administrador, puede optar por hacer las cosas de manera diferente. Es posible que encuentre usuarios en grupos compartidos que funcionen mejor para su sitio, eligiendo usar la opción -gid de adduser para seleccionar un grupo específico. Los usuarios pueden, por supuesto, ser siempre miembros de varios grupos, por lo que tiene algunas opciones sobre cómo administrar grupos, tanto primarios como secundarios.

Cómo tratar las contraseñas de usuario

Puesto que siempre es mala idea conocer la contraseña de otra persona, los administradores generalmente utilizan una contraseña temporal cuando configuran una cuenta y luego ejecutan un comando que forzará al usuario a cambiar su contraseña en su primer inicio de sesión. He aquí un ejemplo:

$ sudo chage -d 0 jdoe

Cuando el usuario inicia sesión, verá algo como esto:

ADVERTENCIA: Su contraseña ha caducado.
Debe cambiar su contraseña ahora e ingresar de nuevo
Cambio de contraseña para jdoe.
(actual) Contraseña UNIX:

Agregar usuarios a grupos secundarios

Para agregar un usuario a un grupo secundario, puede usar el comando usermod como se muestra a continuación: para agregar al usuario al grupo y luego verificar que se realizó el cambio.

$ sudo usermod -a -G sudo jdoe
$ sudo grep sudo /etc/group
sudo:x:27:shs,jdoe

Tenga en cuenta que algunos grupos -como el sudo o el grupo de ruedas- implican ciertos privilegios. Más sobre esto en un momento.

Eliminar cuentas, agregar grupos, etc.

Los sistemas Linux también proveen comandos para eliminar cuentas, agregar nuevos grupos, remover grupos, etc. El comando deluser, por ejemplo, eliminará las entradas de inicio de sesión de usuario de los archivos / etc / passwd y / etc / shadow, pero dejará intacto su directorio personal, a menos que agregue la opción -remove-home o --remove-all-files. El comando addgroup agrega un grupo, pero le dará la siguiente id de grupo en la secuencia (es decir, probablemente en el rango del grupo de usuarios) a menos que utilice la opción --gid.

$ sudo addgroup testgroup --gid=131
Adding group `testgroup' (GID 131) ...
Done.

Gestión de cuentas privilegiadas

Algunos sistemas Linux tienen un grupo de ruedas que da a los miembros la capacidad de ejecutar comandos como root. En este caso, el archivo / etc / sudoers hace referencia a este grupo. En los sistemas Debian, este grupo se denomina sudo, pero funciona de la misma manera y verá una referencia como ésta en el archivo / etc / sudoers:

% sudo ALL = (ALL: ALL) ALL

Esta configuración significa básicamente que cualquiera en el grupo rueda o sudo puede ejecutar todos los comandos con el poder de la root una vez que coloque el comando sudo como prefacio.

También puede agregar más privilegios limitados al archivo sudoers, tal vez para darle a determinados usuarios la posibilidad de ejecutar uno o dos comandos como root. Si lo hace, también debe revisar periódicamente el archivo / etc / sudoers para medir cuántos privilegios tienen los usuarios y cuántos de los privilegios proporcionados todavía son necesarios.

En el comando que se muestra a continuación, estamos viendo las líneas activas en el archivo / etc / sudoers. Las líneas más interesantes en este archivo incluyen el conjunto de rutas de comandos que se pueden ejecutar mediante el comando sudo, y los dos grupos que tienen permiso para ejecutar comandos a través del mismo. Como se acaba de mencionar, a los individuos se les pueden dar permisos al ser incluidos directamente en el archivo de sudoers, pero generalmente es una mejor práctica definir privilegios a través de las pertenencias a grupos.

# cat /etc/sudoers | grep -v "^#" | grep -v "^$"
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
root   ALL=(ALL:ALL) ALL
%admin ALL=(ALL) ALL                  <== admin group
%sudoALL=(ALL:ALL) ALL            <== sudo group

Comprobación de los inicios de sesión

Para ver cuándo un usuario inició sesión por última vez, puede utilizar un comando como éste:

# last jdoe
jdoe     pts/18       192.168.0.11     Thu Sep 14 08:44 - 11:48(00:04)
jdoe     pts/18       192.168.0.11     Thu Sep 14 13:43 - 18:44(00:00)
jdoe     pts/18       192.168.0.11     Thu Sep 14 19:42 - 19:43(00:00)

Si desea ver cuándo inició sesión cada uno de sus usuarios por última vez, puede ejecutar el último comando a través de un bucle como éste:

$ for user in `ls /home`; do   last $user | head -1; done
jdoe     pts/18       192.168.0.11     Thu Sep 14 19:42 - 19:43(00:03)
rocket   pts/18       192.168.0.11     Thu Sep 14 13:02 - 13:02(00:00)
shs      pts/17       192.168.0.11     Thu Sep 14 12:45   still logged in

Este comando solo mostrará a los usuarios que han iniciado sesión desde que el archivo wtmp actual se activó. Las líneas en blanco indican que algunos usuarios nunca han iniciado sesión desde ese momento, pero no los llama. Un mejor comando sería este que muestra claramente los usuarios que no han iniciado sesión en absoluto en este período de tiempo:

$ for user in `ls /home`; do echo -n "$user ";last $user | head -1 | awk '{print substr($0,40)}'; done
dhayes
jdoe pts/18 192.168.0.11 Thu Sep 14 19:42 - 19:43
peanut pts/19 192.168.0.29 Mon Sep 11 09:15 - 17:11
rocket pts/18 192.168.0.11 Thu Sep 14 13:02 - 13:02
shs pts/17 192.168.0.11 Thu Sep 14 12:45 still logged
tsmith

Ese comando es para escribir, pero podría convertirse en un script para hacerlo mucho más fácil de usar.

#!/bin/bash
for user in `ls /home`
do
   echo -n "$user ";last $user | head -1 | awk '{print substr($0,40)}'
done

A veces, este tipo de información puede alertar a los cambios en los roles de los usuarios que sugieren que pueden no necesitar más las cuentas en cuestión.

Comunicación con los usuarios

Los sistemas Linux proporcionan una serie de formas de comunicarse con sus usuarios. Puede agregar mensajes al archivo / etc / motd que se mostrará cuando un usuario inicie sesión en un servidor mediante una conexión de terminal. También puede enviar mensajes a los usuarios con comandos como escribir (mensaje a un solo usuario) o en pared (escribir a todos los usuarios conectados.

$ wall System will go down in one hour
Broadcast message from shs@stinkbug (pts/17) (Thu Sep 14 14:04:16 2017):
System will go down in one hour

Es probable que los mensajes importantes se envíen a través de múltiples canales, ya que es difícil predecir lo que los usuarios realmente notarán. En conjunto, las notificaciones de mensaje de la jornada (motd), en pared y de correo electrónico podrían tener la oportunidad de captar la mayor parte de la atención de sus usuarios.

Preste atención a los archivos de registro

Prestar atención a los archivos de registro también puede ayudarle a entender la actividad del usuario. En particular, el archivo /var/log/auth.log mostrará la actividad de inicio de sesión y cierre de sesión del usuario, la creación de nuevos grupos, etc. Los archivos / var / log / messages o / var / log / syslog le informarán más sobre la actividad del sistema.

Seguimiento de problemas y solicitudes

Independientemente de si instala o no una aplicación de ticketing en su sistema Linux, es importante seguir los problemas en los que se encuentran los usuarios y las solicitudes que realizan. Sus usuarios no estarán contentos si alguna porción de sus peticiones cae a través de las grietas proverbiales. Incluso un registro de papel podría ser útil o, mejor aún, una hoja de cálculo que le permite darse cuenta de los problemas que aún están pendientes y cuál fue la causa raíz de los problemas. Asegurar que los problemas y las solicitudes se aborden es importante y los registros también pueden ayudarle a recordar lo que tenía que hacer para resolver un problema que reaparece muchos meses o incluso años más tarde.

Envolver

Administrar cuentas de usuario en un servidor ocupado depende en parte de comenzar con valores predeterminados bien configurados y en parte de la supervisión de las actividades del usuario y los problemas encontrados. Es probable que los usuarios estén contentos si sienten que son sensibles a sus preocupaciones y saben qué esperar cuando se necesitan actualizaciones del sistema.