#Configurando o proftpd com suporte a quota e mysql # Proftpd 1.2.10 # Slackware 10.0.1 # MySQL 4.0.22 # GCCc 3.4.3 # Dúvidas hamilton@i2.com.br cd /usr/local/src wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2 tar xvfj proftpd-1.2.10.tar.bz2 cd proftpd-1.2.10 setenv CFLAGS '-O6 -march=i686' ./configure --sysconfdir=/etc --prefix=/usr --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=/usr/local/src/mysql-4.0.22/include:/usr/include/openssl --with-libraries=/usr/local/lib/mysql make make install ldconfig rehash #Adicionando usuario e grupo no sistema groupadd -g 5500 ftpgroup useradd -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser #Criando estrutura do banco: mysql -u root -p #Criando usuario para conectar no banco grant select, insert, update on ftpdb.* to proftpd@localhost identified by 'suasenha' ; create database ftpdb; 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'; INSERT INTO `ftpgroup` VALUES ('ftpgroup', 5500, 'ftpuser'); 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` float NOT NULL default '0', `bytes_out_avail` float NOT NULL default '0', `bytes_xfer_avail` float 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` float NOT NULL default '0', `bytes_out_used` float NOT NULL default '0', `bytes_xfer_used` float 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(64) 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`) ) TYPE=MyISAM COMMENT='ProFTP user table' ; #Inserindo usuario de teste INSERT INTO `ftpuser` VALUES (1, 'hamilton', 'senhadeteste', 5500, 5500, '/home/wvirt/hamilton.com.br/public_html', '/sbin/nologin',0,'',''); exit; #Exemplo de arquivo de configuracao /etc/proftpd.conf ServerName "hamilton.com.br" ServerType standalone ServerAdmin hamilton@i2.com.br ServerIdent on "Welcome to hamilton.com.br, plese login ..." DeferWelcome on DefaultServer on AllowStoreRestart on Port 21 Umask 022 MaxInstances 30 User nobody Group nogroup ListOptions "-a" SystemLog /var/log/proftpd.log TransferLog /var/log/xferlog DefaultRoot ~ AllowOverwrite on SQLAuthTypes Crypt SQLAuthenticate users* groups* SQLConnectInfo ftpdb@localhost proftpd suasenha SQLUserInfo ftpuser userid passwd uid gid homedir shell SQLGroupInfo ftpgroup groupname gid members SQLMinID 500 SQLHomedirOnDemand off SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser SQLLog STOR,DELE modified SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser 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_a vail, 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_o ut_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_x fer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_us ed = 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