Итак, поставленная задача - "поднять" FTP-сервер с хранением списка пользователей в БД MySQL и назначить этим пользователям квоты, используя mod_quota.
Установим Proftpd из системы портов:
# cd /usr/ports/ftp/proftpd-mysql && make install clean && rehash |
При установке набор опций следующий:
Options for proftpd-mysql 1.3.3a_1 ┌────────────────────────────────────────────────────────────────┐ │ [X] BAN Include mod_ban (Requires CTRLS) │ │ [X] CLAMAV Include mod_clamav │ │ [X] CTRLS Include controls │ │ [X] EXEC Include mod_exec │ │ [ ] HTMLDOCS Include HTML documentation │ │ [X] IFSESSION Include mod_ifsession │ │ [ ] IPV6 Use IPv6 │ │ [ ] LDAP Use LDAP │ │ [ ] LDAP_TLS Use LDAP TLS (Requires LDAP, OPENSSL) │ │ [X] MYSQL MySQL auth │ │ [ ] NLS Use nls (builds mod_lang) │ │ [ ] ODBC ODBC │ │ [X] OPENSSL Include mod_tls │ │ [ ] PGSQL Postgres auth │ │ [X] QUOTA Include mod_quota │ │ [ ] QUOTATAB_RADIUS include mod_quotatab_radius │ │ [ ] SHAPER Shaper module │ │ [ ] SQLITE SQLite auth │ │ [ ] RADIUS Include mod_radius │ │ [X] RATIO Include mod_ratio │ │ [X] README Include mod_readme │ │ [X] REWRITE Include mod_rewrite │ │ [ ] TLS_SHMCACHE TLS SHM session cache (requires OPENSSL) │ │ [ ] TDS Include mod_sql_tds │ │ [ ] SFTP Include mod_sftp │ │ [ ] SFTP_SQL Include mod_sftp_sql │ │ [ ] SFTP_SQL Include mod_sftp_sql │ │ [ ] SFTP_PAM Include mod_sftp_pam │ │ [ ] SITE_MISC Include mod_site_misc │ │ [X] SQL_PASSWD Include mod_sql_passwd │ │ [ ] UNIQUE Include mod_unique_id │ │ [X] WRAP Include mod_wrap2 │ │ [ ] WRAP_FILE Include mod_wrap2_file (requires WRAP) │ │ [ ] WRAP_SQL Include mod_wrap2_sql (requires WRAP) │ └────────────────────────────────────────────────────────────────┘ |
Редактируем конфигурационный файл /usr/local/etc/proftpd.conf до следующего состояния:
ServerName "Company_name FTP server" DisplayConnect /etc/ftp_connect.msg <Directory ~ > # Если нужен анонимный доступ раскомментировать. #sql info # config quotas |
Создадим пользователя MySQL, базу данных и выставим необходимые права:
# mysql -u root -p mysql> CREATE DATABASE proftpd; mysql> grant select,insert,update,delete on proftpd.* to proftpd@localhost identified by 'sql-password'; mysql> USE proftpd; mysql> CREATE TABLE users ( mysql> CREATE TABLE quotalimits ( mysql> CREATE TABLE quotatallies (
|
Добавим системного пользователя ftp групы ftp:
# pw user add ftp -s /sbin/nologin -d /nonexistent -g ftp |
Добавляем пользователей и квоты.
Если системный пользователь - необходимо узнать uid и gid:
# cat /etc/passwd | grep muff |
Выполним следующие запросы MySQL:
mysql> use proftpd; mysql> insert into users values (NULL,'muff',ENCRYPT('user_pass'),'1001','0','/home/muff','/sbin/nologin'); mysql> insert into quotalimits values ('muff','user','false','hard','0','0','0','0','0','0'); |
Если пользователь виртуальный, то его файлы все равно должны кому-то принадлежать. Пусть это будет пользователь ftp групы ftp:
# cat /etc/passwd | grep ftp ftp:*:1003:14:User &:/nonexistent:/sbin/nologin |
Добавим виртуального пользователя virtual и зададим ограничение для этого пользователя в 150 МБ (квоту необходимо указывать в байтах). Для этого выполним такие SQL-запросы:
mysql> use proftpd; mysql> insert into users values (NULL,'virtual',ENCRYPT('virtual_pass'),'1003','14','/var/vftp/virtual','/sbin/nologin'); mysql> insert into quotalimits values ('virtual','user','false','hard','157286400','0','0','0','0','0'); |
Следует обратить внимание на тот факт, что для виртуальных пользователей можно использовать любой каталог. Я вот решил использовать каталог /var/vftp. Необходимо создать каталог /var/vftp, и, соответвенно, подкаталог /var/vftp/virtual, который будет являться домашним каталогом FTP для пользователя virtual:
# mkdir -p /var/vftp/virtual |
Чтобы не возникало проблем с правами доступа, установим владельцем пользователя ftp:
# chown -R ftp:ftp /var/vftp/virtual |
Создим каталог для логов:
# mkdir /var/log/proftpd |
Добавим в /etc/rc.conf параметры запуска демона Proftpd:
# echo '# FTP' >> /etc/rc.conf # echo 'proftpd_enable="YES"' >> /etc/rc.conf |
Пытаемся запустить FTP-сервер:
# sh /usr/local/etc/rc.d/proftpd start |
Сервер запустился...
Перед тем, как проверять результаты работы, комментарии к таблицам MySQL:
Таблица users
Таблица quotalimits
Таблицу quotatallies редактировать не нужно, proftpd это делает сам.
Итак, логинимся к серверу и проверяем квотирование:
# telnet localhost 21
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ProFTPD 1.3.3a Server (Company_name FTP server) [127.0.0.1]
USER virtual
331 Необходим пароль для пользователя virtual
PASS virtual_pass
230 Now upload/download files
SITE QUOTA
200-The current quota for this session are [current/limit]:
Name: virtual
Quota Type: User
Per Session: False
Limit Type: Hard
Uploaded Mb: 0.00/150.00
Downloaded Mb: unlimited
Transferred Mb: unlimited
Uploaded files: unlimited
Downloaded files: unlimited
Transferred files: unlimited
200 Please contact admin [at] domain [dot] com if these entries are inaccurate |
Закачаем некоторый обьем информации, и проверим квоту:
SITE QUOTA
200-The current quota for this session are [current/limit]:
Name: virtual
Quota Type: User
Per Session: False
Limit Type: Hard
Uploaded Mb: 16.34/150.00
Downloaded Mb: unlimited
Transferred Mb: unlimited
Uploaded files: unlimited
Downloaded files: unlimited
Transferred files: unlimited
200 Please contact admin [at] domain [dot] com if these entries are inaccurate |
При превышении квоты закачка прерывается и наблюдаем такие сообщения FTP-сервера:
552-Передача отменена. Disc quota exceeded STOR: notice: quota reached: used 150.00 of 150.00 upload Mb |
На этом можно считать настройку оконченой.
Последние комментарии
19 недель 2 дня назад
43 недели 3 дня назад
2 года 44 недели назад
3 года 14 недель назад
3 года 37 недель назад
4 года 2 дня назад
4 года 5 дней назад
4 года 4 недели назад
4 года 15 недель назад
4 года 19 недель назад