Virtual Hosting : PureFTPd Dan MySQL Di Freebsd

By | September 5, 2008

Di tulisan ini saya mencoba membuat sebuah virtual hosting di Freebsd dengan PureFTPd server dimana menggunakan virtual users dari MySQL database dari pada menggunakan system users.
Dari sis performa lebih baik dan bisa menampung lebih banyak ftp users di satu mesin. Disini juga saya sertakan bagaimana mensetting quota dan upload/download bandwidth limits. Passwords user akan disimpan dengan encrypted MD5 strings di database.

Untuk administrasi MySQL database bisa digunakan phpMyAdmin, asumsi disini Mysql, apache dan phpmyadmin sudah terinstall di server.

1. Install Pure-ftpd dengan aktifkan “Support for users in MySQL database”

#cd /usr/ports/ftp/pure-ftpd
#make install clean

2. Membuat database dan tabel untuk pure-ftpd

#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;

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)
) TYPE=MyISAM;

3. Konfigure pure-ftpd
edit file pure-ftpd.conf , edit bagian ini :

[…]
ChrootEveryone              yes
[…]
MySQLConfigFile               /usr/local/etc/pure-ftpd/pureftpd-mysql.conf
[…]
CreateHomeDir               yes
[…]

edit file pureftpd-mysql.conf, tambahkan baris berikut :

MYSQLSocket      /tmp/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”)

4. Running dan test
jalankan pure-ftpd dan kemudian di coba membuat user exampleuser dengan status 1 (berarti ftp account is active), password secret (disimpan encrypted MySQL’s MD5 ), UID dan GID 2001 , home directory /home/www.example.com, upload dan download bandwidth = 100 KB/sec. (kilobytes per second), dan quota = 50 MB . melalui query sql berikut :

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’);

kalau sudah tinggal test login pake ftp client, kalau tidak ada error dan bisa login berarti sukses deh 🙂

10 thoughts on “Virtual Hosting : PureFTPd Dan MySQL Di Freebsd

  1. taufik

    to master ;
    hhe..

    mas. q coba buat pureftpd di freeBSD 7.0 dengan mysql-server5.1.
    tp waktu buat user untuk pureftpd nya dengan sintax :

    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′);

    ko malah error, knp yah ?

    ths.

    Reply
  2. taufik

    pesan error nya seperti ini mas,

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”ftpd’ (‘User’, ‘status’, ‘Password’, ‘Uid’, ‘Gid’, ‘Dir’, ‘ULBandwidth’, ‘DLBan’ at line 1

    Reply
  3. Profile photo of tunggultunggul Post author

    itu sintak querynya ada yang salah, kalau ngak salah lihat di depan ftpd pake petik ganda yah ? (“) coba pake petik tunggal atau coba ngak usah pake petik. btw pake mysql berapa ?

    Reply
  4. taufik

    q buat di freeBSD 7.0 dengan mysql-server5.1.

    waktu di buat pakai query :

    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′);

    malah error, kalau query nya :
    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′);

    success, tp waktu di test

    #ftp localhost

    331 User ftpuser OK. Password required
    Password:
    530 Login authentication failed
    ftp: Login failed.

    kira2x masalahnya dimna yah mas ?

    Reply
  5. taufik

    m’ kalo buat user memakai query seperti diatas(4) running & test, /home/www.example.com otomatis terbuat tdk ?

    Reply
  6. taufik

    mav m’ mo nanya lagi,
    jgn bosen jwbnya yah,
    heehee..

    klo semua langkah2x 1-4 success,
    tp pada wktu di test pake ftp-client gagal,
    kemungkinan error di bag. apa yah ?

    apakah ada file/dir yang perlu di buat ato rubah hak aksesnya terlebih dahulu ?

    asumsi: smua conf sudah benar(sama).

    Reply
  7. Profile photo of tunggultunggul Post author

    untuk debug coba cek di mysql proses sewaktu pureftpd di akses apa bener dia kirim query ke mysql, kemungkinannya cuman itu.

    takutnya modul mysql di pureftpd ngak terinstall

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *


*