Uruchomienie EZJAIL

Poniższe przepisy pozwalają na uruchomienie mechanizmu jail na wybranym serwerze. Należy tylko pamiętać, że mechanizm jest w trakcie "przebudowy" w systemie FreeBSD10. Tak więc warto zastosować się do tego wątku z forum FreeBSD - zamiana ezjail na jail.

Źródła w sieci internet

(Strony otwierają się w nowych oknach/kartach)

Instalacja oraz pierwsza konfiguracja

Zainstalowanie ezjail

Korzystając z własnego repozytorium pakietów należy zainstalować odpowiedni pakiet:

pkg install -y ezjail

Podstawowa konfiguracja

rc.conf

Obecnie wykorzystywany jest skrypt startowy /etc/rc.d/jail. Konfiguracja samych jaili jest umieszczona w /etc/jail.conf.

jail_enable="YES"

/usr/local/etc/ezjail.conf

diff -uN ezjail.conf.sample ezjail.conf

--- ezjail.conf.sample  2015-04-21 11:30:00.638446000 +0200
+++ ezjail.conf 2015-04-26 22:15:20.072081273 +0200
@@ -8,7 +8,7 @@
 #
 # Note: If you have spread your jails to multiple locations, use softlinks
 # to collect them in this directory
-# ezjail_jaildir=/usr/jails
+ezjail_jaildir=/usr/jails

 # Location of the tiny skeleton jail template
 # ezjail_jailtemplate=${ezjail_jaildir}/newjail
@@ -17,7 +17,7 @@
 # ezjail_jailbase=${ezjail_jaildir}/basejail

 # Location of your copy of FreeBSD's source tree
-# ezjail_sourcetree=/usr/src
+ezjail_sourcetree=/usr/src

 # This is where the install sub command defaults to fetch its packages from
 # ezjail_ftphost=ftp.freebsd.org
@@ -49,13 +49,13 @@
 # ZFS options

 # Setting this to YES will start to manage the basejail and newjail in ZFS
-# ezjail_use_zfs="YES"
+ezjail_use_zfs="YES"

 # Setting this to YES will manage ALL new jails in their own zfs
-# ezjail_use_zfs_for_jails="YES"
+ezjail_use_zfs_for_jails="YES"

 # The name of the ZFS ezjail should create jails on, it will be mounted at the ezjail_jaildir
-# ezjail_jailzfs="tank/ezjail"
+ezjail_jailzfs="sys/data/u/jails"

 # ADVANCED, be very careful!
 # ezjail_zfs_properties="-o compression=lz4 -o atime=off"

Instalacja basejail

Wykonanie podstawowego jaila na podstawie istniejących źródeł (HOSTa) - bardziej katalogu /usr/obj.

/!\ Przed uruchomieniem ezjail-admin update należy wykonać wszystkie kroki aktualizacji nowego systemu.

# aktualizacja samego basejail
ezjail-admin update -i

# aktualizacja ports
ezjail-admin update -P

Kroki po wykonaniu aktualizacji

Kroki dotyczą aktualizacji basejail. Ponieważ wszystko jest robione od zera, zatem konieczne jest dogranie potrzebnych plików:

  1. Pliki dla administracyjnych plików Makefile (z repozytroium skryptów)

  2. Jeżeli jednym z jails ma być serwer pocztowy, to konieczne jest doinstalowanie biblioteki libmilter:

cd /usr/src/lib/libmilter
make DESTDIR=/usr/jails/basejail/ install

Katalog /usr/jails/flavours

Katalog zawiera pliki konfiguracyjne (startowe), które zostaną przypisane wszystkich jails. Można tam ustawić swoje różne różności. Trzeba tylko odpowiednio wykonać polecenie ezjail-admin (przełącznik -f)

mkdir -p /usr/jails/flavours/bsdserwis/etc/rc.conf.d/
mkdir -p /usr/jails/flavours/bsdserwis/usr/local/etc/sudoers.d/
mkdir -p /usr/jails/flavours/bsdserwis/usr/local/admin/
mkdir -p /usr/jails/flavours/bsdserwis/root

