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 llevarían a 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. Una vez más, 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 tareas de mantenimiento. Donde hay actividad, hay oportunidad para el error y la confusión, por lo 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 realizar un seguimiento de lo que sucede en su servidor.

Índice

    Quién

    Primero, lo básico.

    el who es proporcionado por el paquete GNU coreutils, y su tarea principal es analizar el /var/log/utmp tabla e informe sobre sus hallazgos.

    el utmp El archivo guarda los usuarios actuales en el sistema. No necesariamente muestra todos los procesos, porque no todos los programas se inician utmp registro. De hecho, es posible que su sistema ni siquiera tenga utmp archivo predeterminado. En este caso, who vuelve a caer /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 que ~ 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 el archivo, por lo que si elimina wtmp, entonces la grabación está deshabilitada. Sólo esto es bueno saberlo: si wtmp falta, usted debe saber por qué!

    la salida de who --heading Se ve como 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 inició sesión y su dirección IP.

    el who orden también humildemente proporciona el oficial POSIX forma de averiguar con qué usuario ha iniciado sesión, 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 personas que iniciaron sesión y lo que están haciendo. Esta información se muestra en un formato similar a la salida de who, pero el tiempo de inactividad del usuario, 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 último campo.

    Salida de ejemplo:

    $ 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 el -i Donde --ip-addr opción.

    Puede limitar la salida a un solo nombre de usuario especificando de qué usuario desea obtener 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

    volcado utmp

    el utmpdump La utilidad hace (casi) exactamente lo que sugiere su nombre: vuelca el contenido del /var/log/utmp archivo en su pantalla. De hecho, vacía el utmp o la wtmp archivo, según el que especifique. Por supuesto, el archivo que especifique no necesita estar ubicado en /var/log o incluso nombrado utmp Donde wtmp, y ni siquiera tiene que estar en el formato correcto. si te alimentas utmpdump un archivo de texto, vuelca el contenido en su pantalla (o un archivo, con el --output opción) en un formato predecible y fácil de analizar.

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

    • Los archivos pueden estar dañados. 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 se analiza a sí mismo. Devuelve los datos sin procesar que necesita procesar.
    • Una vez que haya reparado un archivo dañado, utmpdump puede parchear sus cambios.
    • A veces solo desea analizar los datos usted mismo. Tal vez estés buscando algo who y w no estás programado para investigar, o tal vez estás tratando de hacer tus propias correlaciones.

    No importa la razón, utmpdump es una herramienta útil para extraer datos sin procesar de los registros de inicio de sesión.

    Si reparó un registro de conexión corrupto, puede usar utmpdump para volver a escribir los cambios en el registro principal:

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

    PD

    Una vez que sepa quién ha iniciado sesión en su sistema, puede utilizar ps para obtener una instantánea de los procesos en ejecución. Esto no debe confundirse con la parte superior, que muestra un informe en ejecución de los procesos en ejecución; esta es una instantánea tomada en este 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 necesidades. 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 bien conocido, y parece que muchos administradores han aprendido el antiguo comando de UNIX en lugar de la última implementación. El moderno ps (desde procps-ng package) ofrece muchos mnemotécnicos útiles, y eso es lo que se incluye en RHEL, CentOS, Fedora y muchas otras distribuciones, así que eso es lo que usa este artículo.

    Puede hacer que todos los procesos sean ejecutados por un solo usuario con el --user (Donde -u), junto con el nombre de usuario de la persona sobre la que desea informar. Para dar a la salida el contexto adicional 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 modificarlas para adaptarlas mejor a sus búsquedas. el -o La opción le da control total sobre las columnas que ve. Para obtener una lista completa de las posibles columnas, consulte Especificadores de formato estándar parte de pd(1) página de manuales.

    $ 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 ordenar es muy flexible. Puede modificar su salida de forma nativa para que no tenga que depender de grep y awk para encontrar lo que te importa. fabricar un bien ps comando, asócielo con algo memorable y ejecútelo con frecuencia. Esta es una de las mejores maneras de mantenerse informado sobre lo que sucede en su servidor.

    pgrep

    A veces puede tener una idea de un proceso problemático y necesita investigarlo en lugar de sus usuarios o su sistema. Para ello, existe la pgrep orden de la 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, simplemente puede obtener la cantidad de PID devueltos:

    $ pgrep --count bash
    3

    Para obtener más información, puede asignar 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 propiedad de un usuario específico, por ejemplo:

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

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

    matar

    Relativo a pgrep es el pkill pedido. es un poco como el kill comando, excepto que utiliza las mismas opciones que pgrep para que pueda enviar señales a un proceso problemático utilizando la información que más le convenga.

    Por ejemplo, si descubrió que un proceso iniciado por el usuario larry acapara los recursos, y ya sabes desde w este larry se encuentra en la terminal pts/2, luego puede detener 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 sabiamente, pkill es un buen botón de "pánico" o una solución estilo martillo cuando un problema se sale de control.

    Monitoreo de puntos finales

    El hecho de que exista una serie de comandos en una terminal no significa necesariamente que sean mejores que otras soluciones. Haz un balance de tus necesidades y elige la mejor herramienta para lo que necesitas. A veces, un sistema gráfico de monitoreo y generación de informes es justo lo que necesita, y otras veces, los comandos de terminal fácilmente procesados ​​y analizados son la respuesta correcta. Elija sabiamente, aprenda sus herramientas y nunca estará a oscuras sobre lo que está sucediendo en su metal desnudo.

    Artículos de interés

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Si continuas utilizando este sitio aceptas el uso de cookies. Más información