GNU/Linux >> Znalost Linux >  >> Linux

Úvod do monitorování uživatelských účtů v Linuxu

Před dlouhou dobou v historii UNIXu byli uživatelé na serveru skutečnými uživateli UNIX se záznamy v /etc/shadow a interaktivní přihlašovací shell a domovský adresář. Existovaly nástroje pro administrátory, jak komunikovat s uživateli a sledovat jejich aktivitu, aby se předešlo hloupým nebo zlomyslným chybám, které by způsobily nespravedlivé přidělování zdrojů serveru.

V dnešní době je méně pravděpodobné, že vaše uživatelská základna bude mít záznamy v /etc/shadow , místo toho je spravováno vrstvou abstrakce, ať už je to LDAP nebo Drupal nebo OpenShift. Na druhou stranu je nyní mnohem více serverů, což znamená, že se mnohem více systémových administrátorů přihlašuje a odhlašuje za účelem údržby. Kde je aktivita, tam je příležitost k chybám a zmatkům, takže je čas oprášit staré monitorovací nástroje a dobře je využít.

Zde jsou některé z monitorovacích příkazů, na které jste možná zapomněli (nebo jste o nich nikdy nevěděli), které vám pomohou sledovat, co se děje na vašem serveru.

kdo

Nejprve základy.

who příkaz je poskytován balíčkem GNU coreutils a jeho primárním úkolem je analyzovat /var/log/utmp založit a ohlásit svá zjištění.

utmp soubor zaznamenává aktuální uživatele v systému. Nemusí nutně zobrazovat každý proces, protože ne všechny programy spouštějí utmp protokolování. Ve skutečnosti váš systém nemusí mít ani utmp soubor ve výchozím nastavení. V takovém případě who padne zpět na /var/log/wtmp , který zaznamenává všechna přihlášení a odhlášení.

wtmp formát souboru je přesně stejný jako utmp , kromě toho, že prázdné uživatelské jméno označuje odhlášení a ~ znak označuje vypnutí nebo restart systému. wtmp soubor je spravován login(1) , init(1) a některé verze getty(8) žádná z těchto aplikací však nevytvoří soubor, takže pokud odstraníte wtmp , pak je uchovávání záznamů deaktivováno. Už jen to je dobré vědět:if wtmp chybí, měli byste zjistit proč!

Výstup who --heading vypadá asi takto:

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)

Zobrazí se vám uživatelské jméno každé přihlášené osoby, čas zaznamenání jejich přihlášení a jejich IP adresa.

who příkaz také pokorně poskytuje oficiální způsob POSIX, jak zjistit, který uživatel vy jsou přihlášeni jako, ale pouze pokud utmp existuje:

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

Poskytuje také mechanismus pro zobrazení aktuální úrovně běhu:

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

w

Pro trochu více kontextu o uživatelích, jednoduché w poskytuje seznam přihlášených a co dělá. Tyto informace jsou zobrazeny ve formátu podobném výstupu who , ale doba, po kterou byl uživatel nečinný, čas procesoru používaný všemi procesy připojenými k přihlašovacímu TTY a čas procesoru používaný pouze aktuálním procesem. Aktuální proces uživatele je uveden v posledním poli.

Ukázkový výstup:

$ 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

Případně můžete zobrazit IP adresu uživatele pomocí -i nebo --ip-addr možnost.

Výstup můžete zúžit na jediné uživatelské jméno zadáním, o kterém uživateli chcete informace:

$ 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

utmpdump nástroj dělá (téměř) přesně to, co jeho název napovídá:vypisuje obsah souboru /var/log/utmp soubor na vaši obrazovku. Ve skutečnosti se vypíše buď utmp nebo wtmp soubor, podle toho, který zadáte. Soubor, který určíte, se samozřejmě nemusí nacházet v /var/log nebo dokonce s názvem utmp nebo wtmp a ani to nemusí být ve správném formátu. Pokud používáte zdroj utmpdump textový soubor, vypíše obsah na vaši obrazovku (nebo soubor s --output option) ve formátu, který je předvídatelný a snadno analyzovatelný.

Normálně byste samozřejmě použili pouze who nebo w analyzovat přihlašovací záznamy, ale utmpdump je užitečné v mnoha případech.

  • Soubory mohou být poškozeny. Zatímco who a w jsou často schopni odhalit korupci sami, utmpdump je stále tolerantnější, protože sám o sobě neprovádí žádnou analýzu. Vykreslí nezpracovaná data, se kterými se můžete vypořádat.
  • Jakmile opravíte poškozený soubor, utmpdump může opravit vaše změny zpět.
  • Někdy prostě chcete data analyzovat sami. Možná hledáte něco, co who a w nejsou naprogramováni tak, aby hledali, nebo se možná snažíte vytvořit korelace podle sebe.

Ať je důvod jakýkoli, utmpdump je užitečný nástroj pro extrakci nezpracovaných dat z přihlašovacích záznamů.

