STAP-SERVER(8) System Manager's Manual STAP-SERVER(8)

stap-server - kompilační server systemtapu

[ service ] stap-server { start | stop | restart | condrestart | try-restart | force-reload | status } [ options ]

Kompilační server systemtapu (stap-server) je síťová služba. Přijímá zabezpečené SSL spojení od klienta a vykonává požadavky na spuštění příkazu stap . Každý stap-server inzeruje svoji přítomnost a konfiguraci na lokální síti prostřednictvím mDNS (avahi), a tím umožňuje klientům automatickou detekci serverů.

stap-server nabízí:

  • síťovou službu umožňující přístup ke kompilačním serverům systemtapu
  • pohodlné ovládání nakonfigurovaných, nebo "ad-hoc" kompilačních serverů systemtapu

Musí být určena alespoň jedna z následujících voleb:

Spustit servery. Určené servery budou nastartovány. Pokud není určen žádný server, spustí se nakonfigurované servery. Pokud není žádný server nakonfigurován, spustí se server pro verzi jádra architekturu odpovídající hostitelskému stroji.

Pokud je určený server již spuštěn, bude pro něj požadavek na spuštění ignorován. Pokud selže start daného serveru, operace skončí chybou.

Zastavit server(y). Určené servery se zastaví. Pokud žádný server není určen, zastaví se všechny běžící servery. Pokud určený server neběží, skončí pro něj "stop" akce úspěchem. Pokud pokus o zastavení serveru selže, stap-server selže též.
Zastavit a znovu nastartovat služby. Specifikované servery se zastaví a znovu nastartují. Pokud není žádný server určen, dojde k pokusu o restart všech serverů. Pokud žádné neběží, bude se 'restart' rovnat pokusu o start.
Zastavit a znovu nastartovat služby. Specifikované servery se zastaví a znovu nastartují. Pokud určený server neběží, nebude nastartován. Pokud není žádný server určen, dojde k pokusu o restart všech běžících serverů. Pokud žádný server neběží, nestane se nic.
Tato akce je shodná s condrestart.
Zastavit všechny běžící servery, znovu načíst konfigurační soubory, a restartovat služby jako by byl dán příkaz start .
Vypsat informaci o stavu serverů. Vypíše informaci o specifikovaných serverech. Pokud nebyl žádný server specifikován, vypíše se informace o stavu všech běžících serverů.

Pro upřesnění argumentů je možno použít následující volby:

Určuje globální konfigurační soubor jako dodatek k výchozímu globálnímu konfiguračnímu souboru popsanému níže. Zadaný soubor bude zpracován po výchozím globálním konfiguračním souboru. Pokud se volba -c použije více než jednou, bude brán zřetel jen na poslední použití.
Tato volba určuje cílovou architekturu serveru a je analogická volbě -a programu stap. Viz manuálová stránka stap(1) , která obsahuje podrobnosti.

Výchozí architektura je architektura hostitelského systému.

