GNU/Linux >> Linux Esercitazione >  >> Linux

Un'introduzione al monitoraggio dell'account utente Linux

Molto tempo fa nella storia di UNIX, gli utenti su un server erano utenti UNIX effettivi con voci in /etc/shadow e una shell di accesso interattiva e una home directory. C'erano strumenti per gli amministratori per comunicare con gli utenti e per monitorare la loro attività per evitare errori stupidi o dannosi che avrebbero causato l'allocazione ingiusta delle risorse del server.

Al giorno d'oggi, è meno probabile che la tua base di utenti abbia voci in /etc/shadow , invece di essere gestito da un livello di astrazione, che si tratti di LDAP o Drupal o OpenShift. Inoltre, ora ci sono molti più server, il che significa che ci sono molti più amministratori di sistema che accedono e si disconnettono per eseguire la manutenzione. Dove c'è attività, c'è possibilità di errori e confusione, quindi è tempo di rispolverare quei vecchi strumenti di monitoraggio e metterli a frutto.

Ecco alcuni dei comandi di monitoraggio di cui potresti esserti dimenticato (o di cui non sapevi) per aiutarti a tenere traccia di ciò che sta accadendo sul tuo server.

chi

Innanzitutto, le basi.

Il who il comando è fornito dal pacchetto GNU coreutils e il suo compito principale è analizzare il /var/log/utmp archiviare e segnalare i suoi risultati.

Il utmp file registra gli utenti correnti sul sistema. Non mostra necessariamente tutti i processi, perché non tutti i programmi avviano utmp registrazione. In effetti, il tuo sistema potrebbe non avere nemmeno un utmp file per impostazione predefinita. In tal caso, who ricade su /var/log/wtmp , che registra tutti gli accessi e i logout.

Il wtmp il formato del file è esattamente lo stesso di utmp , tranne per il fatto che un nome utente nullo indica una disconnessione e il ~ il carattere indica un arresto o un riavvio del sistema. Il wtmp il file è gestito da login(1) , init(1) e alcune versioni di getty(8) , tuttavia, nessuna di queste applicazioni crea il file, quindi se rimuovi wtmp , la registrazione viene disattivata. Solo questo è buono a sapersi:se wtmp manca, dovresti scoprire perché!

L'output di who --heading assomiglia a questo:

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)

Questo ti mostra il nome utente di ogni persona che ha effettuato l'accesso, l'ora in cui è stato registrato il suo accesso e il suo indirizzo IP.

Il who command fornisce anche umilmente il modo ufficiale POSIX per scoprire quale utente tu sono loggati come, ma solo se utmp esiste:

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

Fornisce inoltre un meccanismo per visualizzare il runlevel corrente:

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

w

Per un po' più di contesto sugli utenti, il semplice w comando fornisce un elenco di chi ha effettuato l'accesso e cosa stanno facendo. Queste informazioni vengono visualizzate in un formato simile all'output di who , ma il tempo in cui l'utente è rimasto inattivo, il tempo CPU utilizzato da tutti i processi collegati al TTY di accesso e il tempo CPU utilizzato solo dal processo corrente. Il processo corrente dell'utente è elencato nel campo finale.

Esempio di output:

$ 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

In alternativa, puoi visualizzare l'indirizzo IP dell'utente con -i o --ip-addr opzione.

Puoi restringere l'output a un singolo nome utente specificando su quale utente desideri informazioni su:

$ 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

Il utmpdump utility fa (quasi) esattamente quello che suggerisce il nome:scarica il contenuto del /var/log/utmp file sul tuo schermo. In realtà, scarica o il utmp o il wtmp file, a seconda di quello specificato. Ovviamente, il file che specifichi non deve trovarsi in /var/log o anche chiamato utmp o wtmp , e non deve nemmeno essere nel formato giusto. Se inserisci utmpdump un file di testo, scarica il contenuto sullo schermo (o un file, con il --output opzione) in un formato prevedibile e facile da analizzare.

Normalmente, ovviamente, useresti semplicemente who o w per analizzare i record di accesso, ma utmpdump è utile in molti casi.

  • I file possono essere danneggiati. Mentre who e w sono spesso in grado di rilevare la corruzione da soli, utmpdump è sempre più tollerante perché non esegue analisi da solo. Rende i dati grezzi da gestire.
  • Dopo aver riparato un file danneggiato, utmpdump può ripristinare le modifiche apportate.
  • A volte vuoi solo analizzare i dati da solo. Forse stai cercando qualcosa che who e w non sono programmati per cercare, o forse stai cercando di creare correlazioni tutte tue.

Qualunque sia il motivo, utmpdump è uno strumento utile per estrarre dati grezzi dai record di accesso.

Se hai riparato un log di accesso danneggiato, puoi usare utmpdump per riscrivere le modifiche nel registro principale:

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

