Saya akan memotong automounter FreeBSD menjadi potongan-potongan kecil dan merebusnya dalam minyak

40

Saya mencoba mengekspos hierarki direktori home ke sejumlah penjara FreeBSD. Direktori home dikonfigurasikan sedemikian rupa sehingga masing-masing merupakan dataset ZFS yang unik. Penjara digunakan untuk pekerjaan pengembangan dan karenanya dibuat dan dihancurkan secara teratur.

Pikiran pertama saya hanyalah menggunakan nullfs untuk dipasang /homedi dalam jail, tetapi nullfs tidak menyediakan cara apa pun untuk mengakses sistem file bawahan.

Pikiran kedua saya adalah mengekspor direktori melalui NFS dan kemudian menjalankan daemon automounter (amd) di dalam setiap penjara. Ini hanya akan berfungsi ... jika mungkin untuk melakukan mount NFS di dalam penjara. Tapi ternyata tidak.

Pikiran ketiga saya adalah menjalankan amd di host dan ketentuan nullfs mount ke penjara ... tetapi dukungan amd untuk nullfs tidak ada.

Pikiran keempat saya adalah kembali mengekspor direktori menggunakan NFS, karena tentu saja amd bekerja dengan NFS, kan? Sayangnya, daripada memasang direktori pada target mountpoint, amd suka me-mount sesuatu di lokasi sementara ( /.amd_mnt/...) dan kemudian membuat symlink ... yang, tentu saja, tidak berguna di dalam lingkungan penjara.

Jadi mungkin Anda bisa menggunakan nullfs untuk mengekspos subdirektori /.amd_mntke penjara? Tidak! Ini membawa kita kembali ke upaya pertama saya, di mana kami menemukan bahwa tidak ada cara untuk mengakses sistem file bawahan menggunakan nullfs .

Dan kemudian kepala saya meledak.

Apakah ada solusi yang baik untuk apa yang saya coba lakukan? Sebuah buruk solusi akan menjalankan script setelah boot penjara yang akan membuat beberapa nullfs mountpoints untuk setiap direktori rumah, tapi ini cukup kikuk - itu akan perlu dijalankan secara berkala untuk memperhitungkan direktori baru atau direktori dihapus. Jadi pada dasarnya saya harus menulis automounter yang buruk.

Pasti ada cara yang lebih baik. Bantu aku, Serverfault, kau satu-satunya harapanku!

UPDATE 1 : Terpikir oleh saya bahwa saya mungkin dapat menyelesaikan sebagian dari masalah dengan pam_mount, meskipun ini paling tidak akan lengkap. Juga, tidak jelas dari dokumentasi apakah pam_mountdapat secara otomatis membuat target mountpoint atau tidak . Jika memerlukan mountpoint untuk menjadi apriori, solusi ini tidak akan lebih baik daripada automounter buruk yang telah saya usulkan.

UPDATE 2 : Seperti dibahas dalam jawaban di bawah ini, pengaturan VFCF_JAILpada sistem file NFS memang memungkinkan penjara untuk melakukan mount NFS. Sayangnya, automounter terus berperilaku yang tidak membantu, dan ketika dijalankan di penjara tampaknya sangat baik dalam mendapatkan terjepit sedemikian rupa sehingga sistem reboot diperlukan untuk menghapus entri proses.

larsks
sumber
1
Dan jika Anda bersedia untuk port fitur-fitur tersebut ke FreeBSD itu akan luar biasa. Serius, perilaku automounter Linux standar akan sempurna untuk ini, juga, karena sebenarnya mount sistem file pada target mountpoint, daripada menggunakan symlink.
larsks
4
Saya menyalahkan kurangnya waktu. Dan mungkin hanya sedikit kekurangan motivasi ...>.>
Ignacio Vazquez-Abrams
15
+1 Semata-mata untuk judul yang luar biasa. :)
Shauna
4
Ini menyangkut saya seberapa spesifik metode eksekusi khusus Anda
Mark Henderson
2
Oh, @Wilshire, kamu tidak asyik.
larsks

Jawaban:

26

Kenapa, halo di sana Lars! Itu pertanyaan menarik yang Anda ajukan, dan setelah beberapa penelitian saya mungkin menemukan jawaban untuk Anda.

Menurut posting ini dan lainnya di luar sana, dimungkinkan untuk mengatur VFCF_JAIL atribut pada penyedia sistem file NFS, yang secara teori memungkinkan penjara untuk melakukan mount NFS. Hal ini, pada gilirannya, memungkinkan seseorang untuk menjalankan amd di dalam penjara ... yang akan menyelesaikan masalah ini dengan rapi.

Saya akan mencoba membangun kembali kernel malam ini untuk melihat bagaimana semuanya berjalan. Ini belum tentu solusi terbaik (karena itu berarti Anda harus memastikan perubahan ini tetap ada di seluruh pembaruan kernel di masa depan), tetapi akan menarik jika berhasil.

Dan ingatlah...

           ___________    ____                                           
    ______/   \__//   \__/____\                             
  _/   \_/  :           //____\\                             
 /|      :  :  ..      /        \                         
| |     ::     ::      \        /                             
| |     :|     ||     \ \______/     Don't try to rebuild the
| |     ||     ||      |\  /  |        kernel remotely because
 \|     ||     ||      |   / | \         you know you're just
  |     ||     ||      |  / /_\ \        going to hose the server.
  | ___ || ___ ||      | /  /    \    
   \_-_/  \_-_/ | ____ |/__/      \   
                _\_--_/    \      /   
               /____             /  
              /     \           /    
              \______\_________/     
larsks
sumber
6
Terima kasih, Lars; Saya berharap saya telah mengambil saran Anda, karena sekarang saya tidak dapat mengakses server dan saya harus menunggu sampai saya pulang untuk mencoba ini.
larsks
10
+1 untuk LOL. Juga pertimbangkan ini hak lintas - Mengemudi ke server Anda di tengah malam untuk mem-boot KERNEL.OLD (atau KERNEL.GENERIC - Anda menyimpan GENERIC terbaru pada sistem Anda, bukan? Jika tidak, Anda harus dimulai.) mengajarkan banyak pelajaran ...
voretaq7
Saya juga menyimpan salinan mfsbsd dari net-bootable , yang telah menyelamatkan saya dari sejumlah masalah terkait boot-loader.
larsks
1
Pengaturan VFCF_JAILmembuat NFS mount berfungsi, tetapi automounter terus mengganggu saya.
larsks
1
Eh, saya sudah menggunakan automount untuk direktori home lebih dari satu dekade di berbagai lingkungan dan saya senang dengan itu. Pikiran Anda, ini adalah automounter Linux (dan Solaris), bukan amd.
larsks