Pokud jste opravili poškozený log přihlášení, můžete použít utmpdump zapsat změny zpět do hlavního protokolu:

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

ps

Jakmile budete vědět, kdo je přihlášen do vašeho systému, můžete použít ps získat přehled o aktuálních procesech. Toto nelze zaměňovat s horní částí, která zobrazuje běžící zprávu o aktuálních procesech; toto je snímek pořízený v okamžiku ps je vydán a poté vytištěn na vaši obrazovku. Oba mají své výhody a nevýhody, takže si můžete vybrat, který použijete na základě svých požadavků. Kvůli své statické povaze ps je zvláště užitečné pro pozdější analýzu nebo jen jako pěkné přehledné shrnutí.

ps příkaz je starý a dobře známý a zdá se, že mnoho správců se naučilo starý příkaz UNIX spíše než nejnovější implementaci. Moderní ps (z procps-ng balíček) nabízí mnoho užitečných mnemotechnických pomůcek a právě to se dodává na RHEL, CentOS, Fedora a mnoha dalších distribucích, takže to je to, co tento článek používá.

Všechny procesy můžete spustit jedním uživatelem pomocí --user (nebo -u ) spolu s uživatelským jménem, ​​o kterém chcete zprávu. Chcete-li dát výstupu přidaný kontext, jehož proces je rodičem podřízeného procesu, použijte --forest možnost „stromového“ zobrazení:

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

Pro každý proces v systému:

$ 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
[...]

Výchozí sloupce jsou užitečné, ale můžete je změnit, aby lépe vyhovovaly tomu, co zkoumáte. -o Tato možnost vám dává plnou kontrolu nad tím, které sloupce vidíte. Úplný seznam možných sloupců naleznete v části Standardní specifikace formátu části ps(1) manuálová stránka.

$ 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

ps příkaz je velmi flexibilní. Jeho výstup můžete nativně upravit, takže se nemusíte spoléhat na grep a awk abyste našli to, co vás zajímá. Vytvořte dobrý ps příkaz, alias to něco zapamatovatelného, ​​a spustit to často. Je to jeden z nejlepších způsobů, jak zůstat informováni o tom, co se děje na vašem serveru.

pgrep

Někdy můžete mít nějakou představu o problematickém procesu a potřebujete jej prozkoumat namísto vašich uživatelů nebo systému. Chcete-li to provést, existuje pgrep příkaz z psproc-ng balíček.

Ve své nejzákladnější podobě pgrep funguje jako grep na výstupu ps :

$ pgrep bash
29423
39631
39713

Místo vypisování PID můžete získat pouze počet PID, které by se vrátilo:

$ pgrep --count bash
3

Chcete-li získat další informace, můžete vyhledávání v procesech ovlivnit podle uživatelského jména (-u ), terminál (--terminal ) a věk (--newest a --oldest ), a více. Chcete-li najít proces patřící konkrétnímu uživateli, například:

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

Můžete dokonce získat inverzní shody s --inverse možnost.

pkill

Souvisí s pgrep je pkill příkaz. Je to hodně jako kill příkaz, kromě toho, že používá stejné možnosti jako pgrep takže můžete posílat signály do problematického procesu pomocí jakýchkoli informací, které jsou pro vás nejjednodušší.

Pokud jste například zjistili, že proces spustil uživatel larry monopolizuje zdroje a znáte to z w ten larry je umístěn na terminálu pts/2 , pak můžete ukončit přihlašovací relaci a všechny její potomky pouze pomocí názvu terminálu:

$ sudo pkill -9 --terminal pts/2

Nebo můžete použít pouze uživatelské jméno k ukončení všech procesů, které mu vyhovují:

$ sudo pkill -u larry

Používá se uvážlivě, pkill je dobré „panikové“ tlačítko nebo řešení ve stylu perlíku, když se problém vymkne kontrole.

Monitorování terminálu

To, že v terminálu existuje řada příkazů, neznamená, že jsou nutně lepší než jiná řešení. Udělejte si inventuru svých požadavků a vyberte si ten nejlepší nástroj pro to, co potřebujete. Někdy je grafický monitorovací a reportovací systém přesně to, co potřebujete, a jindy jsou správnou odpovědí terminálové příkazy, které lze snadno skriptovat a analyzovat. Vybírejte moudře, naučte se své nástroje a nikdy nebudete mít jasno v tom, co se děje ve vašem holém kovu.

[Chcete se dozvědět více o monitorování a zabezpečení? Podívejte se na kontrolní seznam zabezpečení IT a dodržování předpisů. ]


Linux
  1. Co je uživatel Linuxu?

  2. 4 způsoby, jak zakázat účet root v Linuxu

  3. Linux – nejasné důvody, proč je soubor pouze pro čtení?

  1. Oprávnění pro Linux:Úvod do chmod

  2. Linux su příkaz

  3. Nelze odemknout linuxový uživatelský účet

  1. Úvod do souboru Linux /etc/fstab

  2. Linux File Access Monitoring?

  3. Linux – všechno je soubor?