Pontianak Web & Open Source

Jasa Buat Website Pontianak. Pontianak Web & Open Source

FTP Server dengan Proftpd ada MySQL pada Ubuntu 9.10

Sab, 2011-03-26 23:37 -- mbahlol

Berikut cara-cara instalasi FTP Server dengan virtual user, dimana user disimpan didalam database MySQL. Jika user ftp ada banyak maka tidak di perlukan lagi membuat linux user system karena user di buat dengan MySQL. Sebagai tambahan adalah penerapan quota untuk user.

Pertama login sebagai root, jika belum ketik perintah sudo su dan masukkan password

Mengganti shell default

dpkg-reconfigure dash

Install dash as /bin/sh? <-- No

FTP Server dengan Proftpd ada MySQL pada Ubuntu 9.10

 Disable AppArmor

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove
aptitude remove apparmor apparmor-utils

Install MySQL dan phpMyAdmin, bisa di lihat di sini <- Klik

Install paket Proftpd yang support dengan MySQL

aptitude install proftpd-mod-mysql

Run proftpd: <-- Standalone

FTP Server dengan Proftpd ada MySQL pada Ubuntu 9.10

Buat ftpgroup dan ftp user, virtual user akan di mapping ke group dan user ini. Di contoh kita pakai 2001, id bisa bebas yang penting id tersebut belum di pakai.

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

Berikutnya membuat database ftp dan usernyaproftpd.Untuk password silahkan sesuaikan demi keamanan sendiri.. Perintah dibawah menggunakan command line, bisa juga di gunakan phpMyAdmin.

CREATE DATABASE ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Perintah di bawah adalah membuat 4 table ftpgroup,ftpquotalimit, ftpquotatallies, ftpuser

USE ftp;

CREATE TABLE ftpgroup (
groupname 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';

CREATE TABLE ftpquotalimits (
name 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;

CREATE TABLE ftpquotatallies (
name 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',
accessed 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';

quit;

Dengan perintah quit di atas maka kita akan keluar dari mysql dan kembali ke shell linux. Berikutnya konfigurasi Proftpd, dengan menghilangkan tanda komentar (#) akan mengaktifkan 3 modul seperti dibawah

nano /etc/proftpd/modules.conf

# Install proftpd-mod-mysql or proftpd-mod-pgsql to use this
LoadModule mod_sql.c

# Install proftpd-mod-mysql to use this
LoadModule mod_sql_mysql.c

# Install proftpd-mod-pgsql or proftpd-mod-mysql to use this
LoadModule mod_quotatab_sql.c

Edit file /etc/proftpd/proftpd.conf

nano /etc/proftpd/proftpd.conf

Beri komentar baris-baris berikut.

#
#QuotaEngine off
#

 

Pada akhir baris tambahkan baris-baris seperti dibawah, pada baris SQLConnectInfo ganti password sesuaikan dengan password dari user MySQL proftpd pada saat membuat user MySQL.

 

#
# Alternative authentication frameworks
#
#Include /etc/proftpd/ldap.conf
#Include /etc/proftpd/sql.conf

DefaultRoot ~

SQLBackend              mysql
# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes            Plaintext Crypt
SQLAuthenticate         users groups


# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo  ftp@localhost proftpd password


# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo     ftpuser userid passwd uid gid homedir shell

# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo    ftpgroup groupname gid members

# set min UID and GID - otherwise these are 999 each
SQLMinID        500

# create a user's home directory on demand if it doesn't exist
CreateHome on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog  STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, 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_used, files_out_used, files_xfer_used FROM ftpquotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_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}'" ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" ftpquotatallies

QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

RootLogin off
RequireValidShell off

Restart proftpd /etc/init.d/proftpd restart

Berikutnya mengisi table database, pertama isi table ftpgroup sesuaikan dengan data yang telah kita buat di atas (user dan group 2001).

mysql -u root -p

USE ftp;

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

Berikutnya adalah membuat virtual usernya, jadi hanya table ftpquotalimits dan ftpuser saja yang di isi. Untuk contoh kita memakai user usercontoh dengan quota 15 MB dan password rahasia.

INSERT INTO `ftpquotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('usercontoh', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0);

INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, 'usercontoh', 'rahasia', 2001, 2001, '/home/usercontoh', '/sbin/nologin', 0, '', '');

Setelah semua selesai, akses server FTP tersebut dengan user usercontoh dan password rahasia. Untuk home directory akan otomatis di buat jika belum ada (/home/usercontoh). Tinggal mencari cara scan file dengan clam av serta enkripsi password ftp.

Sumber: howtoforge.com

 

Kategori Blog: