GNU/Linux >> Tutoriales Linux >  >> Linux

Una introducción a la supervisión de cuentas de usuario de Linux

Hace mucho tiempo en la historia de UNIX, los usuarios de un servidor eran usuarios reales de UNIX con entradas en /etc/shadow y un shell de inicio de sesión interactivo y un directorio de inicio. Había herramientas para que los administradores se comunicaran con los usuarios y monitorearan su actividad para evitar errores estúpidos o maliciosos que causarían una asignación injusta de los recursos del servidor.

En estos días, es menos probable que su base de usuarios tenga entradas en /etc/shadow , en lugar de ser administrado por una capa de abstracción, ya sea LDAP, Drupal u OpenShift. Por otra parte, ahora hay muchos más servidores, lo que significa que hay muchos más administradores de sistemas que inician y cierran sesión para realizar el mantenimiento. Donde hay actividad, hay oportunidad para errores y confusión, así que es hora de desempolvar esas viejas herramientas de monitoreo y darles un buen uso.

Estos son algunos de los comandos de monitoreo que puede haber olvidado (o que nunca conoció) para ayudarlo a rastrear lo que ha estado sucediendo en su servidor.

quien

Primero, lo básico.

El who El comando es proporcionado por el paquete GNU coreutils, y su trabajo principal es analizar el /var/log/utmp archivar e informar sus hallazgos.

El utmp El archivo registra los usuarios actuales en el sistema. No necesariamente muestra todos los procesos, porque no todos los programas inician utmp Inicio sesión. De hecho, es posible que su sistema ni siquiera tenga un utmp archivo por defecto. En ese caso, who recurre a /var/log/wtmp , que registra todos los inicios y cierres de sesión.

El wtmp el formato de archivo es exactamente el mismo que utmp , excepto que un nombre de usuario nulo indica un cierre de sesión y el ~ El carácter indica un apagado o reinicio del sistema. El wtmp el archivo es mantenido por login(1) , init(1) y algunas versiones de getty(8) , sin embargo, ninguna de estas aplicaciones crea el archivo, por lo que si elimina wtmp , entonces se desactiva el mantenimiento de registros. Solo eso es bueno saberlo:si wtmp falta, ¡deberías averiguar por qué!

La salida de who --heading se parece a esto:

NAME     LINE     TIME               COMMENT 
seth     tty2     2020-01-26 18:19   (tty2)
larry    pts/2    2020-01-28 13:02   (10.1.1.8)
curly    pts/3    2020-01-28 14:42   (10.1.1.5)

Esto le muestra el nombre de usuario de cada persona que inició sesión, la hora en que se registró su inicio de sesión y su dirección IP.

El who El comando también proporciona humildemente la forma POSIX oficial de descubrir qué usuario usted están registrados como, pero solo si utmp existe:

$ who -m
curly   pts/3   2020-01-28 14:44 (10.1.1.8)

También proporciona un mecanismo para mostrar el nivel de ejecución actual:

$ who -r 
     run-level 5   2020-01-26 23:58

w

Para un poco más de contexto sobre los usuarios, el simple w El comando proporciona una lista de quién ha iniciado sesión y qué está haciendo. Esta información se muestra en un formato similar a la salida de who , pero el tiempo que el usuario ha estado inactivo, el tiempo de CPU utilizado por todos los procesos adjuntos al TTY de inicio de sesión y el tiempo de CPU utilizado solo por el proceso actual. El proceso actual del usuario aparece en el campo final.

Salida de muestra:

$ w
 13:45:48 up 29 days, 19:24,  2 users,  load average: 0.53, 0.52, 0.54
USER     TTY     LOGIN@  IDLE    JCPU   PCPU WHAT
seth     tty2    Sun18   43:22m  0.01s  0.01s /usr/libexec/gnome-session-binary
curly    pts/2   13:02   35:12   0.03s  0.03s -bash

Alternativamente, puede ver la dirección IP del usuario con -i o --ip-addr opción.

Puede restringir la salida a un solo nombre de usuario especificando sobre qué usuario desea información:

$ w seth
 13:45:48 up 29 days, 19:27,  2 users,  load average: 0.53, 0.52, 0.54
USER     TTY     LOGIN@  IDLE    JCPU   PCPU WHAT
seth     tty2    Sun18   43:25m  0.01s  0.01s /usr/libexec/gnome-session-binary

utmpdump

El utmpdump La utilidad hace (casi) exactamente lo que sugiere su nombre:vuelca el contenido del /var/log/utmp archivo a su pantalla. En realidad, arroja cualquiera el utmp o el wtmp archivo, dependiendo de lo que especifique. Por supuesto, el archivo que especifique no tiene que estar ubicado en /var/log o incluso llamado utmp o wtmp , y ni siquiera tiene que estar en el formato correcto. Si alimentas utmpdump un archivo de texto, vuelca el contenido a su pantalla (o un archivo, con el --output opcional) en un formato predecible y fácil de analizar.

Normalmente, por supuesto, solo usaría who o w para analizar los registros de inicio de sesión, pero utmpdump es útil en muchos casos.

  • Los archivos pueden corromperse. Mientras que who y w a menudo son capaces de detectar la corrupción por sí mismos, utmpdump es cada vez más tolerante porque no analiza por sí solo. Muestra los datos sin procesar para que usted los trate.
  • Una vez que haya reparado un archivo dañado, utmpdump puede parchear sus cambios nuevamente.
  • A veces, solo desea analizar los datos usted mismo. Tal vez estés buscando algo que who y w no están programados para buscar, o tal vez está tratando de hacer sus propias correlaciones.

Sea cual sea el motivo, utmpdump es una herramienta útil para extraer datos sin procesar de los registros de inicio de sesión.

Si reparó un registro de inicio de sesión dañado, puede usar utmpdump para volver a escribir los cambios en el registro maestro:

$ sudo utmpdump -r < wtmp.fix > /var/log/wtmp

ps

Una vez que sepa quién ha iniciado sesión en su sistema, puede usar ps para obtener una instantánea de los procesos actuales. Esto no debe confundirse con la parte superior, que muestra un informe en ejecución sobre los procesos actuales; esta es una instantánea tomada en el momento ps se emite y luego se imprime en su pantalla. Ambos tienen ventajas y desventajas, por lo que puede elegir cuál usar según sus requisitos. Debido a su naturaleza estática, ps es particularmente útil para análisis posteriores, o simplemente como un buen resumen manejable.

El ps El comando es antiguo y conocido, y parece que muchos administradores han aprendido el antiguo comando de UNIX en lugar de la última implementación. El moderno ps (del procps-ng package) ofrece muchos mnemotécnicos útiles, y es lo que se incluye en RHEL, CentOS, Fedora y muchas otras distribuciones, por lo que es lo que usa este artículo.

Puede hacer que todos los procesos sean ejecutados por un solo usuario con --user (o -u ), junto con el nombre de usuario de quien desea un informe. Para dar a la salida el contexto agregado de qué proceso es el padre de un proceso hijo, use el --forest opción para una vista de "árbol":

$ ps --forst --user larry
  PID TTY        TIME     CMD
  39707 ?        00:00:00 sshd
  39713 pts/4    00:00:00  \_ bash
  39684 ?        00:00:00 systemd
  39691 ?        00:00:00  \_ (sd-pam)

Para cada proceso en el sistema:

$ ps --forest -e
[...]
  29284 ?        00:00:48  \_ gnome-terminal-
  29423 pts/0    00:00:00  |   \_ bash
  42767 pts/0    00:00:00  |   |   \_ ps
  39631 pts/1    00:00:00  |   \_ bash
  39671 pts/1    00:00:00  |       \_ ssh
  32604 ?        00:00:00  \_ bwrap
  32612 ?        00:00:00  |   \_ bwrap
  32613 ?        00:09:05  |       \_ dring
  32609 ?        00:00:00  \_ bwrap
  32610 ?        00:00:15      \_ xdg-dbus-proxy
   1870 ?        00:00:05 gnome-keyring-d
   4809 ?        00:00:00  \_ ssh-agent
[...]

