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.
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 [email protected] 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 [email protected] 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
yw
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
yw
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.
Deja una respuesta
Artículos de interés