neděle 26. ledna 2014

Monitoring uživatelů v Conky

Conky by měl dát komplexní přehled o dění v celém systému, který napoví, kde by mohl být nějaký problém. Když už jsem byl k tomuto tématu zase přistrčen, zamyslel jsem se i nad monitorováním aktivity uživatelů. Zvláště pokud systém máte na veřejné IP s dostupným ssh serverem, může být zajímavý přehled přístupů zvenčí. Nakonec si v Conky nechávám zobrazit počty založených sezení, unikátních přihlášených užiatelů, externích loginů a aktivních terminálů a pseudoterminálů. ...

Takže jak jsem na to shell...

Počet sezení (sessions):
Ubuntu < 13.10 :

ck-list-sessions|grep ^S|wc -l

Ubuntu 13.10 +:

loginctl list-sessions|wc -l

Z ck-list-sessions, i loginctl se můžete dozvědět plno dalších informací, načapáte přes ně i uživatele, který si pomocí sudo su změnil identitu, protože tímto příkazem založí další session. Nopak, pokud si admin povýšil práva příkazem sudo -i, či sudo -s, se nikde nedozvíte.

Počet unikátních přihlášených uživatelů:

users|tr " " "\n"|sort|uniq|wc -l

Počet otevřených terminálů a pseudoterminálů:

who|awk '{u++};$2~/^tty[0-9]+$/{t++};END{print "tty: "t" pts: "u-t}'

Počet externích loginů (ze sítě):

who --ips|grep '\..*\..*\..*$'|wc -l

Zde jednoduše předpokládám, že pokud řádek obsahuje řetězec, odpovídající IP adrese, jedná se o externí přihlášení.

Všechny příkazy z conkyrc spouštím přes ${execi X příkaz} a každému příkazu dávám jako X jinou hodnotu, např. 5-8 sekund, aby se to tak nějak rozložilo. Tedy ne, že by to byla nějaká zátěž..

Pokud máte nějaké doplňující informace a připomínky, sem s nimi!

7 komentářů:

  1. Ahoj, když už se s tím patláš, dal bych tam přesnější filtraci u toho awku, např.
    awk '{u++};$2 ~ /^tty[0-9]+$/{t++};END{print "tty: "t" pts: "u-t}'
    ať to nebere i uživatele obsahující řetězec "tty" apod, co říkáš ;)
    arrange

    OdpovědětVymazat
    Odpovědi
    1. Hola! Máš samozřejmě pravdu, opraveno.

      Vymazat
  2. Je možné zobrazit za počet session i hodnotu realname, kterou příkaz ck-list-sessions vypíše? Hledal jsem nějaký podrobnější help k příkazu, ale bez úspěchu.

    OdpovědětVymazat
    Odpovědi
    1. Kdybych chtěl z toho výpisu pouze vypsat všechny realname pod sebou, vypadalo by to takto:
      ck-list-sessions|sed -n "/realname/s/.*'\(.*\)'.*/\1/p"
      Ale ten seznam dostaneš i z příkazu users, který jsem výše také použil, jen jsem uživatele nakonec spočítal, místo abych vypisoval jména.

      Vymazat
    2. Mě právě příkaz user nefunguje z nějakého důvodu správně. V podstatě mi ukazuje to samé jako příkaz pro terminály (pokud otevřu Geany/Terminator je přihlášen 1 uživatel, pokud jej zavřu počet uživatelů je 0) ...

      Vymazat
    3. Zajímavé. Jaký systém, prostředí?

      Vymazat
    4. Crunchbang (Debian) s Openboxem

      Vymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.