Bagaimana mengatur pengguna virtual untuk vsftpd dengan akses ke sub direktori tertentu?

24

Saya harus dapat menambahkan pengguna virtual ke vsftpd yang hanya memiliki akses ke sub folder. Alasan mengapa saya ingin menggunakan pengguna virtual adalah saya hanya ingin memiliki 1 pengguna nyata di server.

Struktur FTP adalah:

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

Akun utama memiliki akses ke folder www dan semua sub direktori dan saya ingin menambahkan pengguna virtual yang dapat memiliki akses ke sub_folder1 dan hanya sub_folder1

Juga untuk menghindari kebingungan, saya juga akan meminta pengguna lain untuk mengakses sub_folder3 dan hanya sub_folder3 . Maksud saya adalah saya harus dapat memilih folder dan sub folder mana pada pengguna berdasarkan pengguna.

Saya telah menemukan cara untuk menambahkan pengguna untuk melihat seluruh strucutre atau mengatur folder bernama pengguna yang keduanya tidak berguna bagi saya.

Saya menemukan pertanyaan serupa yang diposting di sini:

Cara mengatur VSFTPD untuk banyak pengguna termasuk menambahkan direktori tertentu

tetapi merekomendasikan proftpdyang saya pikir secara umum kurang aman.
Atau apakah saya melewatkan poin di sini?

Avenyet
sumber
Saya punya masalah dengan otentikasi untuk waktu yang lama sampai saya menemukan serverfault.com/questions/450214/... Rupanya PAM memiliki masalah dengan hash MD5. Panduan ini menyelesaikan masalah itu.

Jawaban:

31

Dengan sedikit bermain-main, saya berhasil membuat solusi semi (tidak sempurna tetapi cukup baik)

menggunakan 2707974 jawaban dan informasi yang saya peroleh di mana pun saya bisa mendapatkan apa yang saya butuhkan.

Pertama, Anda perlu vsftp dan PAM diinstal

apt-get install vsftpd libpam-pwdfile

Edit /etc/vsftpd.conf

nano /etc/vsftpd.conf

kemudian rekatkan di bawah ini

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Edit sesuai kebutuhan Anda, bit paling penting bagi pengguna virtual adalah segalanya setelah komentar pengaturan pengguna virtual

Menciptakan Pengguna

Anda dapat menggunakan database atau htpasswdsaya menemukan htpasswdlebih cepat dan lebih mudah digunakan.

buat direktori untuk menyimpan pengguna Anda

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

menambahkan pengguna tambahan cukup hapus -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

Saya hanya berhasil membuatnya bekerja menggunakan CRYPT yang membatasi hingga 8 karakter untuk menggunakan lebih dari 8 karakter menggunakan openssl untuk menghasilkan hash yang kompatibel dan pipa langsung ke htpasswd

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

Setelah pengguna Anda dibuat, Anda sekarang dapat mengubah file konfigurasi PAM Anda

nano /etc/pam.d/vsftpd

dan hapus semua yang ada di dalam file ini dan ganti dengan yang berikut ini

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

Ini akan memungkinkan login untuk pengguna virtual Anda yang ditentukan dalam /etc/vsftpd/ftpd.passwddan akan menonaktifkan pengguna lokal

Selanjutnya kita perlu menambahkan pengguna untuk digunakan pengguna virtual ini. Pengguna ini tidak akan memiliki akses ke shell dan akan dipanggilvsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

pengguna harus cocok guest_username=vsftpddengan file conf vsftpd

Menentukan Akses Direktori

Baris penting di sini adalah sebagai berikut

user_config_dir=/etc/vsftpd_user_conf

ini berarti bahwa ketika user1login akan mencari file berikut

/etc/vsftpd_user_conf/user1

file ini sama dengan vsftpd.confsehingga Anda dapat mendefinisikan yang barulocal_root