Určuje verzi cílového jádra a je analogická volbě -r programu stap. Viz manuálová stránka stap(1) , která obsahuje podrobnosti. Výchozí verze je verze hostitelského systému.
Tato volba určuje dodatečné umístění, ve kterém budou servery hledat tapset skripty. Je analogická volbě -I příkazu stap. Viz manuálová stránka stap(1) , která obsahuje podrobnosti.
Tato volba určuje umístění zdrojových kódů pro překlad jaderného modulu systemtapu pro použití systemtap serverů a je analogická volbě -R programu stap. Viz manuálová stránka stap(1) , která obsahuje podrobnosti.
Tato volba určuje volby, které se předají příkazu make při sestavování systemtap modulu a je analogická volbě -B programu stap. Viz manuálová stránka stap(1) , která obsahuje podrobnosti.
Tato volba určuje systemtap server, který obsluhuje všechny verze jádra, které jsou nainstalovány v /lib/modules/.
Umožňuje určit server pomocí přezdívky. Pokud se nastaví -n, bude použit běžící server s danou přezdívkou. Pokud se takový server nenajde, budou na danou přezdívku prohledány konfigurační soubory pro výchozí servery, nebo bude prohledána cesta určená v globálním konfiguračním souboru, nebo v konfiguračním souboru určeném přepínačem -c. Pokud se požadovaný server najde, použijí se pro něj přepínače -a, -r, -I, -R, -B a -u. Pokud se žádný server pro danou přezdívku nenajde a akce je start (nebo akce která se tak chová) (viz ARGUMENTY), server s danou přezdívkou se nastartuje.
Tato volba umožňuje určit server prostřednictvím ID procesu. Pokud se nastaví -p, bude hledán běžící server s daným PID. Pokud se takový nenajde, vznikne chyba. Pokud se takový server najde, předají se mu volby -a, -r, -I, -R, -B a -u.
Každý kompilační server systemtapu se za normálních okolností spouští pod uživatelem stap-server (pro initscript) nebo jako uživatel, který spouští stap-server, pokud neexistuje jiné nastavení (viz sekce SOUBORY). Tato volba určuje uživatele, pod kterým poběží servery. Takový uživatel musí být členem skupiny stap-server.
Tato volba umožňuje nastavit pro každý server separátní log soubor. Volbu lze opakovat a tím nastavit log soubor každému ze specifikovaných serverů zvlášť. Pokud je specifikováno více serverů, než voleb --log, použije se pro zbývající servery výchozí log soubor (viz sekce SOUBORY).
Nastaví port pro každý specifikovaný server. Volbu lze opakovat a určit tak port pro všechny specifikované servery. Pokud je specifikováno více serverů než voleb --port, bude pro zbývající servery zvolen náhodný port.
Tato volba umožňuje specifikaci separátní NSS databáze pro každý server, Volbu lze opakovat a aplikovat ji na jednotlivé specifikované servery. Pokud je specifikováno více serverů, než voleb --ssl, bude pro zbývající servery použita výchozí databáze (viz sekce SOUBORY).
Určuje počet vláken pro obsluhu současných požadavků. Pokud threads == 0, budou všechny požadavky obsluhovány sériově v jediném - hlavním vlákně. Výchozí hodnota je počet dostupných jader procesoru.

Pomocí konfiguračních souborů je možné:

  • určit globální konfiguraci logování, konfigurační soubory serverů, stavové soubory a další globální parametry.
  • určit které servery se nastartují ve výchozím nastavení.

Globální konfigurační soubor obsahuje nastavení globálních proměnných, které ovlivňují celkovou operaci služby. Každá řádka začínající znakem '#' se ignoruje. Všechny ostatní řádky musejí mít tvar VARIABLE=VALUE. Nejde o shell skript. Celý zbytek řáky za znakem '=' bude interpretován jako hodnota a ta bude přiřazena příslušné proměnné.

Lze použít následující proměnné:

Absolutní cesta k adresáři, který obsahuje výchozí konfiguraci serverů.
Absolutní cesta k adresáři se status soubory.
Absolutní cesta k log souboru.
Uživatel pod kterým stap-server(y) poběží. Výchozí hodnota je stap-server pro initskript, jinak uživatel, který spouští stap-server.

Následuje příklad globálního konfiguračního souboru:

CONFIG_PATH=~<user>/my-stap-server-configs
LOG_FILE=/tmp/stap-server/log

Pokud pro akci start (nebo jí podobnou akci) nebyly specifikovány konkrétní servery, budou nastartovány servery odpovídající jednotlivým individuálním konfiguračním souborům. Každý konfigurační soubor obsahuje nastavení proměnných, které se použijí ke zkonfigurování individuálního serveru.

Každá řádka začínající znakem '#' se ignoruje. Všechny ostatní řádky musí být tvaru VARIABLE=VALUE. Nejde o shell skript. Celý zbytek řádku za znakem '=' se interpretuje jako hodnota.

Každý konfigurační soubor musí mít název s příponou .conf. Viz stappaths(7) kde je popsáno výchozí umístění těchto souborů. Toto výchozí umístění může být změněno v globálním konfiguračním souboru pomocí volby -c (viz OPTIONS).

Lze použít následující proměnné:

