Ho intenzione di tagliare a pezzi piccoli l'automounter di FreeBSD e farli bollire in olio


40

Sto cercando di esporre una gerarchia di home directory a un certo numero di jail FreeBSD. Le home directory sono configurate in modo tale che ognuna sia un set di dati ZFS univoco. Le prigioni sono utilizzate per il lavoro di sviluppo e quindi vengono create e distrutte su base regolare.

Il mio primo pensiero è stato semplicemente quello di utilizzare nullfs per montare /homeall'interno della prigione, ma nullfs non fornisce alcun modo per accedere a filesystem subordinati.

Il mio secondo pensiero è stato quello di esportare le directory tramite NFS e quindi eseguire il demone automounter (amd) all'interno di ogni prigione. Questo avrebbe funzionato ... se fosse possibile eseguire montaggi NFS all'interno di una prigione. Ma non lo è.

Il mio terzo pensiero era di eseguire amd sull'host e predisporre montaggi nullfs nelle jail ... ma il supporto amd per nullfs non esiste.

Il mio quarto pensiero era di tornare ad esportare le directory usando NFS, perché ovviamente amd funziona con NFS, giusto? Sfortunatamente, piuttosto che montare una directory sul mountpoint di destinazione, ad amd piace montare le cose in una posizione temporanea ( /.amd_mnt/...) e quindi creare un collegamento simbolico ... che, ovviamente, è inutile all'interno dell'ambiente jail.

Quindi forse potresti usare nullfs per esporre una sottodirectory della /.amd_mntprigione? No! Questo ci riporta al mio primo tentativo, in cui troviamo che non c'è modo di accedere a filesystem subordinati usando nullfs .

E poi la mia testa è esplosa.

C'è una buona soluzione per quello che sto cercando di fare? Una cattiva soluzione sarebbe quella di eseguire uno script dopo l'avvio del jail che creerebbe più mountpoint nullfs per ogni home directory, ma questo è piuttosto ingombrante - dovrebbe essere eseguito periodicamente per tener conto di nuove directory o directory rimosse. Quindi in pratica avrei dovuto scrivere un cattivo automounter.

Deve esserci un modo migliore. Aiutami, Serverfault, sei la mia unica speranza!

AGGIORNAMENTO 1 : Mi è venuto in mente che avrei potuto risolvere una parte del problema pam_mount, sebbene nella migliore delle ipotesi ciò sarebbe incompleto. Inoltre, dalla documentazione non è chiaro se sia pam_mountpossibile creare automaticamente il mountpoint di destinazione. Se richiede che il mountpoint esista a priori, questa soluzione non sarebbe migliore del cattivo automounter che ho già proposto.

AGGIORNAMENTO 2 : Come discusso nelle risposte seguenti, l'impostazione VFCF_JAILsul filesystem NFS consente alle jail di eseguire montaggi NFS. Sfortunatamente, l'automounter continua a comportarsi in modo non utile e quando viene eseguito in una prigione sembra essere molto bravo a essere incastrato in modo tale che è necessario un riavvio del sistema per rimuovere la voce del processo.


1
E se sei disposto a trasferire queste funzionalità su FreeBSD sarebbe fantastico. Seriamente, il comportamento dell'automounter standard di Linux sarebbe perfetto anche per questo, dal momento che monta effettivamente i filesystem sul mountpoint di destinazione, piuttosto che usare i symlink.
Larsks,

4
Incolpo una grave mancanza di tempo. E forse solo un po 'di mancanza di motivazione ...>.>
Ignacio Vazquez-Abrams,

15
+1 Solo per il fantastico titolo. :)
Shauna,

4
Mi interessa quanto sia specifico il tuo particolare metodo di esecuzione
Mark Henderson

2
Oh, @Wilshire, non sei divertente.
Larsks,

Risposte:


26

Ciao ciao Lars! Questa è una domanda affascinante che hai posto e dopo alcune ricerche potrei aver trovato una risposta per te.

Secondo questo e altri post là fuori, potrebbe essere possibile impostare l' VFCF_JAIL attributo sul provider del filesystem NFS, che in teoria consentirebbe alle jail di eseguire montaggi NFS. Questo, a sua volta, può consentire a qualcuno di correre dentro la prigione ... il che risolverebbe perfettamente questo problema.

Proverò a ricostruire il kernel stasera per vedere come vanno le cose. Non è necessariamente la soluzione migliore (dal momento che significa che è necessario assicurarsi che questa modifica persista nei futuri aggiornamenti del kernel), ma sarebbe interessante se funzionasse.

E ricorda...

           ___________    ____                                           
    ______/   \__//   \__/____\                             
  _/   \_/  :           //____\\                             
 /|      :  :  ..      /        \                         
| |     ::     ::      \        /                             
| |     :|     ||     \ \______/     Don't try to rebuild the
| |     ||     ||      |\  /  |        kernel remotely because
 \|     ||     ||      |   / | \         you know you're just
  |     ||     ||      |  / /_\ \        going to hose the server.
  | ___ || ___ ||      | /  /    \    
   \_-_/  \_-_/ | ____ |/__/      \   
                _\_--_/    \      /   
               /____             /  
              /     \           /    
              \______\_________/     

6
Grazie Lars; Vorrei aver seguito il tuo consiglio, perché ora non riesco ad accedere al server e dovrò aspettare fino a casa per provarlo.
Larsks,

10
+1 per i LOL. Considera anche questo un diritto di passaggio - Esci dal tuo server nel cuore della notte per avviare KERNEL.OLD (o KERNEL.GENERIC - Mantieni un GENERICO aggiornato sui tuoi sistemi, giusto? In caso contrario, tu dovrebbe iniziare.) insegna molte lezioni ...
voretaq7,

Tengo a portata di mano anche una copia di mfsbsd avviabile in rete , che mi ha salvato da una serie di problemi relativi al caricatore di avvio.
Larsks,

1
L'impostazione ha VFCF_JAILreso i montaggi NFS funzionanti, ma l'automounter continua a farmi male.
Larsks,

1
Eh, sto usando automount per home directory da oltre un decennio in vari ambienti e ne sono stato contento. Intendiamoci, questo è l'automounter Linux (e Solaris), non amd.
Larsks,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.