kembali ke pertanyaan yang user1hanya ingin kita akses var/www/website_name1/sub_folder1, jadi kita perlu membuat vsftpd_user_conffolder:

mkdir /etc/vsftpd_user_conf

Sekarang buat file pengguna:

nano /etc/vsftpd_user_conf/user1

dan masukkan baris berikut

local_root=/var/www/website_name1/sub_folder1

Sekarang mulai ulang vsftp

service vsftpd restart

Anda sekarang harus dapat login sebagai user1 yang hanya akan dapat melihat var/www/website_name1/sub_folder1dan semua folder dan file di dalamnya.

Itu saja sekarang Anda dapat menambahkan pengguna sebanyak yang Anda inginkan dan membatasi akses mereka ke folder apa pun yang Anda inginkan.

Penting untuk diingat jika Anda tidak membuat file conf pengguna itu akan default ke folder var / www sebagai root (dalam contoh di atas)

Jika subfolder dimaksudkan untuk dimodifikasi oleh pengguna, mungkin perlu mengubah pemilik subfolder bersama:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1
Avenyet
sumber
Ini bekerja dengan beberapa modifikasi: 1) Gunakan path absolut (ganti path mulai dari "var /" dengan "/ var". 2) vsftpd 2.3.5 yang ada di Ubuntu 12.04 tidak mendukung opsi allow_writeable_chroot, Anda dapat menyelesaikannya dengan menginstal patched vsftpd .
gadelat
Halo, dengan kata sandi ssl, apakah kita lagi menghilangkan -c dengan -d atau hanya menghilangkan -c? Juga pada catatan kedua, apakah kita hanya menjalankan kembali kueri untuk mengubah kata sandi? atau apakah ada metode lain. Terima kasih
mdixon18
Mengapa Anda perlu membuat direktori home dengan useradd --home? itu perlu?
e-info128
1
Tambahan: aktifkan koneksi TLS yang aman. digitalocean.com/community/tutorials/…
e-info128
1
apache2-utils mungkin diperlukan untuk beberapa instalasi saya belum memasukkannya dalam jawaban karena tidak relevan untuk semua orang.
Avenyet
12

Coba dengan manual ini. Mungkin akan berhasil untuk Anda.

Bagaimana cara melakukannya

Instal vsftpd dan perpustakaan PAM

Edit /etc/vsftpd.confdan/etc/pam.d/vsftpd

Buat akun pengguna dengan direktori khusus (di / var / www / misalnya)

Atur direktori dengan yang benar chmoddanchown

Buat pengguna admin dengan akses penuh ke server

  1. Instal vsftpd(Deamon FTP Sangat Aman) dan libpam-pwdfileuntuk membuat pengguna virtual

Saya ingin membuat pengguna FTP tetapi saya tidak ingin menambahkan pengguna unix lokal (tidak ada akses shell, tidak ada direktori home dan sebagainya). PAM (Modul Otentikasi Pluggable) akan membantu Anda membuat pengguna virtual.

sudo apt-get install vsftpd libpam-pwdfile

  1. Edit vsftpd.conf

Pertama, Anda perlu membuat cadangan file asli

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Kemudian buat yang baru

sudo vim /etc/vsftpd.conf

Salin dan rekatkan baris berikut. File HANYA harus berisi baris-baris ini:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. Daftarkan pengguna virtual

Untuk mendaftarkan pengguna yang Anda gunakan htpasswd, jadi saya menganggap Anda telah apache2bekerja di server Anda. Buat vsftpdfolder lalu masukkan file konfigurasi ke dalamnya.

sudo mkdir /etc/vsftpd

kemudian

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c berarti bahwa kita akan membuat file jika belum ada -d memaksa MD5, Anda membutuhkannya di ubuntu 12.04, cukup gunakan selalu

Perintah akan meminta kata sandi.

Jika Anda ingin menambahkan pengguna baru setelahnya:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. Konfigurasikan PAM dalam /etc/pam.d/vsftpd

