Hlavní navigace

PC-BSD: Jails a Warden – terminálové příkazy

24. 6. 2013
Doba čtení: 8 minut

Sdílet

Moderní desktop to nejsou jen Windows, OS X nebo Linux. Pokud chcete vyzkoušet nějakou alternativu, můžete sáhnout po FreeBSD, nebo jeho desktopovém klonu PC-BSD. Náš seriál se blíží konci, takže byste měli mít desktop hotový. V osmém dílu seriálu budeme pokračovat v popisu administrace a využití Jails.

minulém dílu jsme se věnovali úvodu do jails a v tomto budeme pokračovat. Než se k tomu ale dostaneme, tak bych si dovolil udělat jednu změnu. Změna spočívá v tom, že se jaily nebudou vytvářet a provozovat na vlastním stroji, ale přesunou se do stroje virtuálního. Důvod je asi jediný – ukázat možnosti skutečně „vzdáleného“ přístupu k jailům, což z hostitele není prakticky možné.

Když už jsme u této odbočky, tak si v rámci toho popíšeme i možnosti připojení se k virtuálnímu stroji pomocí SSH. Přes něj můžeme kromě jiného vytvářet jaily a přistupovat k nim přes administrátorský terminál. Pro zprovoznění SSH přístupu je nutné udělat dvě věci:

  1. zkontrolovat stav a případně spustit službu SSHD
  2. nastavit firewall

Pro spuštěná démona SSHD je třeba udělat jednoduchý zásah do systému (pokud už tak nebylo učiněno při instalaci) přidáním příkazu do souboru  /etc/rc.conf:

# echo 'sshd_enable="YES"' >> /etc/rc.conf

Pak už jen stačí službu nastartovat/restartovat např. příkazem

# sudo service sshd restart

a přístup přes SSH bude možný.

Nastavení firewallu je o něco složitější, ale ne o moc. V základní instalaci používá PC-BSD jako firewall aplikaci PF (Packet Filter). Pro jeho nastavení a zprovoznění je třeba upravit dva soubory. První z nich je již uvedený /etc/rc.conf. Jeho obsah by se měl doplnit o následující řádky (pokud už v něm nejsou):

    pf_rules="/etc/pf.conf"
    pf_enable="YES"
    pf_flags=""

Pokud by bylo nutné či vhodní nastavit logování firewallu, je nutné přidat ještě toto:

    pflog_logfile="/var/log/pflog"
    pflog_enable="YES"
    pflog_flags=""

Jak je z výpisu zřejmé, dalším na řadě pro úpravy je soubor /etc/pf.conf. Ten s největší pravděpodobností bude existovat už s nějakým obsahem. Proto by mělo stačit ho jen upravit, ale já uvedu pro jistotu dvě možnosti jeho nastavení. V obou případech budeme předpokládat, že se síťová karta, na kterou se budeme napojovat, ukrývá pod označením  em0.

Pravidla pak umožní přístup pouze na jeden port z vnějšku a povolí veškerý provoz směrem ven. Obsah souboru pak vypadá např. takto:

    set skip on lo0
    set block-policy return
    block in all
    pass out keep state
    pass quick on em0 all

Je samozřejmě možné nastavit i více a složitějších pravidel, ale pro naše účely bude toto dostatečné. Mohlo by se to ještě i zjednodušit a povolit přístup ke všem portům:

    sudo warden create 10.0.0.100 percona
    sudo warden create 10.0.0.110 jabbserv

Tato nastavení pak budeme využívat i pro zpřístupnění vytvořených jailů ze vzdálených strojů.

Nyní je již možní se k virtuálnímu stroji připojit a zahájit práci na jailu. Pro manipulaci s nimi existuje celá sada terminálových příkazů – viz soubor Jail-CLI.txt.

Jako první je samozřejmě nutné jaily vytvořit, takže zadáme postupně příkazy

# sudo warden create 10.0.0.100 percona
# sudo warden create 10.0.0.110 jabbserv

Průběh je vidět v souboru Jail-create.txt. Jak je z příkazů patrné, v jednom si zprovozníme MySQL server, respektive jeho alternativu Percona. V druhém jailu se pak zaměříme na Jabber server Openfire. Obě aplikace jsou zajímavé a určitě užitečné i pro uživatele mimo *BSD.

Vytvoření jailů můžeme ověřit např. pomocí příkazu zfs list, který kromě jiného vrátí tento výsledek:

NAME                                            USED  AVAIL  REFER  MOUNTPOINT
tank0/usr/jails                             384M  24.7G   200K  /usr/jails
tank0/usr/jails/.warden-chroot-amd64    373M  24.7G   373M  /usr/jails/.warden-chroot-amd64
tank0/usr/jails/10.0.0.100                  5.46M  24.7G   378M  /usr/jails/10.0.0.100
tank0/usr/jails/10.0.0.110                  5.46M  24.7G   378M  /usr/jails/10.0.0.110

Ve výchozím adresáři /usr/jails byly vytvořeny tři další datasety: skrytý adresář, kde je obsažena základní systémová struktura operačního systému a je pro všechny další jaily v tomto místě společná. Proto je také hodnota USED a REFER tohoto datasetu stejná. Pokud se podíváme blíže na oba jaily, resp. jejich datasety, tak se jeví jako úplně stejně jako dataset předchozí. Rozdíl je ale patrný z výpisu, kde je jasné, že samotná velikost jailu je minimální (USED je necelých 6 MB) a zbytek je ukazatel na společnou část (REFER)

Nyní je možní vybraný jail spustit a přihlásit se k němu přes vyhrazený terminál:

# sudo warden start 10.0.0.100

Pokud jsme ale jail vytvořili pomocí CLI příkazů, objeví se chybová hláška a jail se nespustí:

ERROR: Invalid network interface specified: re0

Je nutné nastavit správnou síťovou kartu, což se provede úpravou souboru  /usr/local/etc/warden.conf:

#!/bin/sh
# Configuration options for the Warden
######################################################################
# Network Interface for the jails to use
NIC: re0 - změní se na em0 a uloží se
# Directory to use for compressing / decompressing files
WTMP: /usr/jails
# Location of the jails
JDIR: /usr/jails

Pak už start proběhne bez problémů. Vzhledem k tomu, že se jedná o start první, je jeho průběh trochu složitější – viz soubor Jail-first-start.txt. Jail je možné samozřejmě zastavit a znovu spustit = restart. Druhé a další spuštění je pak mnohem jednodušší – viz soubor Jail-start.txt. K běžícímu jailu se můžeme přihlásit pomocí příkazu

# sudo warden chroot 10.0.0.100
Started shell session on 10.0.0.100. Type exit when finished.

Vzhledem k tomu, že není vytvořen žádný uživatel jailu, je k dispozici pouze root. Pokud bychom to chtěli změnit, je možné uživatele vytvořit z terminálu a nebo z Warden GUI. Z terminálu je možné provádět již všechny potřebné úkony v jailu a proto se můžeme pustit do konkrétní instalace konkrétní aplikace. V prvním případě to bude server Percona. Instalaci nemá smysl popisovat, ale je možné použít standardní možnosti PC-BSD. Já jsem se rozhodl použít porty. Zaberou sice nějaké místo (cca 350 MB a je samozřejmě možné porty následně z jailu odstranit), ale dají se dobře komprimovat (původní soubor má při stažení 69 MB).

Jsou k dispozici dvě verze Percona serveru – 5.6.10 a 5.5.31. Verze 5.6 je označená jako alfa, takže jsem použil verzi 5.5. Po instalaci serveru a všech potřebných závislostí (ale bez dat) vypadá základní velikost jailu takto:

tank0/usr/jails                                 1.85G  22.3G   224K  /usr/jails
tank0/usr/jails/.warden-chroot-amd64    373M  22.3G   373M  /usr/jails/.warden-chroot-amd64
tank0/usr/jails/10.0.0.100                  1.48G  22.3G  1.84G  /usr/jails/10.0.0.100
tank0/usr/jails/10.0.0.110                  5.46M  22.3G   378M  /usr/jails/10.0.0.110

Jak z výpisu vyplývá, velikost sice narostla, ale necelé 2 GB nejsou v dnešní době žádnou tragédií. Pokud bych hned provedl export jailu (vlastně něco jako Golden Image ve virtualizaci), tak bude velikost příslušného souboru cca 300 MB. Vytvoření trvá poměrně dlouhou dobu na příkaz:

# sudo warden export 10.0.0.100 --dir=/usr/local
Stopping the jail.....Stopping jail with: /etc/rc.shutdown
...Done
Creating compressed archive of 10.0.0.100... Please Wait...
Created 10.0.0.100.wdn in /usr/local

V budoucnu bych chtěl ověřit možnosti exportu a importu jailů a to hlavně včetně uložených databázových dat. Byla by to určitě jedna z možností, jak data zálohovat a přenášet mezi stroji.

Nastavení přístupu k databázi a další podrobnosti asi nemá smysl popisovat. O firewallu bylo referováno na začátku dílu a nastavení MySQL k vzdálenému přístupu je něco, co s jaily přímo nesouvisí.

