FreeBSD jails cz.1

Sun 11 October 2009 by admin

Tym wpisem zapoczątkowuje kilku odcinkową serię poświeconą usłudze jails w systemie FreeBSD. W pierwszej części po krótkim omówieniu zagadnienia postaram się przybliżyć narzędzie ezjail wspomagające zarządzenie system jails.

Począwszy od wersji 4.0 we FreeBSD pojawia się opcja jails wirtualizacji na poziomie samego systemu operacyjnego czyli tworzenia niezależnych systemów w głównym systemie. Dzięki temu osiągamy całkiem przyzwoitą separację, każda instancja jails posiada swoich własnych użytkowników, swoją listę procesów przez co zdecydowanie wzrasta bezpieczeństwo oraz łatwiej jest rozdysponować uprawnienia dla poszczególnych użytkowników dając im we władanie konkretnego jails'a. Narzut wirtualizacyjny jest minimalny co zachęca nas do tworzenia modelu jedna usługa per jail. Wraz z rozwojem systemu FreeBSD przybywały kolejne usprawniania samych jails'ów w tym od wersji 7.2 jest możliwe dodawnie kilku adresów IP oraz przypisywanie konkretnego jails'a do konkretnego procesora. Prócz niezaprzeczalnych zalet jails'ów warto nadmienić o ich ograniczeniach i tak nie mamy pełnej kontroli nad samym kernelem, sprzętem oraz nie mamy zwirtualizowanego stosu TCP/IP (chociaż i to się zmienia http://imunes.tel.fer.hr/virtnet/). Rozwój możliwości samych jails'ów napędzał rozwój narzędzii nim zarządzających, do jednych z nich możemy zaliczyć ezjail (http://erdgeist.org/arts/software/ezjail/).

Samo narzędzie ezjail to zbiór skryptów napisanych w sh, podstawowym skryptem to ezjail-admin. Rozpoczynając pracę z jails'ami przy pomocy narzędzia ezjail należy stworzyć coś w rodzaju template tzw. basejail, który będzie użyty do stworzenia nowego jails'a, będzie podmontowywany w trybie ro do każdej instancji jails i są to podstawowe katalogi /bin /sbin /rescue etc. Lokalizacje, w której mają być tworzone template'y oraz same jails'y określamy w pliku konfiguracyjnym /usr/local/etc/ezjail.conf.

Jeżeli zamierzamy zainstalować basejail (aka template) prosto z serwera ftp a nie kompilować go ze źrodeł należy:

# ezjail-admin install

warto jednak wcześniej zmienić w pliku konfiguracyjnym serwer ftp na ,,bliższy'' nam.
Po zainstalowaniu basejail możemy przystąpić do instalacji naszego pierwszego jails i tak:

# ezjail-admin create first_jail 192.168.1.2

stworzy nam w lokalizacji ustalonej w pliku konfiguracyjnym jails'a first_jail o adresie IP 192.168.1.2
te dwa parametry są obowiązkowe przy instalacji.

Przed wystartowaniem nowego jails'a należy dodać alias do naszego interfejsu sieciowego (zgodnym z podanym adresem IP jails'a) i dobrze je ograniczyć adresy nasłuchiwania dla usług działających w systemie do konkretnych adresów IP. Po dodaniu aliasu do interfejsu sieciowego możemy uruchomić naszego jails'a wcześniej dodając do rc.conf:

ezjail_enable="YES"

uruchomienie odbywa się poleceniem:

# /usr/local/etc/rc.d/ezjails.sh start first_jail

Listę uruchomionych jails'ów uzyskujemy poleceniem:

# jls

bądź też:

# ezjail-admin list

Aby dowiedzieć się jakie procesy zostały uruchomione w poszczególnych jails'ach:

# ps ax -o jid,pid,command | grep -v JID  | sort -k1 -n

z poziomu narzędzia top możemy skorzystać z przełącznika j .

W celu zalogowania się do konsoli naszego jails'a należy wydać polecenie:

# jexec <jid> csh

bądź też:

# ezjail-admin console first_jail

Zastosowanie w ezjail rozwiązania basejail jest korzystne, gdyż podstawowe narzędzia systemowe (z np. /bin) są chronione przed zapisem (montowanie readonly). Co więcej ten sam basejail podmontowany jest do wielu jails'ów oszczędzamy przez to miejsce na dysku a aktualizacje przeprowadzamy tylko w jednym miejscu. Aby zaktualizować nasz basejail wystarczy powtórnie uruchomić polecenie:

# ezjail-admin install

w przypadku gdy korzystamy z obrazu pobranego z serwera ftp lub poleceniem:

# ezjail-admin update

gdy zamierzamy przekompilować je ze źródeł.

Wartą odnotnowania opcją ezjail jest opcja flavour wykorzystywana przy tworzeniu nowego jails'a. Pozwala ona na wstępne skonfigurowanie nowo tworzonej instancji jail. Pliki konfiguracyjne flavours znajdują się konkretnych podkatalogach w lokalizacji (na ogół) /usr/jails/flavours i tak domyślny plik (w podkatalogu defaults) ezjail.flavour zawiera polecenia jakie mają zostać wykonane oraz katalogi/pliki jakie mają zostać dołączone tuż po pierwszym uruchomieniu nowego jails'a. Wedle upodobań możemy stworzyć kolejne podkatalogi we flavours/ i instalować tym razem z parametrem -f \ nowe predefiniowane instancje jails.

Tworząc narzędzie ezjail nie zapomiano o bardzo istotnych a często pomijanych opcjach umożliwiających szybką archiwizację i przywrócenie jails'ów odpowiednio poleceniami ezjail-admin archive, ezjail-admin restore.

Jak widać korzystanie z narzędzia ezjail wydatnie ułatwia i przyśpiesza zarządzenia jails'ami, w następnej cześci cyklu FreeBSD jails spróbuje przedstawić zalety połączenie ww. narzędzia z systemem ZFS.


Comments