proftpd + морда Proftpd Administrator

ProFTPd стал модульным, в связи с этим морда Proftpd Admin отказалась прикручиваться с квотированием (не забываем, что теперьподдержка mysql вproftpd собирается из порта /databases/proftpd-mod_sql_mysql и загружаемые модули ручками прописываются в pfoftpd.conf с правильной последовательностью загрузки, в соответствии с зависимостями модулей относительно друг друга).

Например (в proftpd.conf):

ModulePath /usr/local/libexec/proftpd
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_sql_passwd.c
LoadModule mod_sql_tds.c
LoadModule mod_wrap2.c
LoadModule mod_wrap2_sql.c
LoadModule mod_unique_id.c
LoadModule mod_site_misc.c
LoadModule mod_shaper.c
LoadModule mod_rewrite.c
LoadModule mod_readme.c
LoadModule mod_ratio.c
LoadModule mod_qos.c
LoadModule mod_ifversion.c
LoadModule mod_ifsession.c
LoadModule mod_exec.c
LoadModule mod_dynmasq.c
LoadModule mod_deflate.c
LoadModule mod_ctrls_admin.c
LoadModule mod_copy.c
LoadModule mod_ban.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_sql.c
LoadModule mod_sftp.c
LoadModule mod_sftp_pam.c
LoadModule mod_sftp_sql.c
LoadModule mod_tls.c
LoadModule mod_tls_memcache.c
LoadModule mod_tls_shmcache.c
Анонимных пользователей в файле конфига прописывать не будем (квотирование анонимных пользователей proftpd делать не умеет). Поэтому создадите позже учетку через морду, например ftp:ftp (и ручками перебьете папку анонимуса + выставите права на запись, отключив чтение. для того чтоб не потерли имеющиеся файлы залитые другим анонимусом)
Директория сайта прописывается так /позволим всем все читать и качать, но запись будет только в папке пользователя/ (в proftpd.conf):
<Directory /ftp/*>
<Limit READ>
AllowAll
</Limit>
</Directory>
Права на ФТП папку в системе выставляем на 775 (чтобы не мусорили в корневой папке фтп, для этого есть собственная папка)
Далее идем в папку с нашей мордой и начинаем править...

1) в файле pfoftpd.conf не указывать параметр ScoreboardFile

2) правим class_system.php

находим строку:

 "exec($GLOBALS['config_path_to_proftpd'] . ' -l', $modules);" 

изменяем на:

 "exec($GLOBALS['config_path_to_proftpd'] . ' -vv', $modules);" 

3) правим configure_extensions.php

находим строку:

 "if ($system->get_have_ftpmodule('mod_quotatab.c') && $system->get_have_ftpmodule('mod_quotatab_sql.c')) {" 

правим на:

 "if ($system->get_have_ftpmodule('mod_quotatab/цифры_версии_модуля') && $system->get_have_ftpmodule('mod_quotatab_sql.c')) {" 

Не забываем править при необходимости строку в пункте 3 после обновлений модуля.

#) Для желающих вообще забыть про правку, проверку можно отключить вообще, делается следующим образом:

правим configure_extensions.php

находим следующие строки:

$have_table = $db->get_table_exists('ftpquotalimits') && $db->get_table_exists('ftpquotatallies'); 
$have_modules = false;
$have_section = true;
if (sys_statusavailable() != 0) {

правим на:

 $have_table = $db->get_table_exists('ftpquotalimits') && $db->get_table_exists('ftpquotatallies');
$have_modules = true;
$have_section = true;
if (sys_statusavailable() != 0) {

Не корректно с точки зрения правильности, если забудете собрать с модулями квот "mod_quotatab"+"mod_quotatab_sql", работать не будет, поэтому лучше использовать более корректный вариант прикручивания с проверками наличия нужных модулей.

Для автоматического создания и удаления папочек и присваивания прав доступа, проверяем наличие утилиты "sudo" в файле конфигурации которой (sudoers) необходимо прописать :

Cmnd_Alias CREATE_USER = /путь_к_директории/proftpd_admin/misc/user_script/create_user.sh 
Cmnd_Alias DELETE_USER = /путь_к_директории/proftpd_admin/misc/user_script/delete_user.sh

www ALL=(ALL) NOPASSWD: CREATE_USER
www ALL=(ALL) NOPASSWD: DELETE_USER

Не забывает выставить права на оба скрипта >>> root:wheel 770

В файл create_user.sh (proftpd_admin/misc/user_script/create_user.sh) дописываем следующее (права в данном случае позволяют другим пользователям читать содержимое папки):

mkdir -p /путь_к_корневой_ftp_папке/$USER
chown $USER_ID:$GROUP_ID /путь_к_ftp_папке/$USER
chmod 755 /путь_к_корневой_ftp_папке/$USER

В файл delete_user.sh (proftpd_admin/misc/user_script/delete_user.sh) дописываем следующее:

 rm -fr /путь_к_корневой_ftp_папке/$USER 

Для новичков: когда будете использовать квотирование (выставлять, менять установленное как общее, так и для конкретного пользователя) не забываем всегда тыкать по точкам с выбором жесткости квотирования, метода квотирования и т.д. иначе может выбить квоту вообще (морда всегда проводит проверку для защиты от неопытного пользователя).

На этом прикручивание завершено, приятного использования...