cp -p /root/.bashrc /usr/jails/flavours/bsdserwis/root
cp -p /root/.bash_profile /usr/jails/flavours/bsdserwis/root
cp -p /root/.cshrc /usr/jails/flavours/bsdserwis/root
cp -p /usr/local/etc/sudoers.d/* /usr/jails/flavours/bsdserwis/usr/local/etc/sudoers.d/
cp -p /usr/local/etc/bashrc /usr/jails/flavours/bsdserwis/usr/local/etc/
cp -pr /etc/make* /usr/jails/flavours/bsdserwis/etc/
cp -p /etc/banner.sshd /usr/jails/flavours/bsdserwis/etc/
cp -p ~wtp/scripts/sshd_config_addon /usr/jails/flavours/bsdserwis/usr/local/etc/
cp -pr /usr/local/etc/pkg /usr/jails/flavours/bsdserwis/usr/local/etc/
mkdir -p /usr/jails/flavours/bsdserwis/usr/local/etc/ssl/certs/
cp -p /usr/local/etc/ssl/certs/pkg.codenix.pl.crt.repo /usr/jails/flavours/bsdserwis/usr/local/etc/ssl/certs/
cp -pr /usr/local/admin/unimaster /usr/jails/flavours/bsdserwis/usr/local/admin/
cp -pr /usr/local/admin/python /usr/jails/flavours/bsdserwis/usr/local/admin/
cp -p /usr/local/admin/setfacl-in-dir.sh /usr/jails/flavours/bsdserwis/usr/local/admin/setfacl-in-dir.sh

# o ile jest już zmodyfikowany o istnienie klasy polish
#
cp -p /etc/login.conf* /usr/jails/flavours/bsdserwis/etc/

touch /usr/jails/flavours/bsdserwis/etc/COPYRIGHT
cp -p /etc/motd /usr/jails/flavours/bsdserwis/etc/

Inne przydatne skrypty/pliki do wgrania do flavours

Trzeba zajrzeć do pierwszych porządków administracyjnych. Zwłaszcza trzeba wziąć pod uwagę pliki: /etc/periodic*, daily.local, itd.

daily.local

/usr/local/admin/passwd.shells
/usr/local/admin/lista-plikow-rcs-do-zatwierdzenia-zmian.sh /var/db/admin-scripts/rcs.db.txt

periodic.conf

# --- wy/l/aczenie obs/lugi sendmaila -------------------------------------
#
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"

# --- codzienne czyszczenie katalogu /tmp -----------------------
#
daily_clean_tmps_enable="YES"                           # Delete stuff daily
daily_clean_tmps_days="7"                               # If not accessed for
daily_clean_tmps_ignore="ZACZYN.txt screens .X*-lock mc-* .s.PG* quota.user quota.group"
daily_clean_tmps_verbose="NO"                           # Mention files deleted

# --- kontrola pakiet/ow przez pkgng -----------------------------
#
daily_status_security_pkg_checksum_enable="YES"
daily_status_security_pkgaudit_quiet="NO"
daily_backup_pkgng_enable="YES"
weekly_status_pkgng_enable="YES"

# --- ipfw nie jest dozwolone w jail -----------------------------
#
security_status_ipfwdenied_enable="NO"
security_status_ipfwlimit_enable="NO"

# --- koniec periodic.conf ---------------------------------------
#

Wykonanie specjalnego katalogu na logi z jails

zfs create sys/data/v/log/jails

Przypisanie adresów IP

Adresy IP muszą być przypisane na stałe do karty sieciowej:

## --------------------- rc.conf --------------------------
##
ifconfig_bge0="inet 10.x.x.1 netmask 0xffffff00"
ifconfig_bge0_alias0="inet 10.x.x.2 netmask 0xffffffff"
ifconfig_bge0_alias1="inet 10.x.x.3 netmask 0xffffffff"
ifconfig_bge0_alias2="inet 10.x.x.4 netmask 0xffffffff"

# oraz kolejne adresy IP dla interfejsu loopback
ifconfig_lo0_alias0="inet 127.0.0.2 netmask 0xffffffff"
ifconfig_lo0_alias1="inet 127.0.0.3 netmask 0xffffffff"
ifconfig_lo0_alias2="inet 127.0.0.4 netmask 0xffffffff"

Utworzenie pierwszego jaila

ezjail-admin create -f bsdserwis pkg.wtp3.local 10.254.3.20

Może się pojawić komunikat o usługach, które słuchają na wszystkich interfejsach. Trzeba odpowiednio poprawić.

Uruchomienie jaila

# uruchamianie poprzez /etc/rc.d/jail
#
service jail start pkg.wtp3.local

# ezjail s/lu/zy tylko do tworzenia oraz dla konsoli
#
ezjail-admin console pkg.wtp3.local

Pierwsze porządki administracyjne

Poniżej wypisane są niezbędne kroki administracyjne, aby można było poprawnie pracować w nowym środowisku.

Aktualizacja /etc/resolv.conf

Po pierwszym uruchomieniu nie ma lokalnego resolvera, zatem trzeba odpowiednio zmodyfikować plik /etc/resolv.conf

Dodanie użytkownika administracyjnego

mkdir -p /usr/home
ln -s /usr/home /home
pw add user wtp -L polish -s /bin/tcsh -d /home/wtp -m -c "Krzysztof Stryjek,BSD Serwis" -g 0
passwd wtp

Modyfikacja /etc/make/make.local.conf

O ile nie zostało poprawione w jail flavours:

 # --- katalogi robocze przy kompilowaniu ports ----------------------------
 #
-WRKDIRPREFIX=          /usr/obj/workdirs
-PKG_TMPDIR=            /usr/obj/workdirs
+WRKDIRPREFIX=          /var/ports/workdirs
+PKG_TMPDIR=            /var/ports/workdirs

oraz trzeba sprawdzić, czy jest dołączany plik /etc/make/make.jail.conf.

Wykorzystanie pkg w celu zainstalowania niezbędnych pakietów

Korzystając z własnego repozytorium pakietów warto zainstalować następujące paczki:

pkg install -y openssh-portable vim unison ipcalc mtr screen bash sudo bind-tools daemontools

# opcjonalnie w razie potrzeby
#
pkg install -y unbound
pkg install -y nsd
pkg install -y ssmtp
pkg install -y postfix

Wykorzystanie unison do wgrania niezbędnych skryptów

Do wykonania kroki opisane w instrukcji wykorzystania unimaster-a.

Konfiguracja strefy czasowej

Po przejściu na konsolę nowego jaila trzeba ustawić poprawną strefę czasową:

tzsetup

Dodatkowo należy wyłączyć aktualizację adjkerntz w /etc/crontab:

perl -pi -e 'next unless /adjkerntz/; s/^/#/' /etc/crontab

Pamiętaj, omijaj podczepianie się pod wszystkie adresy IP

Przed uruchomieniem niezbędnych usług należy upewnić się, że w plikach konfiguracyjnych nie ma dyrektyw typu Bind all interfaces. Jest to o tyle ważne, że mogą występować konflikty pmiędzy samym jail a serwerem hosta, etc. Przykłady poniżej:

## /etc/rc.conf
syslogd_flags="-b IP"

albo OpenSSH:

ListenAddress: 10.10.10.10

Uruchomienie niezbędnych usług

Mechanizm jail nie posiada pliku /etc/rc.conf. Wszelkie usługi należy dodać jak na poniższym przykładzie:

echo 'openssh_enable="YES"' > /etc/rc.conf.d/openssh

albo też zmodyfikować odpowiednie pliki, które zostały zainstalowane przez ezjail.

Dodanie obsługi bpf w jail

Jest to jeden z wymogów dhcp ew. aby móc uruchamiać tcpdumpa (czy pochodnych). Dlatego też potrzeba wykonać następujące kroki.

Definicja w /etc/devfs.rules

[devfsrules_jail_dhcp=6]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'bpf*' unhide
add path net unhide
add path 'net/*' unhide

Dodanie bpf w /etc/jail.conf

dhcp_wtp3_local {
        [...]
        devfs_ruleset = "6";
}

Jak powinna wyglądać zawartość /etc/fstab

Lista katalogów jails do zamontowania

Aby serwer poprawnie był uruchamiany, to dla danego jaila nie mogą być montowane wszystkie katalogi.

sys/data/u/jails/pkg.wtp3.local /usr/jails/pkg.wtp3.local zfs   rw,noatime,nfsv4acls    0 0
procfs                  /usr/jails/pkg.wtp3.local/proc procfs   rw              0 0

sys/data/u/jails/dhcp.wtp3.local /usr/jails/dhcp.wtp3.local zfs rw,noatime,nfsv4acls    0 0
procfs                  /usr/jails/dhcp.wtp3.local/proc procfs  rw              0 0

sys/data/u/jails/mxnsd.wtp3.local /usr/jails/mxnsd.wtp3.local zfs       rw,noatime,nfsv4acls    0 0
procfs                  /usr/jails/mxnsd.wtp3.local/proc procfs rw              0 0

Opcje montowania devfs

Okazało się, że niepoprawne zakmnięcie jaila (np. pad prądu), to nie jest uruchmiany poprawnie serwer. W logach pojawia się informacja:

Mounting local file systems:mount: devfs: mount option <multilabel> is unknown: Invalid argument

Dlatego też w fstab powinny znajdować się linijki:

devfs                   /dev                    devfs   rw      0 0


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.


UruchomienieJails (ostatnio edytowane 2025-10-27 22:53:45 przez wtps0n)