Spis Treści
- Uruchomienie EZJAIL
- Źródła w sieci internet
- Instalacja oraz pierwsza konfiguracja
- Przypisanie adresów IP
- Utworzenie pierwszego jaila
- Uruchomienie jaila
- Dodanie obsługi bpf w jail
- Jak powinna wyglądać zawartość /etc/fstab
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)
Nieoceniony Dan Langille
Starszy wpis Dana
FreeBSD Handbook - rodział 15.6
Poudriere in jail - pierwszy oraz podstawowy jail
Poudriere in jail - przepis bardziej rozbudowany
Bardzo dobry opis wykorzystania mechanizmu flavours
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:
Pliki dla administracyjnych plików Makefile (z repozytroium skryptów)
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
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.
