Re: 1st time jail

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Thu, 4 May 2006 09:09:21 +0200 (CEST)

Alvar Freude <alvar(at)a-blast.org> wrote:
> Oliver Fromme <olli(at)lurza.secnetix.de> wrote:
> > Der Prüfsummenschutz ist leider nicht perfekt, da es eine
> > Race-condition gibt.
>
> Du meinst: zwischen dem Test der Prüfsumme und dem Entpacken könnte
> einem (theoretisch) jemand ein anderes Paket unterjubeln?

Ja, zum Beispiel. Ist auch gar nicht so schwer, da das
ganze Ports-Makefile-Geraffel ziemlich behäbig ist; zwi-
schen dem Test und dem Extrakt vergehen Ewigkeiten.
Das Unterjubeln dagegen kann man als atomare Operation
machen (z.B. Link umsetzen, "mv -f" o.ä.), die quasi in
Nullzeit passiert. Um den richtigen Moment abzupassen
braucht man nichtmal ein C-Programm; das geht sogar als
Shell-Skript.

Man sollte berücksichtigen, daß die Prüfsummen ursprüng-
lich nicht als Schutz gegen gezielte Angriffe gedacht wa-
ren, sondern eher zum Feststellen von Download-Fehlern
oder von Fällen, wo die Distfiles von ihren Autoren aktu-
alisiert wurden, ohne daß sich der Dateiname änderte (was
leider gar nicht so selten ist).

> > > Das Ports-Arbeitsverzeichnis muss noch woanders hingelegt werden,
> > das ist > ja nun nicht mehr beschreibbar.
> >
> > Alternativ kann man ein UNIONFS (anstelle von NULLFS) neh-
> > men; dann braucht man das Arbeitsverzeichnis nicht woanders
> > hinzulegen.
>
> habe dazu mal die man-page überflogen, das sieht ja ganz interessant aus.
>
> Wie schauts da mit der Performance aus?

Beim normalen Arbeiten unterscheidet sie sich nicht nen-
nenswert von NULLFS (was ja im grunde genommen nur ein Spe-
zialfall von UNIONFS ist). Es gibt aber Situationen, in
denen ein gewisser Overhead vorkommt, z.B. wenn Verzeich-
nisse transparent angelegt werden müssen (ist aber nicht
so schlimm), oder wenn eine Datei kopiert werden muß, die
nur im unteren FS existierte und die zum Schreiben geöffnet
wurde (aber dies kommt im Falle der Ports-Collection nicht
vor).

> BTW: Du weißt doch sicher wie NULLFS und UNIONFS mit Cache etc umgehen?
> Wird eine Datei nur einmal gecached oder mehrfach?
>
> Ohne es zu wissen, würde ich mal vermuten, dass der Cache auf der
> untersten möglichen Ebene stattfindet?

Der Cache arbeitet nicht mit Dateien im üblichen Sinn, son-
dern mit vnodes. Jedes separate Objekt in einem Dateisystem
stellt einen vnode dar und wird als solcher gecacht. Inso-
fern sind zwei gleichnamige Dateien in den beiden Ebenen
eigenständige Objekte und werden nötigenfalls getrennt von-
einander gecacht.

In der Praxis ist es aber meistens so, daß sich nur eines
der beiden Objekte tatsächlich im Zugriff befindet und
daher gecacht wird. Insbesondere im Falle der Ports-
Collection werden ja kaum Dateien überschrieben: Entweder
sie werden nur gelesen und befinden sich in der unteren
Ebene (die Dateien des Ports-Framworks), oder sie werden
neu angelegt und existieren daher nur in der oberen Ebene
(die Work-Dateien).

Die einzige Situation, wo ein Objekt in beiden Ebenen exi-
stiert, ist, wenn eine Datei aus der unteren Ebene (die ja
read-only ist) zum Schreiben geöffnet wird; es findet dann
so eine Art COW statt (copy-on-write). Im Fall der Ports-
Collection kommt das aber nicht vor.

> > Ich habe ein dediziertes Port-build-jail, in dem ich die
> > Packages baue. Die installiere ich dann in den Ziel-jails
> > mit pkg_add. Vorteil ist, daß jedes Package nur einmal
> > gebaut werden muß und ich nicht den ganzen Ports-Overhead
> > in jedem Jail habe.
>
> Aber dafür kannst Du dann auch nicht zum Beispiel mit Portversion in den
> Jails schauen, was nicht aktuell ist ...

$ portversion
zsh: command not found: portversion
;-)

Ja, ich weiß, daß portversion zum portupgrade-Package ge-
hört. Da ich aber portupgrade sowieso boykottiere, stellt
sich mir die Frage, ob das in Jails funktioniert oder
nicht, ohnehin nicht. Für meine Zwecke hat bisher pkg_info
vollkommen genügt, und das funktioniert auch in den Jails.
Darüberhinaus gibt es auch noch pkg_version, was auch ohne
vollständige Ports-Collection funktioniert (es benötigt nur
die INDEX-Datei).

> In dem Port-build-jail sind dann alle Ports aus allen Jails installiert?

Nein, das kommt drauf an, was ich gerade bauen muß. Für
manche Dinge mache ich das Jail platt (oder lege ein neues
an, was ja ratz-fatz schnell durch Duplizieren geht) und
lasse die Dependencies ihren Job tun.

> Das macht dann aber Probleme, wenn in zwei Jails der gleiche Port mit
> unterschiedlicher Konfig installiert werden sollte ...

Ich versuche, sowas zu vermeiden. Momentan fällt mir auch
spontan kein Fall ein, wo ich denselben Port mit unter-
schiedlichen Build-Konfigurationen benötigt hätte. (Was
natürlich nicht heißen muß, daß sowas nicht vorkommen
kann.)

Gruß
   Olli

-- 
Oliver Fromme,  secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing
Dienstleistungen mit Schwerpunkt FreeBSD: http://www.secnetix.de/bsd
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 suggested holding a "Python Object Oriented Programming Seminar",
but the acronym was unpopular.
        -- Joseph Strout
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 04 May 2006 - 09:11:08 CEST

search this site