Určuje cílovou architekturu pro daný server a odpovídá přepínači -a (viz VOLBY). Pokud ARCH není nastavena, použije se architektura hostitelského stroje jako výchozí.
Určuje verzi jádra pro daný server a odpovídá volbě -r (viz VOLBY). Pokud RELEASE není nastavena, použije se release hostitelského stroje jako výchozí.
Určuje volby, které se předají příkazu make při sestavování jaderného modulu systemtapu. Jde o proměnnou typu pole, kde každý prvek odpovídá volbě -B (viz VOLBY). Pomocí BUILD=STRING se pole vymaže a první prvek se nastaví na STRING. Pomocí BUILD+=STRING se do pole přidá STRING jako další prvek.
Určuje seznam adresářů, ve kterých bude server hledat tapset skripty. Jde o pole, kde každý prvek odpovídá přepínači -I, viz VOLBY). Prostřednictvím zápisu INCLUDE=PATH se pole smaže a první jeho prvek se nastaví na PATH. Pomocí zápisu INCLUDE+=PATH se do pole přidá PATH jako další prvek.
Určuje adresář, který obsahuje zdrojové soubory potřebné pro sestavení jaderného modulu systemtapu. Odpovídá přepínači -R (viz VOLBY).
Určuje uživaltele, pod kterým server poběží a odpovídá volbě -u (viz VOLBY).
Odpovídá přezdívce pro server a také volbě -n (viz VOLBY).
Určuje umístění logovacího souboru pro daný server a odpovídá volbě --log (viz VOLBY).
Určuje síťový port, na kterém má daný server poslouchat. Odpovídá volbě --port (viz VOLBY).
Určuje umístění certifikační databáze NSS, kterou má daný server použít a odpovídá volbě --ssl (viz VOLBY).
Určuje maximální počet vláken pro obsluhu současných požadavků daným serverem Odpovídá volbě --max-threads (viz VOLBY).

Následuje ukázka konfiguračního souboru:

ARCH=
USER=
RELEASE=
NICKNAME=native

Tím, že ponecháme ARCH, USER, a RELEASE prázdné docílíme toho, že se pro ně použijí výchozí hodnoty.

Konkrétnější příklad:

ARCH=i386
RELEASE=2.6.18-128.el5
PORT=5001
LOG=/path/to/log/file

Komplikovanější příklad:

USER=serveruser
RELEASE=/kernels/2.6.18-92.1.18.el5/build
INCLUDE=/mytapsets
INCLUDE+=/yourtapsets
BUILD='VARIABLE1=VALUE1 VARIABLE2=VALUE2'
DEFINE=STP_MAXMEMORY=1024
DEFINE+=DEBUG_TRANS
RUNTIME=/myruntime
NICKNAME=my-server
SSL=/path/to/NSS/certificate/database

Bezpečnost SSL spojení mezi klientem a serverem závisí na správném zacházení s certifikáty.

Důvěryhodnost daného systemtap serveru nelze určit automaticky bez důvěryhodné autority, která vydala certifikát. To nemusí být praktické pro každodenní použití, proto se klienti autentizují proti své vlastní databázi důvěryhodných certifikátů. V tomto kontextu vytvoření relace důvěry znamená přidání serverového certifikátu do databáze klienta.

Pro initscript lokálního serveru se toto děje automaticky. Jakmile se nainstaluje balíček systemtap-server, certifikát serveru pro výchozího uživatele (stap-server) se automaticky vygeneruje a přidá do databáze lokálního klienta. Lokální klient tak automaticky považuje lokální server za důvěryhodný "module signer".

Je-li stap spuštěn neprivilegovaným uživatelem (t.j. uživatelem, který není root, ani člen skupiny stapdev, ale může být členem skupiny stapusr a/nebo stapsys) automaticky se použijí volby --use-server a --privilege. To znamená, že neprivilegovaní uživatelé mohou používat lokální stap server v neprivilegovaném režimu bez zvláštních nastavení. Neprivilegovaní uživatelé mohou též používat kompilační server prostřednictvím přepínačů --use-server a --privilege, ale samozřejmě nebudou moci zavést systemtap modul do jádra (s volbou -p4 se o to systemtap nebude pokoušet).

Aby bylo možno použít stap server na vzdáleném stroji, je potřeba nainstalovat jeho serverový certifikát do klienta. Viz volba --trust-servers v manuálové stránce stap(1) a také soubor README.unprivileged mezi zdrojovými soubory systemtapu.

Jednoduché příklady shrnuje manuálová stránka stapex(3stap).

Nastartovat zkonfigurovaný server, nebo výchozí server pokud žádný server není zkonfigurovaný:

$ [ service ] stap-server start

Spustit systemtap server, který bude obsluhovat všechna jádra nainstalovaná v /lib/modules:

$ [ service ] stap-server start -i

Vypsat informace o běžících serverech:

$ [ service ] stap-server status