Sekali lagi, Anda perlu mencadangkan file orignal

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

dan buat yang baru

sudo vim /etc/pam.d/vsftpd

Salin dan tempel 2 baris ini (ini harus menjadi satu-satunya konten). Saya bersikeras hanya 2 baris ini, saya membuang banyak waktu menjaga yang asli dan hanya menambahkan ini.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Buat pengguna lokal tanpa akses shell

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Anda dapat memeriksa apakah telah dibuat dengan perintah id: id vsftpd. Kami mendefinisikan pengguna dengan / bin / shell palsu karena parameter check_shell (bahkan jika Anda tidak menggunakannya). Ketika pengguna akhir terhubung ke server FTP, mereka akan digunakan untuk hak dan kepemilikan:

chmoddan chown.

  1. Mengulang kembali vsftpd

Cara yang umum adalah menggunakan init.d seperti semua deamon

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Buat direktori

Menurut konfigurasi, semua pengguna akan ditempatkan ke folder ini: / var / www / user1.

Anda perlu membuatnya dengan hak tertentu: folder root tidak dapat ditulis!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

Catatan: pengguna tidak dapat membuat file atau folder di direktori root.

Di vsftpd.confkita miliki chroot_local_user=YESsehingga pengguna tidak dapat melihat apa pun di luar foldernya. Baginya, server terlihat seperti ini:

Jadi jalankan saja perintah-perintah ini:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

The /var/www/user1folder TELAH ada atau koneksi akan gagal.

Saat ini Anda dapat mencoba terhubung dengan FTP Anda

  1. Buat pengguna Admin untuk mengakses seluruh server

Untuk membuat pengguna admin, kami harus mendaftarkan pengguna baru htpasswd.

Sebelum kita melakukannya, saya akan menyarankan Anda untuk memeriksa /etc/ftpusersfile yang menentukan pengguna tertentu yang tidak diizinkan untuk terhubung dengan ftp. Saya pikir ini hanya untuk pengguna lokal dan bukan pengguna virtual tetapi kalau-kalau jangan memilih nama yang terkandung dalam file ini.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

Sekarang kita perlu menambahkan baris baru ke /etc/vsftpd.conf

chroot_list_enable=YES

Ini berarti bahwa pengguna Anda akan ditempatkan ke dalam folder mereka (sebagai penjara) KECUALI pengguna di / etc /

vsftpd.chroot_list

Mari kita buat file ini dan tambahkan pengguna kita, file tersebut adalah garis sederhana yang mengandung "theadmin". Tambahkan satu pengguna per baris. Itu berarti Anda TIDAK perlu membuat /var/www/theadminfolder, pengguna akan masuk dan mulai masuk /home/vsftpd.

Mulai ulang server dan selesai!

2707974
sumber
Sudah mencoba ini karena sangat tidak fleksibel karena memberlakukan local_root = / var / www / $ USER. Itu tidak memungkinkan saya untuk menentukan direktori tunggal untuk pengguna atau pengguna. direktori ini biasanya memiliki tujuan dan lokasi yang berbeda tergantung pada klien. Terima kasih atas tanggapannya.
Avenyet
0

ya Anda bisa, dan untuk fleksibilitas buat direktori dan file userconfig, mkdir /var/www/userconfsatau apa pun yang Anda ingin ubah nama userconf, kemudian buat file tertentu

vi /var/www/userconfigs/ftpuseraccount

tipe dalam, local_root=/var/www(atau apa pun yang ingin Anda akses dengan dir) guest_username=www-data(pemilik ubuntu dari edit teratas file

setelah memperbarui Anda vsftpd.conf dengan menambahkan user_config_dir=/var/www/userconfigs(atau apa pun yang Anda ganti, akun ini akan mengakses apa pun yang ditentukan sdir Anda)

Agunbiade Bolaji
sumber