GNU/Linux >> Belajar Linux >  >> Debian

Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Debian Lenny

Dokumen ini menjelaskan cara menginstal server Proftpd yang menggunakan pengguna virtual dari database MySQL alih-alih pengguna sistem nyata. Ini jauh lebih berkinerja dan memungkinkan untuk memiliki ribuan pengguna ftp pada satu mesin. Selain itu saya akan menunjukkan penggunaan kuota dengan pengaturan ini.

Untuk administrasi database MySQL Anda dapat menggunakan alat berbasis web seperti phpMyAdmin yang juga akan diinstal di howto ini. phpMyAdmin adalah antarmuka grafis yang nyaman yang berarti Anda tidak perlu dipusingkan dengan baris perintah.

Tutorial ini didasarkan pada Debian Lenny (Debian 5.0). Anda seharusnya sudah menyiapkan sistem dasar Debian Lenny, seperti yang dijelaskan dalam tujuh bab pertama dari tutorial ini:https://www.howtoforge.com/perfect-server-debian-lenny-ispconfig2

Howto ini dimaksudkan sebagai panduan praktis; itu tidak mencakup latar belakang teoretis. Mereka diperlakukan di banyak dokumen lain di web.

Dokumen ini datang tanpa jaminan apapun! Saya ingin mengatakan bahwa ini bukan satu-satunya cara untuk mengatur sistem seperti itu. Ada banyak cara untuk mencapai tujuan ini tetapi ini adalah cara yang saya ambil. Saya tidak memberikan jaminan apa pun bahwa ini akan berhasil untuk Anda!

1 Catatan Awal

Dalam tutorial ini saya menggunakan hostname server1.example.com dengan alamat IP 192.168.0.100. Setelan ini mungkin berbeda untuk Anda, jadi Anda harus menggantinya jika perlu.

2 Instal MySQL Dan phpMyAdmin

Ini semua dapat diinstal dengan satu perintah:

aptitude install mysql-server mysql-client phpmyadmin apache2

Anda akan diminta untuk memberikan kata sandi untuk pengguna root MySQL - kata sandi ini berlaku untuk pengguna [dilindungi email] serta [dilindungi email], jadi kami tidak perlu menentukan kata sandi root MySQL secara manual nanti:

Kata sandi baru untuk pengguna "root" MySQL:<-- yourrootsqlpassword
Ulangi kata sandi untuk pengguna "root" MySQL:<-- yourrootsqlpassword

Selain itu, Anda akan melihat pertanyaan berikut:

Server web untuk mengkonfigurasi ulang secara otomatis:<-- apache2

3 Instal Proftpd Dengan Dukungan MySQL

Untuk Debian tersedia paket proftpd-mysql yang telah dikonfigurasi sebelumnya. Instal sebagai daemon mandiri seperti ini:

aptitude install proftpd-mod-mysql

Anda akan ditanya pertanyaan berikut:

Jalankan proftpd:<-- standalone

Kemudian kami membuat grup ftp (ftpgroup) dan pengguna (ftpuser) tempat semua pengguna virtual kami akan dipetakan. Ganti group- dan userid 2001 dengan nomor yang gratis di sistem Anda:

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

4 Membuat Database MySQL Untuk Proftpd

Sekarang kita membuat database bernama ftp dan pengguna MySQL bernama proftpd yang nantinya akan digunakan daemon proftpd untuk terhubung ke database ftp:

mysql -u root -p
BUAT DATABASE ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* UNTUK 'proftpd'@'localhost' DIIDENTIFIKASI DENGAN 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* UNTUK 'proftpd'@'localhost.localdomain' DIIDENTIFIKASI DENGAN 'sandi';
HAK ISTIMEWA FLUSH;

Ganti kata sandi string dengan kata sandi apa pun yang ingin Anda gunakan untuk proftpd pengguna MySQL. Masih di shell MySQL, kita membuat tabel database yang kita butuhkan:

GUNAKAN ftp;
BUAT TABEL ftpgroup (
nama grup varchar(16) NOT NULL default '',
gid smallint(6) NOT NULL default '5500',
members varchar(16) NOT NULL default '',
KEY groupname (groupname)
) TYPE=MyISAM COMMENT='ProFTP group table';
BUAT TABEL ftpquotalimits (
nama varchar(30) default NULL,
quota_type enum('user','group','class','all') NOT NULL default 'user',
per_session enum('false','true') NOT NULL default 'false',
limit_type enum('soft','hard') NOT NULL default 'soft',
bytes_in_avail bigint( 20) unsigned NOT NULL default '0',
bytes_out_avail bigint(20) unsigned NOT NULL default '0',
bytes_xfer_avail bigint(20) unsigned NOT NULL default '0',
files_in_avail int (10) unsigned NOT NULL default '0',
files_out_avail int(10) unsigned NOT NULL default '0',
files_xfer_avail int(10) unsigned NOT NULL default '0'
) TYPE =MyISAM;
BUAT TABEL ftpquotatallies (
nama varchar(30) NOT NULL default '',
quota_type enum('user','group','class','all') NOT NULL default 'user ',
bytes_in_used bigint(20) unsigned NOT NULL default '0',
bytes_out_used bigint(20) unsigned NOT NULL default '0',
bytes_xfer_used bigint(20) unsigned NOT NULL default ' 0',
files_in_used int(10) unsigned NOT NULL default '0',
files_out_used int(10) unsigned NOT NULL default '0',
files_xfer_used int(10) unsigned NOT NULL default '0'
) TYPE=MyISAM;
CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default '',
passwd varchar(32) NOT NULL default '' ,
uid smallint(6) NOT NULL default '5500',
gid smallint(6) NOT NULL default '5500',
homedir varchar(255) NOT NULL default '',
shell varchar(16) NOT NULL default '/sbin/nologin',
count int(11) NOT NULL default '0',
diakses datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) TYPE=MyISAM COMMENT='ProFTP user table';
berhenti;

Seperti yang mungkin Anda perhatikan, dengan berhenti; perintah kami telah meninggalkan shell MySQL dan kembali ke shell Linux.

BTW, (Saya berasumsi bahwa nama host sistem server ftp Anda adalah server1.example.com), Anda dapat mengakses phpMyAdmin di http://server1.example.com/phpmyadmin/ (Anda dapat menggunakan alamat IP alih-alih server1. example.com) di browser dan masuk sebagai proftpd. Kemudian Anda dapat melihat database. Nanti Anda dapat menggunakan phpMyAdmin untuk mengelola server Proftpd Anda.

5 Konfigurasikan Proftpd

Buka /etc/proftpd/modules.conf...

vi /etc/proftpd/modules.conf

... dan aktifkan tiga modul berikut:

[...]# Instal proftpd-mod-mysql atau proftpd-mod-pgsql untuk menggunakan iniLoadModule mod_sql.c[...]# Instal proftpd-mod-mysql untuk menggunakan thisLoadModule mod_sql_mysql.c[...]# Instal proftpd-mod-pgsql atau proftpd-mod-mysql untuk menggunakan thisLoadModule mod_quotatab_sql.c[...]

Kemudian buka /etc/proftpd/proftpd.conf; komentari bagian kuota dan batalkan komentar pada baris Sertakan /etc/proftpd/sql.conf:

vi /etc/proftpd/proftpd.conf
[...]##QuotaEngine off#[...]## Kerangka kerja otentikasi alternatif# #Sertakan /etc/proftpd/ldap.confInclude /etc/proftpd/sql.conf[...]

Selanjutnya buka /etc/proftpd/sql.conf dan buat seperti berikut:

vi /etc/proftpd/sql.conf
## Contoh konfigurasi Proftpd untuk otentikasi berbasis SQL.## (Ini tidak digunakan jika Anda lebih memilih otentikasi SQL berbasis PAM)# ## Pilih backend SQL di antara MySQL atau PostgreSQL.# Kedua modul dimuat dalam konfigurasi default, jadi Anda harus menentukan backend# atau mengomentari modul yang tidak digunakan di /etc/proftpd/modules.conf. # Gunakan 'mysql' atau 'postgres' sebagai nilai yang memungkinkan.##SQLBackend mysql##SQLEngine on#SQLAuthenticate on## Gunakan kata sandi terenkripsi atau plaintext#SQLAuthTypes Crypt Plaintext## Gunakan kata sandi terenkripsi backend atau terenkripsi#SQLAuthTypes Backend Crypt## Koneksi#SQLConnectInfo [dilindungi email] proftpd_user proftpd_password## Menjelaskan tabel pengguna/grup##pengguna SQLUserInfo userid passwd uid gid homedir shell#SQLGroupInfo groups groupname gid members#DefaultRoot ~SQLBackend mysql# Kata sandi di MySQL dienkripsi menggunakan kata sandi di MySQL CRYPTSQLAuthTypes Plaintext CryptSQLAuthenticate grup pengguna# digunakan untuk terhubung ke database# [dilindungi email] database_user user_passwordSQLConnectInfo [dilindungi email] kata sandi proftpd# Di sini kami memberi tahu ProFTPd nama kolom database di "dapat digunakan"# yang kami inginkan untuk berinteraksi dengannya. Cocokkan nama dengan yang ada di dbSQLUserInfo ftpuser userid passwd uid gid homedir shell# Di sini kita memberi tahu ProFTPd nama kolom database di "grouptable"# yang kita inginkan untuk berinteraksi dengannya. Sekali lagi nama cocok dengan yang ada di dbSQLGroupInfo ftpgroup groupname gid members# set min UID dan GID - jika tidak, ini adalah 999 masing-masingSQLMinID 500# buat direktori home pengguna sesuai permintaan jika tidak adaCreateHome on# Perbarui hitungan setiap kali pengguna masuk SQLLog PASS updatecountSQLNamedQuery updatecount UPDATE "count=count+1, access=now() WHERE userid='%u'" ftpuser# Perbarui dimodifikasi setiap kali pengguna mengunggah atau menghapus fileSQLLog STOR,DELE modifiedSQLNamedQuery modified UPDATE "modified=now() WHERE userid=' %u'" ftpuser# Kuota pengguna# ===========QuotaEngine onQuotaDirectoryTally onQuotaDisplayUnits MbQuotaShowQuotas onSQLNamedQuery get-quota-limit SELECT "nama, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail_availtes, files_avail_availtes, files_avail_availtes_out_file_ files_xfer_avail FROM ftpquotalimits WHERE name ='%{0}' AND quota_type ='%{1}'"SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_ digunakan, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name ='%{0}' AND quota_type ='%{1}'"SQLNamedQuery update-quota-tally UPDATE "bytes_in_used =byte_in_used + %{0}, byte_out_used =byte_out_used + %{1 }, byte_xfer_used =byte_xfer_used + %{2}, files_in_used =files_in_used + %{3}, files_out_used =files_out_used + %{4}, files_xfer_used =files_xfer_used + %{5} WHERE name ='%{6}' AND quota_type =' %{7}'" ftpquotatalliesSQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, % {7}" ftpquotatalliesQuotaLimitTable sql:/get-quota-limitQuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tallyRootLogin offRequireValidShell off

Pastikan Anda mengganti kata sandi string dengan kata sandi asli untuk proftpd pengguna MySQL di baris SQLConnectInfo!

Kemudian restart Proftpd:

/etc/init.d/proftpd mulai ulang

6 Mengisi Database Dan Menguji

Untuk mengisi database Anda dapat menggunakan shell MySQL:

mysql -u root -p
GUNAKAN ftp;

Pertama kita buat entri di tabel ftpgroup. Ini berisi nama grup, grupid, dan nama pengguna grup/pengguna ftp yang kami buat di akhir langkah kedua (ganti ID grup dengan tepat jika Anda menggunakan yang lain selain 2001):

INSERT INTO `ftpgroup` (`groupname`, `gid`, `members`) NILAI ('ftpgroup', 2001, 'ftpuser');

Sekarang kita selesai dengan tabel ftpgroup. Kami tidak perlu membuat entri lebih lanjut di sini. Setiap kali Anda membuat pengguna ftp virtual baru, Anda melakukannya di tabel ftpquotalimits dan ftpuser. Jadi mari kita buat contoh pengguna pertama kita dengan kuota 15MB dan rahasia kata sandi (kita masih di shell MySQL):

INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `file_avail`), VALUE_file `avail_file`, `file_keluar` ('pengguna contoh', 'pengguna', 'benar', 'keras', 15728640, 0, 0, 0, 0, 0);
INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) NILAI (1, 'exampleuser', 'secret', 2001, 2001, '/home/www.example.com', '/sbin/nologin', 0, '', '');
berhenti;