Las columnas predeterminadas son útiles, pero puede cambiarlas para que se adapten mejor a lo que está investigando. El -o La opción le da control total sobre las columnas que ve. Para obtener una lista completa de las posibles columnas, consulte los Especificadores de formato estándar. sección del ps(1) página man.

$ ps -eo pid,user,pcpu,args --sort user
   42799 root      0.0 [kworker/u16:7-flush-253:1]
  42829 root      0.0 [kworker/0:2-events]
  42985 root      0.0 [kworker/3:0-events_freezable_power_]
   1181 rtkit     0.0 /usr/libexec/rtkit-daemon
   1849 seth      0.0 /usr/lib/systemd/systemd --user
   1857 seth      0.0 (sd-pam)
   1870 seth      0.0 /usr/bin/gnome-keyring-daemon --daemonize --login
   1879 seth      0.0 /usr/libexec/gdm-wayland-session /usr/bin/gnome-session

El ps El mando es muy flexible. Puede modificar su salida de forma nativa para no tener que depender de grep y awk para encontrar lo que te importa. Crea un buen ps comando, póngale un alias a algo memorable y ejecútelo con frecuencia. Es una de las mejores formas de mantenerse informado sobre lo que sucede en su servidor.

pgrep

A veces, es posible que tenga alguna idea de un proceso problemático y necesite investigarlo en lugar de sus usuarios o sistema. Para hacer eso, existe el pgrep comando desde el psproc-ng paquete.

En su forma más básica, pgrep funciona como un grep en la salida de ps :

$ pgrep bash
29423
39631
39713

En lugar de enumerar los PID, puede obtener un recuento de cuántos PID se devolverían:

$ pgrep --count bash
3

Para más información, puede afectar su búsqueda a través de procesos por nombre de usuario (-u ), terminal (--terminal ), y edad (--newest y --oldest ), y más. Para encontrar un proceso perteneciente a un usuario específico, por ejemplo:

$ pgrep bash -u moe --list-name
39631 bash

Incluso puede obtener coincidencias inversas con --inverse opción.

matar

Relacionado con pgrep es el pkill dominio. Es muy parecido a kill comando, excepto que usa las mismas opciones que pgrep para que pueda enviar señales a un proceso problemático utilizando la información que le resulte más fácil.

Por ejemplo, si ha descubierto que un proceso iniciado por el usuario larry está monopolizando los recursos, y lo sabes por w ese larry se encuentra en la terminal pts/2 , luego puede eliminar la sesión de inicio de sesión y todos sus elementos secundarios con solo el nombre del terminal:

$ sudo pkill -9 --terminal pts/2

O puede usar solo el nombre de usuario para finalizar todos los procesos que coincidan con él:

$ sudo pkill -u larry

Usado juiciosamente, pkill es un buen botón de "pánico" o una solución estilo mazo cuando un problema se ha ido de las manos.

Supervisión de terminales

El hecho de que exista una serie de comandos en una terminal no significa que sean necesariamente mejores que otras soluciones. Haga un balance de sus requisitos y elija la mejor herramienta para lo que necesita. A veces, un sistema gráfico de monitoreo y generación de informes es exactamente lo que necesita, y otras veces, los comandos de terminal que se escriben y analizan fácilmente son la respuesta correcta. Elija sabiamente, aprenda sus herramientas y nunca estará a oscuras sobre lo que está sucediendo dentro de su bare metal.

[¿Quiere obtener más información sobre supervisión y seguridad? Consulte la lista de verificación de cumplimiento y seguridad de TI. ]


Linux
  1. 4 formas de deshabilitar la cuenta raíz en Linux

  2. Permisos de Linux:una introducción a chmod

  3. Una introducción al archivo Linux /etc/fstab

  4. Linux su comando

  5. No puedo desbloquear la cuenta de usuario de Linux

Comando de identificación en Linux

Métodos para deshabilitar la cuenta raíz en Linux

Una introducción a los módulos de autenticación conectables (PAM) en Linux

Una introducción al hashing y las sumas de verificación en Linux

Ejemplos de comandos chown de Linux

¿Qué es el archivo /etc/passwd en Linux?