ps

Una volta che sai chi ha effettuato l'accesso al tuo sistema, puoi utilizzare ps per ottenere un'istantanea dei processi in corso. Questo non deve essere confuso con la parte superiore, che mostra un rapporto in esecuzione sui processi correnti; questa è un'istantanea scattata nel momento ps viene emesso e quindi stampato sullo schermo. Ci sono vantaggi e svantaggi per entrambi, quindi puoi scegliere quale utilizzare in base alle tue esigenze. A causa della sua natura statica, ps è particolarmente utile per analisi successive, o semplicemente come un bel riassunto gestibile.

Il ps il comando è vecchio e noto e sembra che molti amministratori abbiano imparato il vecchio comando UNIX piuttosto che l'ultima implementazione. Il moderno ps (dal procps-ng pacchetto) offre molti utili mnemonici ed è ciò che viene fornito su RHEL, CentOS, Fedora e molte altre distribuzioni, quindi è ciò che utilizza questo articolo.

Puoi far eseguire tutti i processi da un singolo utente con il --user (o -u ), insieme al nome utente di chi vuoi creare un rapporto. Per fornire all'output il contesto aggiunto di quale processo è padre di un processo figlio, usa il --forest opzione per una vista ad "albero":

$ 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)

Per ogni processo sul 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
[...]

Le colonne predefinite sono utili, ma puoi modificarle per adattarle meglio a ciò che stai cercando. Il -o opzione ti dà il pieno controllo su quali colonne vedi. Per un elenco completo delle possibili colonne, fare riferimento agli Specificatori di formato standard sezione di ps(1) pagina 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

Il ps il comando è molto flessibile. Puoi modificarne l'output in modo nativo in modo da non dover fare affidamento su grep e awk per trovare ciò che ti interessa. Crea un buon ps comando, alias a qualcosa di memorabile ed eseguilo spesso. È uno dei modi migliori per rimanere informato su ciò che sta accadendo sul tuo server.

pgrep

A volte, potresti avere un'idea di un processo problematico e dover indagare su di esso anziché sui tuoi utenti o sul tuo sistema. Per farlo, c'è il pgrep comando da psproc-ng pacchetto.

Nella sua forma più elementare, pgrep funziona come un grep sull'output di ps :

$ pgrep bash
29423
39631
39713

Invece di elencare i PID, puoi semplicemente ottenere un conteggio di quanti PID verrebbero restituiti:

$ pgrep --count bash
3

Per ulteriori informazioni, puoi influenzare la tua ricerca attraverso processi per nome utente (-u ), terminale (--terminal ) ed età (--newest e --oldest ), e altro ancora. Per trovare un processo appartenente a un utente specifico, ad esempio:

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

Puoi persino ottenere corrispondenze inverse con --inverse opzione.

pkill

Relativo a pgrep è il pkill comando. È molto simile a kill comando, tranne per il fatto che utilizza le stesse opzioni di pgrep così puoi inviare segnali a un processo problematico utilizzando tutte le informazioni per te più facili.

Ad esempio, se hai scoperto che un processo avviato dall'utente larry sta monopolizzando le risorse e lo sai da w quel larry si trova sul terminale pts/2 , quindi puoi terminare la sessione di accesso e tutti i suoi figli solo con il nome del terminale:

$ sudo pkill -9 --terminal pts/2

Oppure puoi utilizzare solo il nome utente per terminare tutti i processi corrispondenti:

$ sudo pkill -u larry

Usato con giudizio, pkill è una buona soluzione con un pulsante "panico" o una mazza quando un problema è sfuggito di mano.

Monitoraggio terminale

Solo perché in un terminale esiste una serie di comandi non significa che siano necessariamente migliori di altre soluzioni. Fai il punto sulle tue esigenze e scegli lo strumento migliore per quello che ti serve. A volte un sistema grafico di monitoraggio e reporting è esattamente ciò di cui hai bisogno, e altre volte i comandi del terminale facilmente script e analizzati sono la risposta giusta. Scegli saggiamente, impara i tuoi strumenti e non sarai mai all'oscuro di ciò che sta accadendo nel tuo bare metal.

[Vuoi saperne di più su monitoraggio e sicurezza? Consulta la checklist di sicurezza e conformità IT. ]


Linux
  1. Che cos'è un utente Linux?

  2. 4 modi per disabilitare l'account di root in Linux

  3. Permessi Linux:un'introduzione a chmod

  4. Un'introduzione al file Linux /etc/fstab

  5. Comando su Linux

Comando ID in Linux

Metodi per disabilitare l'account root in Linux

Un'introduzione ai Pluggable Authentication Modules (PAM) in Linux

Un'introduzione all'hashing e ai checksum in Linux

Esempi di comandi chown di Linux

Che cos'è il file /etc/passwd in Linux?