Druhým ukázkovým jailem je XMPP server Openfire. Určitě to není jediný a asi ani nejčastěji využívaný XMPP server, ale má několik zajímavých vlastností. Asi hlavní výhodou je velmi snadná administrace pomocí webového rozhraní. Je vytvořený v Javě a ke svému běhu potřebuje JRE nebo JDK.

Více informací o něm je možné najít na igniterealtime.org.

Instalaci je možné provést buď pomocí staženého komprimovaného souboru nebo z portů. Aktuální je verze 3.8.2, v portech je 3.8.1. Vzhledem k tomu, že je dělí necelé dva měsíce mezi vydáními, použiji raději verzi z portů. Bude to určitě jednodušší a získáme i přirozenou integraci do prostředí. Před instalací serveru je lepší z portů extra instalovat OpenJDK6. Instalace je poměrně dlouhá, protože se instaluje velké množství potřebných knihoven a aplikací. Kromě samotného serveru je to ještě např. apache-ant, cups, gettext, perl, python a další.

Po ukončení instalace systém sám napoví, že je třeba klasicky upravit soubor /etc/rc.conf a přidat

openfire_enable="YES"

a pak je možné ho spustit: service openfire start.

Po spuštění služby je možné se pomocí webového prohlížeče připojit k administrativnímu rozhraní a dokončit instalaci serveru a jeho základní nastavení. Rozhraní je na IP adrese 10.0.0.110:9090. Pokud se přihlašujeme z hostitelského systému, není nutné žádné nastavení firewallu. Pokud bychom se hlásili ze vzdálených strojů, je nutné povolit příslušný port obdobně, jako u prvního jailu. Po úspěšném přihlášení se objeví první formulář s nastavením a následujícím obsahem: nastavení jazykové mutace, nastavení serveru (hostname, číslo administrátorského portu pro HTTP a HTTPS – ve výchozím stavu 9090 a 9091), nastavení databáze (zde jsou dvě volby – standardní připojení, kde lze využít běžně používané databázové servery jako je MySQL, PostgreSQL, Oracle, MSSQL a další. Výchozí je nastavení Vestavěná databáze, které používá interní HSQLDB. Pro demonstrační účely vestavěná databáze bohatě stačí a měla by zvládnout až 25 klientů.), nastavení profilu (jedná se o způsob ukládání uživatelů do vestavěné databáze, AD/LDAP nebo aplikace Clearspace/Jive), nastavení administrátorského účtu (mailová adresa a heslo uživatele admin) a dokončení základního nastavení s možností přechodu do administrátorské konzole.

Ta je velmi obsáhlá a nebudu se jí podrobněji zabývat, protože by to vydalo ještě na minimálně jeden článek, který by ale moc nesouvisel s PC-BSD. Pro nás je podstatná úvodní stránka konzole, kde je kromě jiného seznam všech používaných portů. Ty je třeba povolit na firewallu jailu (případně změnit výchozí čísla portů), aby bylo možné zkusit připojení klientů. Klientů je hodně a každý může volit dle libosti. Pro úplnost jenom uvedu, že vývojáři Openfire dodávají vlastního klienta v Javě (Spark), webového klienta (SparkWeb) a různé javové XMPP knihovny. Nastavení a možnosti konzole jsou také patrné z obrázků v galerii.

Velikosti jailů jsou aktuálně následující:

tank0/usr/jails                                 3.94G  18.9G   200K  /usr/jails
tank0/usr/jails/.warden-chroot-amd64    373M  18.9G   373M  /usr/jails/.warden-chroot-amd64
tank0/usr/jails/10.0.0.100                  1.48G  18.9G  1.84G  /usr/jails/10.0.0.100
tank0/usr/jails/10.0.0.110                  2.10G  18.9G  2.47G  /usr/jails/10.0.0.110

Jail s Openfire je sice o cca 40 % větší než Percona, ale velikost někde kolem 2,5 GB není v dnešní době žádná zásadní tragédie.

root_podpora

Tímto bych asi naši dvojdílnou exkurzi do světa jails ukončil. Doufám, že to byla pro případné zájemce exkurze zajímavá a třeba v budoucnu také využitelná. Já se k jailsům ještě určitě vrátím při popisu zálohování systému a využití snapshotů systému i jails.

V příštím dílu se budu zabývat hlavně dosavadními zkušenostmi s použitím PC-BSD, postřehy z běžné práce i administrace, problémy, výhodami a dalšími snad přínosnými informacemi.

Byl pro vás článek přínosný?