Nastartovat server s konfigurací podobnou jinému již běžícímu serveru s danou přezdívkou NICKNAME, ovšem pro odlišnou architekturu:

$ [ service ] stap-server start -n NICKNAME -a ARCH

Nastartovat server pro nenainstalované jádro (křížová kompilace)

$ [ service ] stap-server start -a ARCH -r /BUILDDIR

Zastavit jeden ze serverů odkazem na jeho PID (dle stap-server status): stap-server status):

$ [ service ] stap-server stop -p PID

Spustit skript prostřednictvím kompilačního serveru:

$ stap SCRIPT --use-server

Spustit skript jako neprivilegovaný uživatel pomocí kompilačního serveru:

$ stap SCRIPT

Zastavit všechny kompilační servery:

$ [ service ] stap-server stop

Restartovat server po změně globální konfigurace a/nebo když byl přidán nový , nebo odebrán, či změněn existující server:

$ [ service ] stap-server force-reload

Systemtap je systémový administrační nástroj. Zpřístupňuje interní datové struktury jádra, které mohou obsahovat privátní informace. Přečtěte si manuálovou stránku stap(1) která přináší více informací.

Jako síťový server by měl stap-server být aktivován s rozvahou, aby se omezila všechna relevantní rizika. Zvažte následující opatření:

1
Spouštějte stap-server pod běžným uživatelem, nikdy ne pod uživatelem root.

Když je stap-server spuštěn jako služba (t.j. service stap-server ...), pak výchozí chování je, že všechny servery běží pod uživatelem stap-server. Při přímém spuštění běží service stap-server pod uživatelem který jej vyvolal. V každém případě lze uživatele změnit volbou -u, nebo případně nastavením STAP_USER=username v globálním konfiguračním souboru, nebo nastavením USER=username v konfiguračním souboru individuálního serveru. Daný uživatel musí mít právo spustit proces pod jiným uživatelem. Vice informací viz KONFIGURACE.

Zvolený uživatel musí mít také právo zapisovat do logovacího souboru. Umístění logovacího souboru lze upravit nastavením LOG_FILE=path v globálním konfiguračním souboru. Vice informací viz KONFIGURACE.

Zvolený uživatel musí mít právo čtení i zápisu do adresáře obsahujícího status soubory. Toto umístění lze upravit nastavením STAT_PATH=path v globálním konfiguračním souboru. Vice informací viz KONFIGURACE.

Zvolený uživatel musí mít právo čtení a zápisu pro adresář, kde se sestavuje uprobes.ko a související soubory.

Systemtap server nepoběží, pokud zvoleným uživatelem je root.

2
Spusťte stap-server s omezeními na maximální čas běhu, velikost souboru, velikost použité paměti tak, aby ani potenciálně chybné vstupy nezpůsobily škody.

Pokud uživatelem, pod kterým server běží, je stap-server, pak každý požadavek server obsluhuje v rámci limitů nastavených v souboru ~stap-server/.systemtap/rc. V opačném případě nejsou žádné limity nastaveny.

3
Spusťte stap-server při nastavené proměnné prostřdí TMPDIR, která ukazuje do odděleného umístění, kde jsou zapnuty uživatelské kvóty. Tím se zabrání nežádoucímu zaplnění souborového systému.

Výchozí TMPDIR je /tmp/.

4
Aktivujte firewall tak, aby klientské požadavky mohly přicházet jen z relativně bezpečných sítí.

Pro automatickou volbu serverů klienty je třeba nainstalovat avahi jak na serveru, tak i na klientovi. Firewall musí propouštět mDNS zprávy.

Kompilační server systemtapu a související nástroje používají k síťové komunikaci SSL jak je implementovaná v rámci NSS. NSS se také používá pro správu certifikátů. Související databáze certifikátů musí být odpovídajícím způsobem chráněná, aby nedošlo ke snížení bezpečnosti systému. Pro navýšení bezpečnosti kontroluje systemtap klient správná přístupová oprávnění dříve než přistoupí k databázi certifikátů.

stappaths (7).

stap(1),
staprun(8),
stapprobes(3stap),
stappaths(7),
stapex(3stap),
avahi,
ulimit(1),
NSS

Použijte projektovou bugzillu, nebo mailing list. http://sourceware.org/systemtap/, <systemtap@sourceware.org>.

error::reporting(7stap), https://sourceware.org/systemtap/wiki/HowToReportBugs