Re: Alternativen zum NFS-Loopback-Mount in 5.1?

From: Oliver Fromme <olli(at)secnetix.de>
Date: Sat, 26 Jul 2003 14:36:45 +0200 (CEST)

Oskar Eyb <oskar(at)solls.net> wrote:
> nachdem die NFS-Geschichte (bei mir) äußerst unstable läuft (siehe
> Thread "NFS-Probleme?" aber ich Verzichnisse in die Jail hineinmounten möchte
> kommt die Frage nach anderen Möglichkeiten auf.
>
> Die Union-FS / mount - Sache soll man ja auch nicht anfassen.

Du solltest da zwei unterschiedliche Mechanismen nicht
durcheinanderbringen. UNIONFS (also »mount -t union«)
ist in der Tat instabil und sollte unter Produktions-
bedingungen besser nicht verwendet werden (es sei denn,
man weiß genau, was man tut, und was man nicht damit
machen darf).

Das Union-Flag bei normalen Mounts (»mount -o union«)
dagegen funktioniert einwandfrei. Ich verwende es seit
Jahren für diverse Rechner mit Jail-Umgebungen, auch
Shell-Boxen, wo sich beliebige User drin tummeln. Es
gab nie irgendwelche Probleme damit.

Vielleicht sollest Du mal konkret beschreiben, was Du
erreichen möchtest, und aus welchem Grund das Union-Flag
nicht ausreichend für Deine Zwecke ist.

Gruß
   Olli

PS: Ein Beispiel von einem meiner Rechner. Namen wurden
von der Redaktion geändert. ;-)

$ mount
/dev/da0s1a on / (ufs, local, soft-updates)
/dev/da0s1d on /var (ufs, local, nodev, nosuid, soft-updates)
/dev/da0s1e on /jail (ufs, local, nosuid, soft-updates)
/dev/da0s1f on /usr (ufs, NFS exported, local, nodev, soft-updates)
procfs on /proc (procfs, local)
lo:/usr on /jail/chris (nfs, nodev, read-only, union)
procfs on /jail/chris/proc (procfs, local)
lo:/usr on /jail/jens (nfs, nodev, read-only, union)
procfs on /jail/jens/proc (procfs, local)
lo:/usr on /jail/markus (nfs, nodev, read-only, union)
procfs on /jail/markus/proc (procfs, local)
lo:/usr on /jail/olli (nfs, nodev, read-only, union)
procfs on /jail/olli/proc (procfs, local)
lo:/usr on /jail/sascha (nfs, nodev, read-only, union)
procfs on /jail/sascha/proc (procfs, local)
lo:/usr on /jail/sven (nfs, nodev, read-only, union)
procfs on /jail/sven/proc (procfs, local)
lo:/usr on /jail/tom (nfs, nodev, read-only, union)
procfs on /jail/tom/proc (procfs, local)
lo:/usr on /jail/willi (nfs, nodev, read-only, union)
procfs on /jail/willi/proc (procfs, local)

$ cat /etc/exports
/usr -maproot=root:wheel -ro 127.0.0.1

»lo« ist in /etc/hosts als Alias für localhost eingetragen.
Ich bin ja tippfaul, und außerdem möchte ich, daß die Aus-
gabe von »df« in einem 80 Zeichen breiten Terminal nicht
umgebrochen wird. ;-)

/jail/olli sieht z.B. so aus (nur ein Ausschnitt!):

drwxr-xr-x 2 root wheel 7680 May 5 00:18 bin
drwxr-xr-x 3 root wheel 1536 May 4 23:25 dev (*)
drwxr-xr-x 8 root wheel 2048 Jun 13 15:07 etc
drwxr-xr-x 6 olli olli 512 Jun 8 18:50 home (*)
drwxr-xr-x 4 root wheel 512 May 4 23:25 jail (*)
lrwxr-xr-x 1 root wheel 8 May 4 23:25 kernel -> dev/null
drwxr-xr-x 4 root wheel 5120 May 5 00:07 lib
drwxr-xr-x 16 root wheel 512 May 6 12:12 local
dr-xr-xr-x 1 root wheel 512 Jul 26 14:12 proc (*)
drwxr-xr-x 2 root wheel 6144 May 5 00:18 sbin
drwxr-xr-x 27 root wheel 512 May 4 18:12 share
drwxrwxrwt 5 root wheel 512 Jul 14 14:54 tmp (*)
lrwxr-xr-x 1 root wheel 1 May 5 00:15 usr -> .
drwxr-xr-x 4 root wheel 512 May 5 02:22 var

