PAM: Jalankan perintah sebelum pam_mkhomedir?

8

Ketika pengguna masuk ke sistem dan tidak ada direktori home, kami ingin membuat direktori home pengguna menggunakan pam_mkhomedir . Ini adalah praktik umum. Berikut deskripsi singkat tentang pam_mkhomedir:

Modul PAM pam_mkhomedir akan membuat direktori home pengguna jika tidak ada saat sesi dimulai. Ini memungkinkan pengguna untuk hadir dalam basis data pusat (seperti NIS, kerberos atau LDAP) tanpa menggunakan sistem file terdistribusi atau pra-membuat banyak direktori. Direktori kerangka (biasanya / etc / skel /) digunakan untuk menyalin file default dan juga menetapkan umask untuk pembuatannya.

Namun, ini adalah sistem FreeBSD 8.2 yang menjalankan ZFS. Kita perlu menjalankan perintah ZFS terlebih dahulu, karena kita menginginkan satu sistem file ZFS per pengguna . pam_mkhomedirdapat melakukan mkdir, tetapi kita perlu melakukan sesuatu seperti zfs create /zpool/home/$USER.

Adakah yang tahu apakah mungkin menggunakan PAM untuk menjalankan perintah selama sesi login pertama pengguna?

Stefan Lasiewski
sumber
Saya mengganti tautan solarisinternals.com dengan versi yang diarsipkan dari archive.org, karena yang pertama ditempati oleh penghuni liar domain. Terima kasih kepada @Norman Grey karena menunjukkannya.
Stefan Lasiewski

Jawaban:

9

Ada modul PAM yang disebut pam_exec- jika Anda menulis skrip yang memeriksa dan / atau membuat volume ZFS, Anda dapat rantai ini ke aturan PAM yang ada dan menjaga hal-hal baik tanpa mengasumsikan login interaktif, kerang default & direktori kerangka, dll. Untuk Misalnya, Anda bisa

session required pam_unix.so
session required pam_exec.so check_zfs.sh $PAM_USER

atau apa pun yang sesuai dengan pengaturan spesifik Anda.

(Seperti yang ditunjukkan Tom Shaw dalam komentar, memiliki session required pam_mkhomedir.soakan berlebihan.)

Andrew
sumber
Bagus kecuali Anda memiliki salah ketik di baris pam_mkhomedir.so - kesalahan ketik di pam.conf tidak baik! - dan saya tidak berpikir bahwa baris itu diperlukan juga jika skrip check_zfs.sh melakukan semua pekerjaan kotor.
Tom Shaw
@ Tom Mengapa menemukan kembali roda ketika modul PAM melakukannya untuk Anda?
Andrew
2
Inti dari pertanyaannya adalah dia ingin direktori home dibuat dengan "zfs create" daripada "mkdir". Ini dilakukan dengan menggunakan pam_exec. Direktori ada pada titik ini sehingga pam_mkhomedir selanjutnya tidak akan melakukan apa-apa!
Tom Shaw
@ TomShaw memang.
Andrew
3

Layak untuk ditunjukkan, seperti yang ditanyakan, pertanyaan Anda mengandung asumsi yang tidak valid: bahkan PAM tidak tahu apakah itu login pertama pengguna; hanya tahu apakah pengguna memiliki direktori home atau tidak.

Jadi, dengan peringatan itu dalam pikiran, itu bukan PAM yang melakukannya, tetapi Anda dapat dengan mudah menjalankan sesuatu /etc/bashrc, dengan perintah didahului dengan cek untuk, dan diikuti oleh setetes, sebuah dotfile di direktori home pengguna. Perlu root privs? Entah yang dikunci dengan tepat sudo, atau biner setuid, mungkin akan bekerja paling baik untuk Anda. Kedua opsi juga memberi Anda opsi untuk meletakkan dotfile di suatu tempat di mana pengguna tidak dapat memodifikasi atau menghapusnya (jika Anda peduli tentang hal semacam itu).

BMDan
sumber
Saya bingung. Bukankah pam_mkhomedir membuat direktori home ini, menyalin isi / etc / skel, dll? Saya melirik kode C (On FreeBSD), dan saya pikir saya bisa melihat di mana ia menyalin file kerangka ke homedir yang baru dibuat.
Stefan Lasiewski
Hanya karena pengguna tidak memiliki direktori home tidak berarti mereka belum masuk ke sistem itu sebelumnya. Direktori rumah bisa saja dihapus misalnya. Namun ini sebagian besar rambut semantik dan membelah.
Red Tux
@ red: Dipahami. Saya memperbarui pertanyaan saya.
Stefan Lasiewski
1

Jadi Anda punya dua pilihan di sini:

1) memodifikasi sumber untuk pam_mkhomedir untuk membuat sistem file zfs terlebih dahulu sebelum membuat direktori. 2) biarkan pam_mkhomedir berjalan seperti biasanya, kemudian tambahkan skrip untuk memeriksa dan melihat ketika ada folder tidak pada sistem file zfs mereka sendiri di mana pengguna telah logout. Ketika Anda menangkap kasus-kasus itu, pindahkan direktori / home, buat sistem file, lalu pindahkan file kembali ke direktori.

Saya menduga meninggalkan pengguna di main / home untuk hari pertama tidak akan menyebabkan terlalu banyak masalah, jadi saya akan memilih opsi yang terakhir, lebih sederhana.

n8whnp
sumber