(Jangan lupa untuk mengganti groud- dan userid 2001 dengan tepat di pernyataan INSERT terakhir jika Anda menggunakan nilai selain dalam tutorial ini!)

Sekarang buka program klien FTP Anda di stasiun kerja Anda (seperti WS_FTP atau SmartFTP jika Anda menggunakan sistem Windows atau gFTP di desktop Linux) dan coba sambungkan. Sebagai nama host, Anda menggunakan server1.example.com (atau alamat IP sistem), nama pengguna adalah pengguna contoh, dan kata sandinya rahasia.

Jika Anda dapat terhubung - selamat! Jika tidak, ada yang tidak beres.

Sekarang, jika Anda menjalankan

ls -l /home/

Anda akan melihat bahwa direktori /home/www.example.com (direktori home pengguna example) telah dibuat secara otomatis, dan direktori tersebut dimiliki oleh ftpuser dan ftpgroup (pengguna/grup yang kita buat di akhir langkah kedua):

server1:~# ls -l /home/
total 12
drwxr-xr-x 2 administrator administrator 4096 2009-02-16 13:18 administrator
drwxr-xr-x 2 ftp          nogroup       4096 2009-06-09 17:37 ftp
drwx------ 2 ftpuser      ftpgroup      4096 2009-06-09 17:59 www.example.com
server1:~# /pra>

7 Administrasi Basis Data

