Jail Flavours

Flavours sind das beste Feature seit geschnitten Brot - diese nehmen einem immer wiederkehrende Aufgaben beim Erstellen einer neuen Jail ab.

Ich habe einen Großteil aus dem example Ornder übernommen, und mir einen flavour mit dem Namen self erstellt:

$ find /usr/jails/flavours/self
/usr/jails/flavours/self
/usr/jails/flavours/self/usr
/usr/jails/flavours/self/usr/home
/usr/jails/flavours/self/usr/home/user
/usr/jails/flavours/self/usr/home/user/.ssh
/usr/jails/flavours/self/usr/home/user/.ssh/authorized_keys
/usr/jails/flavours/self/usr/local
/usr/jails/flavours/self/usr/local/etc
/usr/jails/flavours/self/usr/local/etc/sudoers
/usr/jails/flavours/self/etc
/usr/jails/flavours/self/etc/resolv.conf
/usr/jails/flavours/self/etc/rc.conf
/usr/jails/flavours/self/etc/make.conf
/usr/jails/flavours/self/etc/periodic.conf
/usr/jails/flavours/self/etc/rc.d
/usr/jails/flavours/self/etc/rc.d/ezjail_flavour
/usr/jails/flavours/self/pkg
  • Darauf achten, dass die Rechte passend gesetzt sind (home; ~/.ssh; executable flags; …).

  • Die resolv.conf wurde vom Host kopiert.

  • Die make.conf ist an die des Hosts angelehnt.

  • Nach langem debugging habe ich folgendes herausgefunden:

    • /pkg wird bei der Installation gesucht, und nicht gefunden. Deshalb ist das mit im Flavour, und wird im Startup Script wieder gelöscht (Dies tritt nur bei Verwendung von Flavours auf, ohne wird nicht nach /pkg gesucht… wtf?!?).
    • Das Flavour Script darf keine Punkte im Dateinamen haben. Scheint ein recht neues Verhalten zu sein (Sehr gut, dass das Beispiel eben welche hat…).

Mein ezjail_flavour Script schaut in etwa so aus:

#!/bin/sh
#
# BEFORE: DAEMON
# PROVIDE: ezjail.self.config
#
# customized ezjail flavour

. /etc/rc.subr

name=ezjail_flavour
start_cmd=flavour_setup

flavour_setup() {

# Remove traces of ourself
rm -f "/etc/rc.d/ezjail_flavour"

###
# Timezone - Uhr auf Kartoffel stellen
ln -s /usr/share/zoneinfo/Europe/Berlin /etc/localtime

###
# Groups
pw groupadd -q -n user

###
# User
#
# Den SHA512 Hash kann man sich entweder aus der
# /etc/master.passwd ziehen, oder manuell generieren:
#   python -c 'import crypt; print crypt.crypt("password", "$6$saltSALTsaltSALT$")'
# Daran denken, der Salt hat 16 Stellen
echo -n "$6$saltSALTsaltSALT$/AvblmZPXYozjA6BrX3kTfO7hmUjwG9RkmHZwXkE9zD2sRY1Y6RT809yDoBG0ZgjDENLFTbipaDgtqYf.gnnY0" |\
    pw useradd \
        -n user -u 1001 -c 'Awesome Jail User' \
        -d /usr/home/user -m \
        -s /bin/csh \
        -g user -G wheel \
        -H 0

###
# symlink user directories
ln -s /usr/home /home

###
# Files
chown -R user:user /usr/home/user

###
# Packages
[ -d /pkg ] && rm -rfv /pkg

###
# remove adjkerntz from crontab
cat /etc/crontab | grep -E -v -i "(adjkerntz|adjust the time zone)" > /etc/crontab.temp
mv /etc/crontab.temp /etc/crontab

}

run_rc_command "$1"

Das eigene Flavour in der /usr/local/etc/ezjail.conf als Standard definieren:

ezjail_default_flavour="self"

Sind die Flavours fertig, sollten wir uns um die Firewall und das Routing kümmern.