Pokroję automounter FreeBSD na małe kawałki i ugotuję je w oleju

40

Próbuję udostępnić hierarchię katalogów domowych niektórym więzieniom FreeBSD. Katalogi domowe są skonfigurowane w taki sposób, że każdy jest unikalnym zestawem danych ZFS. Więzienia są wykorzystywane do prac rozwojowych, a zatem są regularnie tworzone i niszczone.

Moją pierwszą myślą było po prostu użycie nullfs do zamontowania /homew więzieniu, ale nullfs nie zapewnia żadnego dostępu do podległych systemów plików.

Moją drugą myślą było wyeksportowanie katalogów przez NFS, a następnie uruchomienie demona automountera (amd) wewnątrz każdego więzienia. To działałoby po prostu ... gdyby można było wykonać montowanie NFS w więzieniu. Ale nie jest.

Moją trzecią myślą było uruchomienie amd na hoście i zapewnienie zainstalowania nullfs w więzieniu ... ale wsparcie dla nullfs nie istnieje.

Moją czwartą myślą było wrócić do eksportowania katalogów przy użyciu NFS, ponieważ oczywiście czy działa z NFS, prawda? Niestety, zamiast montować katalog na docelowym punkcie montowania, amd lubi montować rzeczy w tymczasowej lokalizacji ( /.amd_mnt/...), a następnie utworzyć dowiązanie symboliczne ... co oczywiście jest bezużyteczne w środowisku więziennym.

Więc może mógłbyś użyć nullfs do ujawnienia podkatalogu /.amd_mntwięzienia? Nie! To sprowadza nas z powrotem do mojej pierwszej próby, w której okazuje się, że nie ma sposobu na dostęp do podrzędnych systemów plików za pomocą nullfs .

I wtedy moja głowa eksplodowała.

Czy istnieje dobre rozwiązanie tego, co próbuję zrobić? Złym rozwiązaniem byłoby uruchomić skrypt po załadowaniu więzienia, które tworzenia wielu nullfs punkty montowania dla każdego katalogu domowym, ale jest to dość niezgrabne - musiałaby być okresowo uruchamiać w celu uwzględnienia nowych katalogów lub usunięty katalogów. Zasadniczo musiałbym napisać zły automounter.

Musi być lepszy sposób. Pomóż mi, błąd serwera, jesteś moją jedyną nadzieją!

AKTUALIZACJA 1 : Przyszło mi do głowy, że mogę być w stanie rozwiązać część problemu pam_mount, chociaż w najlepszym razie byłoby to niepełne. Ponadto z dokumentacji nie wynika jasno, czy pam_mountmożna automatycznie utworzyć docelowy punkt montowania. Jeśli wymaga on, aby punkt montowania istniał a priori, to rozwiązanie nie byłoby lepsze niż zły automounter, który już zaproponowałem.

AKTUALIZACJA 2 : Jak omówiono w odpowiedziach poniżej, ustawienie VFCF_JAILw systemie plików NFS pozwala więziom na wykonywanie podłączeń NFS. Niestety automounter nadal zachowuje się, co jest nieprzydatne, a kiedy działa w więzieniu, wydaje się bardzo dobry w zaklinowaniu się w taki sposób, że konieczne jest ponowne uruchomienie systemu, aby usunąć wpis procesu.

Larsks
źródło
1
A jeśli chcesz przenieść te funkcje do FreeBSD, byłoby to niesamowite. Poważnie, zachowanie standardowego automountera Linux również byłoby do tego idealne, ponieważ faktycznie montuje on systemy plików na docelowym punkcie montowania, zamiast używać dowiązań symbolicznych.
larsks
4
Obwiniam poważny brak czasu. I może trochę brak motywacji ...>.>
Ignacio Vazquez-Abrams,
15
+1 Tylko za niesamowity tytuł. :)
Shauna
4
Martwi mnie, jak konkretna jest twoja szczególna metoda egzekucji
Mark Henderson
2
Oh, @Wilshire, nie jesteś zabawny.
larsks

Odpowiedzi:

26

Cześć, Lars! To fascynujące pytanie, które zadałeś i po kilku badaniach mogłem znaleźć dla ciebie odpowiedź.

Zgodnie z tym i innymi postami istnieje możliwość ustawienia VFCF_JAIL atrybutu na dostawcę systemu plików NFS, co teoretycznie pozwoliłoby więzienom na wykonywanie montowań NFS. To z kolei może pozwolić na ucieczkę do więzienia ... co dobrze rozwiązałoby ten problem.

Spróbuję odbudować jądro tego wieczoru, aby zobaczyć, jak wszystko się ułoży. Niekoniecznie jest to najlepsze rozwiązanie (ponieważ oznacza, że ​​musisz upewnić się, że ta zmiana będzie się utrzymywać w przyszłych aktualizacjach jądra), ale byłoby interesujące, gdyby zadziałało.

I pamiętaj...

           ___________    ____                                           
    ______/   \__//   \__/____\                             
  _/   \_/  :           //____\\                             
 /|      :  :  ..      /        \                         
| |     ::     ::      \        /                             
| |     :|     ||     \ \______/     Don't try to rebuild the
| |     ||     ||      |\  /  |        kernel remotely because
 \|     ||     ||      |   / | \         you know you're just
  |     ||     ||      |  / /_\ \        going to hose the server.
  | ___ || ___ ||      | /  /    \    
   \_-_/  \_-_/ | ____ |/__/      \   
                _\_--_/    \      /   
               /____             /  
              /     \           /    
              \______\_________/     
Larsks
źródło
6
Dzięki, Lars; Chciałbym skorzystać z twojej rady, ponieważ teraz nie mogę uzyskać dostępu do serwera i będę musiał poczekać, aż wrócę do domu, aby to wypróbować.
larsks
10
+1 dla LOL. Rozważ to również jako prawo do przejścia - Wyjazd na serwer w środku nocy, aby uruchomić KERNEL.OLD (lub KERNEL.GENERIC - Na bieżąco aktualizujesz GENERIC w swoich systemach, prawda? Jeśli nie, to ty powinien zacząć.) uczy wielu lekcji ...
voretaq7
Trzymam też pod ręką kopię mfsbsd do uruchamiania z sieci , co uratowało mnie od szeregu problemów związanych z programem ładującym.
larsks
1
Ustawienie VFCF_JAILsprawiło, że montowania NFS działały, ale automounter nadal mnie męczy.
larsks
1
Ech, korzystam z automount do katalogów domowych od ponad dekady w różnych środowiskach i jestem z tego zadowolony. Pamiętaj, że to jest automounter dla Linuksa (i Solaris), a nie amd.
larsks