sudo aptitude install proftpd-basic
sudo aptitude install proftpd-mod-mysql
sudo vim /etc/proftpd/proftpd.conf
DefaultRoot ~
Include /etc/proftpd/sql.conf
<IfModule mod_quotatab.c>
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
QuotaShowQuotas on
SQLNamedQuery get-quota-limit SELECT "login, 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 quotalimits WHERE login = '%{0}' AND quota_type = '%{1}'"
SQLNamedQuery get-quota-tally SELECT "login, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies WHERE login = '%{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 login = '%{6}' AND quota_type = '%{7}'" quotatallies
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
QuotaLog /var/log/proftpd/quota.log
</IfModule>
sudo vim /etc/proftpd/modules.conf
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_sql.c
sudo vim /etc/proftpd/sql.conf
<IfModule mod_sql.c>
SQLBackend mysql
SQLEngine on
SQLAuthenticate users
SQLAuthTypes Crypt
SQLConnectInfo имя_базы@хост_базы пользователь пароль_пользователя
SQLUserInfo users login passwd uid gid homedir shell
SQLMinUserGID 10
SQLMinUserUID 10
</IfModule>
sudo /etc/init.d/proftpd restart
CREATE TABLE users(
login VARCHAR(20) NOT NULL,
passwd VARCHAR(20) NOT NULL,
uid INT NOT NULL,
gid INT NOT NULL,
homedir VARCHAR(50) NOT NULL,
shell VARCHAR(20) NOT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE quotalimits (
login VARCHAR(20) DEFAULT NULL,
quota_type ENUM('user','group','class','all') NOT NULL,
per_session ENUM('false','true') NOT NULL,
limit_type ENUM('soft','hard') NOT NULL,
bytes_in_avail FLOAT NOT NULL,
bytes_out_avail FLOAT NOT NULL,
bytes_xfer_avail FLOAT NOT NULL,
files_in_avail INT(10) UNSIGNED NOT NULL,
files_out_avail INT(10) UNSIGNED NOT NULL,
files_xfer_avail INT(10) UNSIGNED NOT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE quotatallies (
login VARCHAR(20) NOT NULL,
quota_type ENUM('user', 'group', 'class', 'all') NOT NULL,
bytes_in_used FLOAT NOT NULL,
bytes_out_used FLOAT NOT NULL,
bytes_xfer_used FLOAT NOT NULL,
files_in_used INT(10) UNSIGNED NOT NULL,
files_out_used INT(10) UNSIGNED NOT NULL,
files_xfer_used INT(10) UNSIGNED NOT NULL
) ENGINE=MYISAM DEFAULT CHARSET=utf8;
SQLMinUserGID 10
SQLMinUserUID 10
INSERT INTO users(login, passwd, uid, gid, homedir, shell) VALUES
('test', encrypt('пароль'), 33, 33, '/home/majesty/ftp/uploads/test', '/sbin/nologin');