Re: Ports mittels script in jails installieren

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Tue, 24 May 2005 12:04:50 +0200 (CEST)

Dura Zell <dura-zell(at)freenet.de> wrote:
> Ich habe mir einige jails gebaut in denen ich meine Dienst laufen lassen
> will.
> Um einen Port in diesen jails zu installieren habe ich mir ein kurzes
> Shellscript geschrieben:
> --------
> #!/usr/local/bin/bash
>
> . /etc/jailhouse-distribute.conf
>
> clear
> cd /usr/ports/$1
> for i in `seq -s $jailstart -e $jailcount `
> do
> echo "Installiere /usr/ports/$1 in jail ${jailname[$i]}
> (${jailpath[$i]})"
> if [ ${jailactive[$i]} = "yes" ]; then
> make clean install DESTDIR=${jailpath[$i]}

DESTDIR würde ich für sowas nicht verwenden, weil das
Package-Management sonst mit der PKGDB durcheinanderkommt
(es würde versuchen, den Port im Host-System zu registrie-
ren anstatt im Jail). Man könnte das vielleicht durch
Definition weiterer make-Variablen hinbiegen, aber das
artet dann doch in ziemliche Bastelei aus und ist poten-
tiell unsicher.

Ich habe es bisher immer so gemacht, daß ich im Host-System
(oder in einem speziellen Package-build-Jail) ein Package
des gewünschten Ports gebaut habe (»make package«). Das
habe ich dann in die gewünschten Ziel-Jails kopiert und
dort in einer im jail laufenden Shell (!) per pkg_add in-
stalliert. Einziger Nachteil dieser Lösung ist, daß der
Port dabei auch im Host-System (bzw. im Package-build-Jail)
installiert wird, aber man kann es ja nötigenfalls hinter-
her wieder entfernen (»pkg_delete«).

> jailname[1]="proxy" # Symbolischer name
> jailpath[1]="/jail/eigen/proxy" # absoluter pfad
> jailhostname[1]="proxy.domain" # hostname
> jailip[1]="192.168.9.1" # IP Adresse
> jailexec[1]="/bin/sh /etc/rc" # Startbefehl

Ist dieses Jail für einen einzelnen Daemon gedacht (Squid,
Apache-Proxy o.ä.)? In dem Fall ist Dein Jail völliger
Overkill, wenn Du da ein komplettes FreeBSD-System drin
hast, das Du per /etc/rc hochfährst.

Stattdessen würde ich in das Jail-chroot _nur_ das hinein-
installieren, was der Daemon _wirklich_ braucht. Das sind
wohl eine handvoll Libraries und ein paar Dateien in /etc,
/var, /dev und vielleicht ein bißchen mehr. Auf jeden Fall
ein winziger Bruchteil eines kompletten Basis-Systems. Und
dann wird das ganze nicht per /etc/rc gestartet, sondern es
wird einfach nur der Daemon direkt gestartet (oder ein
kleines Wrapper-Skript, das das tut).

Das spart nicht nur Unmengen an Platz, sondern reduziert
auch die Start-Zeit des Dienstes in dem Jail drastisch.
Darüberhinaus ist es sicherer, da zahlreiche Dinge, die für
Exploits verwendet oder irgendwie mißbraucht werden könn-
ten, in dem Jail gar nicht existieren (z.B. keine Shell,
kein /bin/rm usw.).

Das nur als kleiner Tip und Empfehlung. :-)

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"I learned Java 3 years before Python.  It was my language of
choice.  It took me two weekends with Python before I was more
productive with it than with Java." -- Anthony Roberts
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 24 May 2005 - 12:06:32 CEST

search this site