Die mit einem (*) markierten Verzeichnisse liegen »lokal«
direkt in /jail (/dev/da0s1e) und sind daher schreibbar.
Alle anderen kommen aus dem NFS-Union-Mount (/usr) und sind
read-only darübergelegt. Man muß natürlich nicht /usr
dafür nehmen; ich hab's hier nur aus Platzgünden gemacht
(es erfordert auch ein bißchen Pfusch, da man Sachen aus
/bin nach /usr/bin kopieren muß, sonst gibt es sie in den
Jails nicht).

Da etc und var auch shared und read-only gemountet sind,
muß man ein paar Dinge, die veränderlich sein müssen, per
Symlinks in den schreibbaren Teil des Jails verschieben.

/jail/olli/var sieht daher so aus:

drwxr-xr-x 3 root wheel 512 May 5 00:36 db
drwxr-xr-x 2 root wheel 512 May 5 02:22 empty
lrwxr-xr-x 1 root wheel 15 May 5 00:34 log -> ../jail/var/log
lrwxr-xr-x 1 root wheel 16 May 5 00:34 mail -> ../jail/var/mail
lrwxr-xr-x 1 root wheel 15 May 5 00:34 run -> ../jail/var/run
lrwxr-xr-x 1 root wheel 17 May 5 00:34 spool -> ../jail/var/spool
lrwxr-xr-x 1 root wheel 6 May 5 00:34 tmp -> ../tmp

Und umgekehrt kann man aus dem schreibbaren Teil wieder auf
Dinge in den read-ony Share zurücklinken, die in allen
Jails gleich und unveränderbar sind:

/jail/olli/jail/var/run beispielsweise:

lrwxr-xr-x 1 root wheel 14 May 4 23:25 dev.db -> /var/db/dev.db
lrwxr-xr-x 1 root wheel 23 May 4 23:25 ld-elf.so.hints -> /var/db/ld-elf.so

(Die Symlinks sind natürlich relativ zu /jail/olli!)

In /jail/olli/etc befinden sich folgende Symlinks auf den
schreibbaren Teil des Jails:

aliases -> mail/aliases
fstab -> /jail/etc/fstab
group -> /jail/etc/group
master.passwd -> /jail/etc/master.passwd
motd -> /jail/etc/motd
passwd -> /jail/etc/passwd
pwd.db -> /jail/etc/pwd.db
remote -> /jail/etc/remote
skeykeys -> /jail/etc/skeykeys
spwd.db -> /jail/etc/spwd.db
ssh -> /jail/etc/ssh

Alles andere bleibt read-only. Allerdings mußte ich noch
pw_util.c patchen, damit die Jail-User ihre Paßwörter än-
dern können (per Default wird nämlich in /etc eine Tempo-
rärdatei angelegt, was natürlich schiefgeht, wenn /etc
read-only ist). Außerdem habe ich den Patch aus kern/47586
angewandt, damit Jail-User nicht alle Mounts sehen können
(die User kennen sich nicht alle gegenseitig, und es geht
nicht unbedingt jeden etwas an, was es noch alles für Jails
gibt).

Kleines Detail am Rande: Im Jail ist /home das Home-Ver-
zeichnis des Jail-Users. Also nicht /home/olli oder so.
Wozu auch, wenn es in jedem Jail eh nur einen User gibt.

So, das war's. :-)

-- 
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.
"People who claim Windows is superior to Unix are the same people who'd
argue that you better use your hand instead of toilet paper to wipe your
ass. I can hear them now - 'It's colourful and it's intuitive and easy
to use and even a child could do it.'" -- (unknown)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Sat 26 Jul 2003 - 14:36:49 CEST

search this site