vsftpd - PAM - MySQL dan pam_mkhomedir untuk membuat direktori

11

Saya telah berhasil menggunakan vsftpd dengan pengguna virtual yang terhubung dengan PAM ke DB mysql saya. Sekarang saya ingin mengotomatisasi pembuatan direktori pengguna dengan koneksi vsftpd yang berhasil.

Berikut ini konfigurasi /etc/pam.d/vsftpd:

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
account required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
session required pam_mkhomedir.so skel=/home/skel/ umask=0022 debug

Menambahkan pam_mkhomedir sekarang hanya menunjukkan itu tidak dapat membuat direktori tanpa pesan lain di log apa pun. Jadi itu jelas tidak berlaku. Apakah ada hal lain yang saya butuhkan?

/Etc/vsftpd/vsftpd.conf saya:

# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=YES

# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=vsftpd
chroot_local_user=YES
listen=YES

# here we use the authentication module for vsftpd to check users name and passw
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=YES
# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
download_enable=NO

force_local_data_ssl=NO
force_local_logins_ssl=NO

# PASV - passive ports for FTP 
pasv_enable=YES
pasv_min_port=14000
pasv_max_port=14100

Saya melihat posting yang mengatakan saya perlu ini di vsftpd.conf saya jadi saya mencoba ini juga:

session_support=YES

Tapi sekarang tampaknya tidak mengautentikasi lagi seperti yang ditunjukkan oleh log:

Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_keyinit(vsftpd:session): Unable to look up user "user1"
Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_mkhomedir(vsftpd:session): User unknown.

Ini bahkan jika saya sudah membuat direktori. Sekarang tidak ada yang bisa masuk.

Ada ide?

Tom
sumber
Hai, apakah Anda pernah bisa menyelesaikan masalah ini?
George
@ George Tidak sama sekali.
Tom
Saya menyelesaikan masalah dengan cara yang sangat berbeda, saya pindah dari vsftpd dan pergi dengan pureftp. Setup dan berjalan dalam beberapa jam tanpa semua masalah ini. Bekerja dengan sempurna.
George
apakah / home / vsftpd dimiliki oleh vsftpd?
Luca Gibelli

Jawaban:

0

Agar pencarian pengguna dengan modul PAM berhasil, Anda harus mengaktifkan modul NSS untuk MySQL di nsswitch.conf(5). nss_mysqladalah temanmu

Ashish SHUKLA
sumber
Adakah referensi yang bisa Anda berikan tentang ini? Sepertinya saya tidak dapat menemukan apa pun tentang kebutuhan nss-mysqldalam konteks saya?
Tom
Bagaimana pam_mkhomedircara mencari tahu jalur ke direktori home dari pengguna yang seharusnya dibuat? Bagaimana cara mengetahui basis data yang digunakan untuk menyelesaikan pengguna? NSS menyediakannya dengan informasi itu. Dalam kasus Anda, Anda membutuhkan nss_mysql , dengan asumsi database pengguna Anda disimpan dalam database MySQL.
Ashish SHUKLA
Saya hanya mencoba mencari tahu tentang perpustakaan ini. Tautan yang Anda berikan adalah proyek yang sangat lama tanpa dokumentasi. Jika saya menginstalnya, ini tidak memberikan indikasi apa yang harus dimasukkan ke nssswitch.conf Anda. Hanya itu yang mungkin mengandung 3 parameter. Bisakah Anda memberikan panduan? Kedengarannya seperti pam_mysql adalah hal yang sama dengan nss-mysql? Saya punya pam_mysql yang berfungsi di mana ia menggunakan mysql db untuk mengotentikasi dengan pengguna virtual vsftpd.
Tom
PAM tidak sama dengan NSS . PAM ditargetkan untuk otentikasi, sedangkan tujuan NSS adalah untuk menyelesaikan nama (nama host, nama pengguna, dll.). Sebagian besar distro menyediakan paket untuk nss_mysql, mis. Debian dan turunannya menyediakannya libnss-mysql. Dan, ya itu tidak diperbarui selama setengah dekade, tetapi berfungsi dengan baik. Setelah Anda menginstal modul, konfigurasikan, dan tambahkan ke Anda nsswitch.conf(5), hal-hal akan mulai bekerja untuk Anda.
Ashish SHUKLA
Saya menambahkan libnss-mysql dari distro saya. Mencoba keluar dari kotak dan tidak ada yang berfungsi. Adakah ide tentang apa yang perlu saya ubah di nsswitch.conf?
Tom
0

Anda dapat mencoba menggunakan pam_script- modul pam yang memungkinkan mengeksekusi skrip shell sewenang-wenang setelah sesi pengguna dibuka (antara lain).

Anda dapat menemukannya di pam_scriptsini: https://github.com/jeroennijhof/pam_script . Itu juga harus diinstal melalui manajer paket, setidaknya saya sudah bisa menginstalnya melalui apt-get.

Hati-hati, karena vsftpd tampaknya memiliki beberapa masalah dengan pam_script setidaknya ketika ia menolak otentikasi, lihat pertanyaan saya yang belum terselesaikan: vsftpd membeku setelah otentikasi pam_script gagal . Namun dalam kasus Anda itu seharusnya tidak menjadi masalah.

edziubudzik
sumber
0

Jawaban singkatnya adalah Anda sedang mencampur kredensial sistem dan layanan, dan seharusnya (tidak?) Menggunakan pam_mkhomedir dengan pengguna virtual di vsftpd.

pam_mkhomedir adalah untuk pembuatan direktori lokal pengguna dan mengasumsikan pengguna didefinisikan dalam sistem. Pengguna virtual di vsftpd bukan pengguna sistem (berdasarkan desain) dan karena itu tidak memiliki hak di luar layanan vsftpd (sistem tidak memiliki pengetahuan tentang pengguna tersebut). Menggunakan PAM untuk autentikasi hanya memberikan validasi kredensial pengguna (nama pengguna + kata sandi ==> OK). Ini bisa membingungkan ketika menggunakan pengguna virtual, karena vsftpd juga dapat dikonfigurasi untuk menggunakan pengguna sistem dengan PAM.

Ketika Anda membuat direktori home untuk pengguna virtual , Anda harus membuat akun layanan vsftpd / grup pemilik folder, dan menempatkan "direktori home virtual" di dalam jalur layanan vsftpd, dengan izin yang sesuai untuk layanan vsftpd. Saya tidak yakin masalah apa yang Anda coba selesaikan, tetapi saat Anda chroot-ing sesi pengguna, saya berasumsi Anda mencoba untuk membuat beberapa isolasi antara pengguna. Karena Anda harus membuat pengguna virtual di basis data pengguna Anda agar mereka bisa masuk, mengapa tidak membuat direktori home pada saat yang sama? Saya telah melakukan ini dengan menggunakan skrip untuk pengguna tambah / ubah / hapus agar database pengguna virtual dan folder home virtual pengguna vsftpd konsisten. YMMV.

Ingat saja, dengan pengguna virtual, Anda hanya bekerja di dalam vsftpd, dan bukan sistem.

Yaro
sumber