Tutorial ini ada untuk versi OS ini
- CentOS 7.2
- CentOS 7
- CentOS 6.5
- CentOS 6.4
- CentOS 6.2
- CentOS 5.3
Di halaman ini
- 1 Catatan Pendahuluan
- 2 Instal MySQL Dan phpMyAdmin
- 3 Instal PureFTPd Dengan Dukungan MySQL
- 4 Membuat Database MySQL Untuk PureFTPd
- 5 Konfigurasi PureFTPd
- 6 Isi Basis Data Dan Uji
- 7 Administrasi Basis Data
- Tabel ftpd:
Dokumen ini menjelaskan cara menginstal server PureFTPd yang menggunakan pengguna virtual dari database MySQL alih-alih pengguna sistem nyata. Ini jauh lebih berkinerja dan memungkinkan untuk memiliki ribuan pengguna FTP di satu mesin. Selain itu, saya akan menunjukkan penggunaan kuota dan batas bandwidth upload/download dengan pengaturan ini. Kata sandi akan disimpan terenkripsi sebagai string MD5 dalam database.
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 CentOS 7.0. Anda seharusnya sudah menyiapkan sistem CentOS 7 minimal dasar.
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.
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
Pertama, kami mengaktifkan repositori EPEL pada sistem CentOS kami karena beberapa paket yang akan kami instal selama tutorial ini tidak tersedia di repositori resmi CentOS 7.0:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
Kemudian kami mengaktifkan repositori EPEL pada sistem CentOS kami karena banyak paket yang akan kami instal selama tutorial ini tidak tersedia di repositori resmi CentOS 7:
yum -y install epel-release
yum -y install yum-priorities
Edit /etc/yum.repos.d/epel.repo...
nano /etc/yum.repos.d/epel.repo
... dan tambahkan baris priority=10 ke bagian [epel]:
[epel] name=Extra Packages for Enterprise Linux 7 - $basearch #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch failovermethod=priority enabled=1 priority=10 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [...]
Kemudian kami memperbarui paket kami yang ada di sistem:
yum update
Sekarang kita dapat menginstal MySQL dan phpMyAdmin sebagai berikut:
yum install mariadb mariadb-server phpmyadmin httpd php
Sekarang kita mengkonfigurasi phpMyAdmin. Kami mengubah konfigurasi Apache sehingga phpMyAdmin mengizinkan koneksi tidak hanya dari localhost (dengan mengomentari semua yang ada di bait
vi /etc/httpd/conf.d/phpMyAdmin.conf
sehingga filenya seperti ini:
# phpMyAdmin - Web based MySQL browser written in php # # Allows only localhost by default # # But allowing phpMyAdmin to anyone other than localhost should be considered # dangerous unless properly secured by SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin <Directory /usr/share/phpMyAdmin/> # <IfModule mod_authz_core.c> # # Apache 2.4 # <RequireAny> # Require ip 127.0.0.1 # Require ip ::1 # </RequireAny> # </IfModule> # <IfModule !mod_authz_core.c> # # Apache 2.2 # Order Deny,Allow # # Deny from All # Allow from 127.0.0.1 Options Indexes AllowOverride None Require all granted # Allow from ::1 # </IfModule> </Directory> <Directory /usr/share/phpMyAdmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require ip 127.0.0.1 Require ip ::1 </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> # These directories do not require access over HTTP - taken from the original # phpMyAdmin upstream tarball # <Directory /usr/share/phpMyAdmin/libraries/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/lib/> Order Deny,Allow Deny from All Allow from None </Directory> <Directory /usr/share/phpMyAdmin/setup/frames/> Order Deny,Allow Deny from All Allow from None </Directory> # This configuration prevents mod_security at phpMyAdmin directories from # filtering SQL etc. This may break your mod_security implementation. # #<IfModule mod_security.c> # <Directory /usr/share/phpMyAdmin/> # SecRuleInheritance Off # </Directory> #</IfModule>
Kemudian kami membuat tautan startup sistem untuk MySQL dan Apache (sehingga keduanya mulai secara otomatis setiap kali sistem boot) dan memulai kedua layanan. Selain itu, kedua layanan harus diizinkan oleh firewall:
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
systemctl enable mariadb.service
systemctl start mariadb.service
systemctl enable httpd.service
systemctl start httpd.service
Buat kata sandi untuk root pengguna MySQL (ganti kata sandi mariadb Anda dengan kata sandi yang ingin Anda gunakan):
mysql_secure_installation
[[email protected] ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation:line 379:find_mysql_client:command not found
CATATAN:MENJALANKAN SEMUA BAGIAN SKRIP INI DIREKOMENDASIKAN UNTUK SEMUA MariaDB
SERVER YANG DIGUNAKAN PRODUKSI! HARAP BACA SETIAP LANGKAH DENGAN SEKSAMA!
Untuk masuk ke MariaDB untuk mengamankannya, kita memerlukan
sandi saat ini untuk pengguna root. Jika Anda baru saja menginstal MariaDB, dan
Anda belum menyetel kata sandi root, kata sandi akan kosong,
jadi Anda cukup menekan enter di sini.<--ENTER
Masukkan kata sandi saat ini untuk root (masukkan jika tidak ada):<--ENTER
Oke, kata sandi berhasil digunakan, lanjutkan...
Menyetel kata sandi root memastikan bahwa tidak ada yang bisa masuk ke MariaDB
pengguna root tanpa otorisasi yang tepat.
Tetapkan kata sandi root? [Y/n]<--ENTER
Sandi baru:<--yourmariadbpassword
Masukkan kembali sandi baru:<--yourmariadbpassword
Sandi berhasil diperbarui!
Memuat ulang tabel hak istimewa..
... Berhasil!
Secara default, penginstalan MariaDB memiliki pengguna anonim, memungkinkan siapa saja
untuk masuk ke MariaDB tanpa harus membuat akun pengguna untuk
mereka. Ini dimaksudkan hanya untuk pengujian, dan untuk membuat penginstalan
berjalan sedikit lebih lancar. Anda harus menghapusnya sebelum pindah ke
lingkungan produksi.
Hapus pengguna anonim? [Y/n]<--ENTER
... Berhasil!
Biasanya, root hanya boleh terhubung dari 'localhost'. Ini
memastikan bahwa seseorang tidak dapat menebak kata sandi root dari jaringan.
Larang login root dari jarak jauh? [Y/n]<--ENTER
... Sukses!
Secara default, MariaDB hadir dengan database bernama 'test' yang dapat
akses siapa saja. Ini juga dimaksudkan hanya untuk pengujian, dan harus dihapus
sebelum pindah ke lingkungan produksi.
Hapus database pengujian dan akses ke sana? [Y/n]<--ENTER
- Menghapus database pengujian...
... Berhasil!
- Menghapus hak istimewa pada database pengujian...
... Berhasil!
Memuat ulang tabel hak istimewa akan memastikan bahwa semua perubahan yang dibuat sejauh ini
akan segera berlaku.
Muat ulang tabel hak istimewa sekarang? [Y/n]<--ENTER
... Sukses!
Bersihkan...
Selesai! Jika Anda telah menyelesaikan semua langkah di atas, penginstalan MariaDB
Anda seharusnya sudah aman.
Terima kasih telah menggunakan MariaDB!
[[email protected] ~]#
3 Instal PureFTPd Dengan Dukungan MySQL
Paket CentOS PureFTPd mendukung berbagai backend, seperti MySQL, PostgreSQL, LDAP, dll. Oleh karena itu, yang harus kita lakukan hanyalah menginstal paket PureFTPd normal:
yum install pure-ftpd
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 "pureftpd user" -g ftpgroup ftpuser
Layanan ftp harus diizinkan oleh firewall-cmd sebagai berikut:
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
4 Buat Database MySQL Untuk PureFTPd
Sekarang kita membuat database bernama pureftpd dan pengguna MySQL bernama pureftpd yang nantinya akan digunakan daemon PureFTPd untuk terhubung ke database pureftpd:
mysql -u root -p
CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
FLUSH PRIVILEGES;
Ganti string ftpdpass dengan kata sandi apa pun yang ingin Anda gunakan untuk pureftpd pengguna MySQL. Masih di shell MySQL, kita membuat tabel database yang kita butuhkan (ya, hanya ada satu tabel!):
USE pureftpd;
CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE=MyISAM;
quit;
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 juga dapat menggunakan alamat IP alih-alih server1 .example.com) di browser dan masuk sebagai pengguna pureftpd. Kemudian Anda dapat melihat database. Nanti Anda dapat menggunakan phpMyAdmin untuk mengelola server PureFTPd Anda.
5 Konfigurasi PureFTPd
Edit /etc/pure-ftpd/pure-ftpd.conf dan pastikan bahwa baris ChrootEveryone, MySQLConfigFile, dan CreateHomeDir diaktifkan dan terlihat seperti ini:
vi /etc/pure-ftpd/pure-ftpd.conf
[...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...]
Pengaturan ChrootEveryone akan membuat PureFTPd chroot setiap pengguna virtual di direktori home-nya sehingga dia tidak akan dapat menelusuri direktori dan file di luar direktori home-nya. Baris CreateHomeDir akan membuat PureFTPd membuat direktori home pengguna ketika pengguna login dan direktori home belum ada.
Kemudian kita edit /etc/pure-ftpd/pureftpd-mysql.conf. Seharusnya terlihat seperti ini:
cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf
vi /etc/pure-ftpd/pureftpd-mysql.conf
MYSQLSocket /var/lib/mysql/mysql.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
Pastikan Anda mengganti string ftpdpass dengan kata sandi asli untuk pureftpd pengguna MySQL di baris MYSQLPassword! Harap dicatat bahwa kami menggunakan md5 sebagai metode MYSQLCrypt, yang berarti kami akan menyimpan kata sandi pengguna sebagai string MD5 dalam database yang jauh lebih aman daripada menggunakan kata sandi teks biasa!
Sekarang kita membuat link startup sistem untuk PureFTPd dan memulainya:
systemctl enable pure-ftpd.service
systemctl enable pure-ftpd.service
6 Mengisi Database Dan Menguji
Untuk mengisi database Anda dapat menggunakan shell MySQL:
mysql -u root -p
USE pureftpd;
Sekarang kita buat user exampleuser dengan status 1 (yang berarti akun ftp-nya aktif), password secret (yang akan disimpan dienkripsi menggunakan fungsi MD5 MySQL), UID dan GID 2001 (gunakan userid dan groupid dari user/ grup yang Anda buat di akhir langkah kedua!), direktori home /home/www.example.com, bandwidth unggah dan unduh 100 KB/dtk. (kilobyte per detik), dan kuota 50 MB:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');
quit;
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):
[[email protected] ~]# ls -l /home/
total 0
drwx------. 2 administrator administrator 59 Sep 26 10:35 administrator
drwxr-xr-x. 2 ftpuser ftpgroup 22 Sep 26 12:07 www.example.com
[[email protected] ~]#
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 pureftpd.
Setiap kali Anda ingin membuat pengguna baru, Anda harus membuat entri di tabel ftpd jadi saya akan menjelaskan kolom tabel ini di sini:
tabel ftpd:
- Pengguna:Nama pengguna PureFTPd virtual (mis. pengguna contoh).
- status:0 atau 1. 0 berarti akun dinonaktifkan, pengguna tidak dapat login.
- Kata Sandi:Kata sandi pengguna virtual. Pastikan Anda menggunakan fungsi MD5 MySQL untuk menyimpan kata sandi yang dienkripsi sebagai string MD5:
- 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).
- Dir:Direktori beranda pengguna PureFTPd virtual (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.
- ULBandwidth:Unggah bandwidth pengguna virtual dalam KB/dtk. (kilobyte per detik). 0 berarti tidak terbatas.
- DLBandwidth:Unduh bandwidth pengguna virtual dalam KB/detik. (kilobyte per detik). 0 berarti tidak terbatas.
- komentar:Anda dapat memasukkan komentar apa pun di sini (misalnya untuk administrasi internal Anda) di sini. Biasanya Anda membiarkan kolom ini kosong.
- ipaccess:Masukkan alamat IP di sini yang diizinkan untuk terhubung ke akun FTP ini. * berarti alamat IP apa pun diizinkan untuk terhubung.
- QuotaSize:Ruang penyimpanan dalam MB (bukan KB, seperti pada ULBandwidth dan DLBandwidth!) yang diizinkan untuk digunakan oleh pengguna virtual di server FTP. 0 berarti tidak terbatas.
- QuotaFiles:jumlah file yang boleh disimpan oleh pengguna virtual di server FTP. 0 berarti tidak terbatas.
8 FTP Anonim
Jika Anda ingin membuat akun ftp anonim (akun ftp yang dapat diakses semua orang tanpa kata sandi), Anda memerlukan pengguna dan grup bernama ftp. Keduanya telah dibuat secara otomatis saat Anda menginstal paket pure-ftpd, jadi Anda tidak perlu membuatnya secara manual. Namun, homedir ftp adalah /var/ftp secara default, tetapi saya ingin membuat direktori ftp anonim di /home/ftp (direktori ftp pengguna normal juga ada di /home, mis. /home/www.example. com). Tetapi tentu saja, Anda dapat menggunakan direktori /var/ftp untuk ftp anonim, jika Anda menginginkannya.
Jika Anda ingin menggunakan /home/ftp, buka /etc/passwd dan ubah homedir pengguna ftp dari /var/ftp menjadi /home/ftp (jangan lakukan ini jika Anda ingin menggunakan /var/ftp):
vi /etc/passwd
[...] #ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin [...]
Kemudian pindahkan /var/ftp ke /home (jangan lakukan ini jika Anda ingin menggunakan /var/ftp):
mv /var/ftp /home
Kemudian kita membuat direktori /home/ftp/incoming yang memungkinkan pengguna anonim untuk mengunggah file. Kami akan memberikan izin direktori /home/ftp/incoming dari 311 sehingga pengguna dapat mengunggah, tetapi tidak melihat atau mengunduh file apa pun di direktori itu. Direktori /home/ftp akan memiliki izin 555 yang memungkinkan melihat dan mengunduh file:
chown ftp:nobody /home/ftp
cd /home/ftp
mkdir incoming
chown ftp:nobody incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/
(Jika Anda ingin menggunakan /var/ftp sebagai gantinya, ganti /home/ftp dengan /var/ftp pada perintah di atas.)
Pengguna anonim akan dapat masuk, dan mereka akan diizinkan untuk mengunduh file dari /home/ftp, tetapi unggahan akan dibatasi ke /home/ftp/incoming (dan setelah file diunggah ke /home/ftp/incoming, itu tidak dapat dibaca atau diunduh dari sana; admin server harus memindahkannya ke /home/ftp terlebih dahulu agar tersedia untuk orang lain).
Sekarang kita harus mengkonfigurasi PureFTPd untuk ftp anonim. Buka /etc/pure-ftpd/pure-ftpd.conf dan pastikan Anda memiliki pengaturan berikut di dalamnya:
vi /etc/pure-ftpd/pure-ftpd.conf
[...] NoAnonymous no [...] AntiWarez no [...] AnonymousBandwidth 8 [...] AnonymousCantUpload no [...]
(Pengaturan AnonymousBandwidth adalah opsional - memungkinkan Anda membatasi bandwidth upload dan download untuk pengguna anonim. 8 berarti 8 KB/dtk. Gunakan nilai apa pun yang Anda suka, atau komentari baris jika Anda tidak ingin membatasi bandwidth.)
Terakhir, kita restart PureFTPd:
systemctl restart pure-ftpd.service
9 Tautan
- PureFTPd:http://www.pureftpd.org/
- MySQL:http://www.mysql.com/
- phpMyAdmin:http://www.phpmyadmin.net/
- CentOS:http://centos.org/
-
Hosting Virtual Dengan Proftpd Dan MySQL (Termasuk Kuota) Di Ubuntu 14.04LTS
-
Server FTP dengan PureFTPd, MariaDB dan Pengguna Virtual (termasuk Manajemen Kuota dan Bandwidth) di CentOS 7.2
-
Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Di Ubuntu 7.10 (Gutsy Gibbon)
-
Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Di Ubuntu 9.04 (Jaunty Jackalope)
-
Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Di Ubuntu 9.10 (Karmic Koala)
-
Hosting Virtual Dengan PureFTPd Dan MySQL (Termasuk Kuota Dan Manajemen Bandwidth) Di Ubuntu 10.10 (Maverick Meerkat)