Bagi kebanyakan orang akan lebih mudah jika mereka memiliki front-end grafis ke MySQL; oleh karena itu Anda juga dapat menggunakan phpMyAdmin (dalam contoh ini di bawah http://server1.example.com/phpmyadmin/) untuk mengelola database ftp.

Setiap kali Anda membuat pengguna baru, Anda hanya perlu membuat entri di tabel ftpquotalimits dan ftpuser, jadi saya akan menjelaskan kolom tabel ini di sini:

tabel ftpuser:

Kolom penting adalah ini (yang lain ditangani oleh MySQL atau Proftpd secara otomatis, jadi jangan mengisinya secara manual!):

  • userid:Nama pengguna Proftpd virtual (misalnya pengguna contoh).
  • passwd:Kata sandi pengguna yang tidak terenkripsi (yaitu teks yang jelas).
  • uid:Userid dari pengguna ftp yang Anda buat di akhir langkah kedua (mis. 2001).
  • gid:Groupid dari grup ftp yang Anda buat di akhir langkah kedua (mis. 2001).
  • homedir:Direktori home dari pengguna virtual Proftpd (mis. /home/www.example.com). Jika tidak ada, maka akan dibuat saat pengguna baru login pertama kali melalui FTP. Pengguna virtual akan di-jail ke dalam direktori home ini, yaitu, dia tidak dapat mengakses direktori lain di luar direktori home-nya.
  • shell:Tidak apa-apa jika Anda mengisi /sbin/nologin di sini secara default.

Tabel ftpquotalimits:

Kolom penting adalah ini (yang lain ditangani oleh MySQL atau Proftpd secara otomatis, jadi jangan mengisinya secara manual!):

  • nama:Nama pengguna Proftpd virtual (misalnya pengguna contoh).
  • quota_type:pengguna atau grup. Biasanya, kami menggunakan pengguna di sini.
  • per_session:benar atau salah. true artinya batas kuota hanya berlaku untuk satu sesi. Misalnya, jika pengguna memiliki kuota 15 MB, dan dia telah mengunggah 15 MB selama sesi saat ini, maka dia tidak dapat mengunggah apa pun lagi. Tetapi jika dia logout dan masuk lagi, dia kembali memiliki 15 MB yang tersedia. false artinya, pengguna memiliki 15 MB, tidak peduli apakah dia logout dan login lagi.
  • limit_type:keras atau lunak. Batas kuota keras adalah batas yang tidak boleh terlampaui, sedangkan kuota lunak dapat dilampaui untuk sementara. Biasanya Anda menggunakan hard di sini.
  • bytes_in_avail:Batas upload dalam byte (mis. 15728640 untuk 15 MB). 0 berarti tidak terbatas.
  • bytes_out_avail:Batas unduhan dalam byte. 0 berarti tidak terbatas.
  • bytes_xfer_avail:Batas transfer dalam byte. Jumlah unggahan dan unduhan yang boleh dilakukan pengguna. 0 berarti tidak terbatas.
  • files_in_avail:Batas upload dalam file. 0 berarti tidak terbatas.
  • files_out_avail:Batas unduhan dalam file. 0 berarti tidak terbatas.
  • files_xfer_avail:Batas transfer dalam file. 0 berarti tidak terbatas.

Tabel ftpquotatallies digunakan oleh Proftpd secara internal untuk mengelola kuota sehingga Anda tidak perlu membuat entri di sana!

8 FTP Anonim

Jika Anda ingin membuat akun ftp anonim (akun ftp yang dapat digunakan semua orang untuk masuk tanpa kata sandi), Anda dapat melakukannya seperti ini:

Pertama kita buat user dan group dengan nama anonymous_ftp. Pengguna memiliki direktori home /home/anonymous_ftp:

groupadd -g 2002 anonymous_ftp
useradd -u 2002 -s /bin/false -d /home/anonymous_ftp -m -c "Pengguna FTP Anonim" -g anonymous_ftp anonymous_ftp

(Ganti 2002 dengan grup-/userid yang gratis di sistem Anda.)

Kemudian kita buat direktori /home/anonymous_ftp/incoming yang memungkinkan pengguna anonim untuk mengupload file:

mkdir /home/anonymous_ftp/incoming
chown anonymous_ftp:nogroup /home/anonymous_ftp/incoming

Dan terakhir, buka /etc/proftpd/proftpd.conf dan tambahkan arahan berikut ke dalamnya:

vi /etc/proftpd/proftpd.conf
[...]
 Pengguna anonymous_ftp Grup nogroup # Kami ingin klien dapat masuk dengan "anonim" serta " ftp" UserAlias ​​anonymous anonymous_ftp # Perubahan kosmetik, semua file milik pengguna ftp DirFakeUser di anonymous_ftp DirFakeGroup di anonymous_ftp RequireValidShell off # Batasi jumlah maksimum login anonim MaxClients 10 # Kami ingin 'welcome.msg' ditampilkan saat login, dan '.message' ditampilkan # di setiap direktori yang baru di-chdired. DisplayLogin welcome.msg DisplayChdir .message # Batasi MENULIS di mana saja di chroot anonim   DenyAll   # Batalkan komentar ini jika Anda berani.  # Umask 022 adalah umask standar yang baik untuk mencegah file dan direktori baru # (parm kedua) agar tidak dapat ditulis grup dan dunia. Umask 022 022  DenyAll   AllowAll  

Akhirnya restart Proftpd:

/etc/init.d/proftpd mulai ulang

Sekarang pengguna anonim dapat masuk, dan mereka dapat mengunduh file dari /home/anonymous_ftp, tetapi unggahan dibatasi ke /home/anonymous_ftp/incoming (dan setelah file diunggah ke /home/anonymous_ftp/incoming, file tersebut tidak dapat dibaca atau diunduh dari di sana; admin server harus memindahkannya ke /home/anonymous_ftp terlebih dahulu agar tersedia untuk orang lain).

(Harap diperhatikan:Anda hanya dapat memiliki satu akun ftp anonim per alamat IP!)

9 Referensi

Mandrake 10.1 - Proftpd + otentikasi MySQL + Cara Kuota:http://www.khoosys.net/single.htm?ipg=848

  • Proftpd:http://www.proftpd.org
  • MySQL:http://www.mysql.com
  • phpMyAdmin:http://www.phpmyadmin.net
  • Debian:http://www.debian.org

Debian
  1. Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Ubuntu 14.04LTS

  2. Cara mengatur wadah virtual dengan LXC dan dukungan kuota di Debian 8

  3. Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Pada CentOS 7.0

  1. Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Di Ubuntu 7.10 (Gutsy Gibbon)

  2. Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Ubuntu 8.04 LTS

  3. Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Di Ubuntu 8.10 (Intrepid Ibex)

  1. Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Ubuntu 8.10

  2. Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Di Ubuntu 9.04 (Jaunty Jackalope)

  3. Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Di Ubuntu 9.10 (Karmic Koala)