Debian proftpd назначить права на директорию

Обновлено: 03.07.2024

Среди возможностей ProFTPd есть использование виртуальных пользователей с uid системных учетных записей, работа по FTP через TLS, использование виртуальных пользователей с хранением их в отдельном файле или базе данных. Мы рассмотрим настройку всех этих возможностей сервера FTP на примере Linux Ubuntu 18.04 и 20.04. Инструкция также, во многом, подойдет для настройки на Debian.

Настройка системы

Подготовим нашу операционную систему для корректной работы сервера FTP. Для этого настроим синхронизацию времени и правила в Firewall.

1. Время

Для корректного отображения времени создания файлов, необходимо синхронизировать его с внешним источником. Также необходимо задать корректный часовой пояс. Для этого вводим команду:

timedatectl set-timezone Europe/Moscow

* в данном примере мы задаем зону по московскому времени. Список все доступных зон можно посмотреть командой timedatectl list-timezones.

apt-get install chrony

. и разрешаем его запуск при загрузке системы:

systemctl enable chrony

2. Брандмауэр

Если в нашем сервере используется фаервол (по умолчанию, он работает с разрешающими правилами), разрешаем порты:

  • 20 — для передачи данных.
  • 21 — для передачи команд.
  • с 60000 по 65535 — набор для пассивного обмена FTP. Данный диапазон может быть любым из свободных, но практика показывает, что данные значения работают стабильнее.

В зависимости от утилиты управления брандмауэром, дальнейшие действия будут отличаться.

а) Iptables

Если для управления netfilter мы используем утилиту Iptables, то вводим команду:

iptables -I INPUT -p tcp --match multiport --dports 20,21,60000:65535 -j ACCEPT

Для сохранения правил можно использовать утилиту:

apt-get install iptables-persistent

В ufw команда будет следующей:

ufw allow 20,21,60000:65535/tcp

Установка и запуск с базовыми параметрами

Установка ProFTPd на Ubuntu выполняется следующей командой:

apt-get install proftpd

Открываем основной конфигурационный файл:

Редактируем значения для параметров:

* где UseIPv6 — разрешаем или запрещает использование IPv6. Если в нашей среде будет использоваться IP версии 6, то значение данной опции должно быть on.

Снимаем комментарий для опции PassivePorts и задаем ей следующее значение:

PassivePorts 60000 65535

* где 60000 - 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и перезапускаем его:

systemctl enable proftpd

systemctl restart proftpd

Готово — пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или браузер. В качестве логина и пароля используем учетную запись пользователя Ubuntu.

Если мы хотим использовать выделенную учетную запись для FTP, то создаем ее командой:

useradd ftpuser -m

Задаем ей пароль:

Если мы хотим, чтобы учетная запись не могла покидать пределы своей домашней директории, в настройках ProFTPd снимаем комментарий с опции:

И перезапускаем сервис:

systemctl restart proftpd

Шифрование при передаче данных

Следующим этапом настроим передачу данных через TLS.

В конфигурационном файле сервера ftp снимаем комментарий для строки:

Открываем конфигурационный файл tls.conf:

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

TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol SSLv23
.
TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
.
TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired
.
TLSVerifyClient off
.
TLSRequired on

* параметр TLSRequired можно задать в значение off, если мы не хотим требовать от клиента соединения по TLS.

Приводим значение для одного из раскомментированных параметров к следующему:

TLSProtocol SSLv23 TLSv1.2

* мы добавили TLSv1.2 для поддержки более актуального протокола шифрования. В противном случае, некоторые старые клиенты могут возвращать ошибку Error in protocol version.

openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.dmosk.local/CN=ftp"

* где ftp.dmosk.local — имя сервера в формате FQDN (не принципиально).

systemctl restart proftpd

Использование виртуальных пользователей

Для безопасности рекомендуется использовать не реальных пользователей системы, а виртуальных. Мы рассмотрим процесс их хранения в файле или базе данных.

Хранение в файле

Создаем виртуального пользователя командой:

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpvirt --uid=33 --gid=33 --home=/var/tmp --shell=/usr/sbin/nologin

  • /etc/proftpd/ftpd.passwd— путь до файла, в котором хранятся пользователи;
  • ftpvirt — имя пользователя (логин);
  • uid и gid — идентификаторы пользователя и группы системной учетной записи (например, www-data);
  • /var/tmp — домашний каталог пользователя;
  • /usr/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Открываем конфигурационный файл proftpd:

Снимаем комментарий или редактируем опцию (если не сделали это раньше):

* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.

Создаем дополнительный конфигурационный файл для proftpd:

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

Перезапускаем сервис FTP-сервера:

systemctl restart proftpd

Хранение в MariaDB (MySQL)

Настройку разделим на два этапа:

  1. Установку и настройку СУБД.
  2. конфигурирование FTP-сервера.

В качестве СУБД будем использовать MariaDB / MySQL.

Устанавливаем на Ubuntu СУБД и модуль mysql для ProFTPd:

apt-get install mariadb-server proftpd-mod-mysql

Разрешаем автозапуск сервиса mariadb:

systemctl enable mariadb

Задаем пароль для пользователя root в mysql:

mysqladmin -u root password

Подключаемся к базе данных:

Создаем базу данных для хранения пользователей:

> CREATE DATABASE proftpd DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* в данном примере мы создали базу данных proftpd.

Создаем таблицу в созданной базе:

* данной командой мы создаем таблицу users в базе данных proftpd.

Создаем пользователя mariadb для доступа к таблицам базы proftpd:

* мы создали пользователя proftpd_user с паролем proftpd_password, которому дали право подключаться только с локального сервера.

Добавляем FTP-пользователя в таблицу:

* в данном примере мы создаем пользователя sqluser с паролем sqlpassword.

. и отключаемся от базы:

Настройка FTP-сервера

Открываем конфигурационный файл для proftpd:

Снимаем комментарий для подключения файла sql.conf:

Открываем на редактирование файл sql.conf:

Приводим его к виду:

<IfModule mod_sql.c>
.
SQLBackend mysql
.
SQLEngine on
SQLAuthenticate users
.
SQLAuthTypes Crypt
.
SQLConnectInfo proftpd@localhost proftpd_user proftpd_password
.
SQLUserInfo users userid passwd uid gid homedir shell
.
SqlLogFile /var/log/proftpd/sql.log
.
</IfModule>

* где нужно обратить внимание на следующие параметры:

  • SQLAuthenticate — указываем, что модуль должен выполнять аутентификацию по пользователю.
  • SQLAuthTypes — способ хранения пароля в базе. Можно перечислить несколько вариантов. Для наибольшей безопасности мы разрешили хранить пароли только в зашифрованном виде.
  • SQLConnectInfo — параметры для подключения к базе. Здесь мы задаем имя и сервер базы данных, а также данные пользователя для подключения.
  • SQLUserInfo — информация о таблице, где хранится пользователь. Мы указываем на название таблицы и перечисляем название полей, в которых хранятся нужные сведения.

Создаем дополнительный конфигурационный файл для proftpd:

RequireValidShell off
AuthOrder mod_sql.c

Открываем файл modules.conf:

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

LoadModule mod_sql.c
.
LoadModule mod_sql_mysql.c

Перезапускаем сервис FTP-сервера:

systemctl restart proftpd

Можно пробовать подключаться к базе под пользователем sqluser с паролем sqlpassword.

Настройка прав доступа

Разберем пример, когда нам нужно будет к одной и той же папке дать разные права — одному пользователю только на чтение, другому на чтение и запись.

<Directory /var/tmp>
<Limit WRITE>
Order deny,allow
AllowUser ftpvirt
</Limit>
<Limit ALL>
AllowAll
</Limit>
</Directory>

* в данном примере мы задаем права для директории /var/tmp. Мы разрешаем запись в директорию только для пользователя ftpvirt, остальные права разрешены для всех.

Устранение проблем

Для решения проблем в работе FTP-сервера можно просмотреть файл журнала. Файлов может быть несколько и они находятся в каталоге /var/log/proftpd. Основной — proftpd.log.

Для просмотра вводим команду:

tail -f /var/log/proftpd/proftpd.log

По умолчанию, настройка лога в конфигурационном файле proftpd выглядит так:

Создал пользователя с домашней папкой и всеми правами в ней.
Добавил
При заходе по ftp если удалять файлы - то нормально, если закачивать - пишет 550 ошибку.

в конфиг proftpd Добавил юзвера

<Directory /home/admin/vasya/>
<Limit ALL>
AllowUser vasya
</Limit>
<Limit READ RMD DELE MKD>
AllowUser vasya
DenyAll
</Limit>
</Directory>


<Limit READ RMD DELE MKD> —нужно же разрешить команду STOR ещё! Как без неё записывать файл-то!


<Limit READ RMD DELE MKD STORE>
AllowUser vasya
DenyAll
</Limit>


и когда файлы заливаю по фтп - создаются файлы размером 0байт


исправил, перезапустил, всеравно не хочет.
Причем попробовал создать каталог по фтп - пишет Disk quota exceeded


Вот выложил полный конфиг proftpd

ServerName "ProFTPd"
ServerType standalone

TransferLog /var/log/proftpd/xferlog.legacy
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"

AuthUserFile /etc/proftpd.passwd
DefaultServer on

<Global>
DeferWelcome on


DirFakeUser on ftp
DirFakeGroup on ftp

AllowStoreRestart on
AllowRetrieveRestart on

Umask 022
DisplayLogin welcome.msg
DisplayChdir readme
AllowOverwrite yes
IdentLookups off
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth

<Directory /home/admin/domains/moy-domen/>
AllowOverwrite on
<Limit STOR READ RMD DELE MKD>
AllowUser vasya
DenyAll
</Limit>
</Directory>


<Limit READ WRITE>
AllowUser vasya
DenyAll
</Limit>


Поменял папку пользователя в /etc/passwd и путь поменял в /etc/proftpd.conf - перезапустил proftpd, присвоил права на папку и вложенные папки под юзера - а он показывает пустую папку когда захожу по FPT (.

ServerName "ProFTPd"
ServerType standalone

TransferLog /var/log/proftpd/xferlog.legacy
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"

AuthUserFile /etc/proftpd.passwd
DefaultServer on

<Global>
DeferWelcome on


DirFakeUser on ftp
DirFakeGroup on ftp

AllowStoreRestart on
AllowRetrieveRestart on

Umask 022
DisplayLogin welcome.msg
DisplayChdir readme
AllowOverwrite yes
IdentLookups off
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth

<Directory /home/admin/domains/drugaya_papka/>
AllowOverwrite on
<Limit READ WRITE>
AllowUser vasya
DenyAll
</Limit>
</Directory>


>AuthUserFile /etc/proftpd.passwd

Вот это зачем? Если используешь хомяки в качестве DefaultRoot, то лучше использовать системных юзеров.


убрал, так у меня он авторизируется, вот только в папку когда заходит - ничего не показывает, такое ощущение, что куда-то не туда заходит (


ls -al /proc/`pgrep -u vasya`/root
(от рута, в момент, когда vasya работает по FTP) покажет, в какой каталог чрутится proftpd.


если правильно разобрался


Нет. Надо вводить именно так, как я написал. После -u должно быть имя пользователя. Потом закрывающая обратная кавычка, слеш и root.

Итак, у нас задача установить и настроить ProFTPD сервер на Debian Linux, допустим, для того, чтобы получать доступ к сайтам расположенным на нашем сервере в каталоге /home. Сайты расположены каждый в своей директории, и настроены виртуальные хосты.
Для установки наберём следующую команду:

apt-get install proftpd

Система загрузит нужные для установки модули с сервера debian и приступит к установке. Во время установки в систему будет добавлен пользователь ftp и создана его домашняя директория /home/var.

Если Вас не устраивает лишняя директория в /home, Вы можете поступить как я, и переместить его домашнюю директорию, например, в /var/ftp. Делается это командами:

Ненужную директорию спрятали, теперь переходим непосредственно к конфигурированию и настройке ProFTPD сервера.
Открывает для редактирования файл /etc/proftpd/proftpd.conf в помощью любого текстового редактора, например, nano:

nano /etc/proftpd/proftpd.conf

Далее я привожу пример файл proftpd.conf с подробными пояснениями:

Подробнее хотел бы пояснить следующих несколько директив: RootLogin, UseFtpUsers, DefaultRoot и RequireValidShell.

RootLogin – включает/отключает доступ по ftp пользователю root. Рекомендую отключить эту директиву и не использовать доступ от root в целях безопасности, так как по ftp передаются не зашифрованный пароль.
UseFtpUsers – обрабатывать ли файл ftpusers. В данном файле находится имена пользователей, которым запрещён доступ по ftp. Включаем его на всякий случай.
DefaultRoot – директория для доступа. Устанавливаем его в «

», то есть при заходе по ftp, пользователь будет попадать в свой домашний каталог и не сможет подняться выше него.
RequireValidShell – разрешить/запретить авторизовывать клиента только если он имеет основной shell из списка /etc/shells. Лично я, споткнулся именно на этой директиве. Дальше Вы поймёте почему.:)

Итак, остался последний шаг, а именно добавления своего ftp пользователя в систему. К примеру, мы хотим подключаться по ftp от пользователя “alexey” с паролем “56s4a27e”. Добавляем его в систему. Сразу запрещаем доступ это пользователя к системе через shell и указываем домашнюю директорию /home. Делается это следующей командой:

Несомненными лидерами среди FTP-серверов на сегодняшний день являются pure-ftpd, proftpd и vsftpd. Когда у Вас сотни пользователей и десятки доменов на сервере, неудобно на каждого заводить системного пользователя, поэтому в этой статье я сохранил методику настройки proftpd 1.3.4a с хранением списка виртуальных пользователей в MySQL.

Итак, приступаем к настроке сервера ftp - ProFTPD:

1. Установка proftpd под Debian Wheezy

запустится конфигуратор – выбираем тип "самостоятельно" из предложенного , так как у нас предполагается нагруженный ftp сервер.

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

Обратите внимание на то, что было создано в вашей системе:

В частности, нас интересуют идентификаторы вновь созданных пользователей proftpd:

Запомним порядковый номер пользователя и группу proftpd (105, 65534), а также тип шелла - /bin/false. Домашний каталог нового пользователя - /srv/ftp.

Создадим файл для хранения логов сервера proftpd с базой MySQL и даём на него необходимые права:

Далее создаём БД, где будут храниться пользователи, ошибки и логи доступа к нашему серверу ftp.

Прежде чем создавать таблицы в БД, уточним какие таблицы нам нужны и какой функционал мы будем вкладывать в них. Нам понадобятся 6 таблиц:

  1. group_ftp - Таблица групп пользователей ProFTP и их членов
  2. users_ftp - Таблица пользователей сервера FTP
  3. quotalimits_ftp - Основная таблица квот доступа сервера FTP
  4. quotatallies_ftp - Интегральная таблица квот доступа сервера FTP
  5. errors_ftp - Логи ошибок работы сервера FTP
  6. access_ftp - Логи доступа к серверу FTP

[users_ftp]

id: уникальный номер
username: имя пользователя
password: пароль
descr: комментарий
groupname: группа
uid: uid
gid: gid
homedir: домашний каталог
shell: определяем шелл для пользователя
last_login: последний вход
login_count: количество входов
last_err_login: последний неудачный вход
err_login_count: количество неудачных входов

[quotalimits_ftp]

name: имя виртуального пользователя
quota_type: тип ограничения по (user,qroup,class или all - для всех)
per_session: true - использовать квоту только на текущую сессию, в этом случае ни куда не записывается размер использованной квоты и для каждой новой сессии используется указанная квота. false - в этом случае использование квоты заноситься в базу данных.
limit_type: soft - возможно некоторое превышение квоты
hard - жёстко заданная квота, превышение невозможно
bytes_in_avail лимит загрузки в байтах ( если 150 Мб то 157286400 байт) 0 = нет лимита
bytes_out_avail лимит скачивания в байтах. 0 = нет лимита
bytes_xfer_avail: Лимит передачи в байтах.0 = нет лимита
files_in_avail: Лимит количества загружаемых файлов. 0 = нет лимита
files_out_avail: Лимит количесва скачиваемых файлов. 0 = нет лимита
files_xfer_avail: Лимит количесва передачи файлов. 0 = нет лимита

Добавить этот дамп БД можно любым доступным Вам способом (через phpMyadmin, webmin, через командную строку). Так как ftp сервер я ставлю в ряду первых, то phpMyAdmin (PMA) и Webmin еще не сконфигурирован, поэтому с учётом работы по ssh самым простым способом залить дамп-файл будет через перенаправление потока ввода:

Копируем содержимое приведенного выше файла proftpd.sql в буфер обмена, нажимаем правую кнопку мыши в консоли putty и закрываем полученный файл с сохранением по Ctrl+C

Замечание: учтите только кодировку, в которой работает терминал putty. У меня это utf8, что совпадает с кодировкой БД, если же на вкладке настроек putty->window->Translation стоит отличная от utf8, то и кодировка файла созданного tee будет соответствующей.

Вносим дамп в БД:

Теперь заполним созданную базу первичными данными для отладки. Создадим двух пользователей: demon с мягкой квотой в 1GB(1073741824 bytes), и admin - без квот.

Замечание: Обратите внимание, что оба этих пользователя будут относиться к виртуальной ftp-группе proftpd и наследовать ID-реального системного пользователя proftpd(105). Вы можете присваивать любой другой номер ID, не совпадающий с системными и создавать и помещать в любые другие группы, чтобы они не пересекались в "системном" пространстве.

Технический нюанс: Также обратите внимание, что при задействовании квот, необходимо внести записи в ДВЕ таблицы: quotalimits_ftp и quotatallies_ftp. Так как сам сервер у меня почему то отказался вносить эту запись самостоятельно при первом запуске. Тоесть, если Вы хотите задействовать квоты для пользователя - создавайте записи по аналогии в обоих таблицах - quotalimits_ftp и quotatallies_ftp, в одной устанавливайте квоту и тип, а в другой устанавливайте значение по нулям.

Замечание: Жёсткая квота (жесткий предел) жёстко оборвёт фаил при закачке по достижении заданного значения, мягкая квота (мягкий предел) позволит Вам дозакачать файл (что может привести к превышению на гигабайты!), а потом запретит закачивать, пока Вы не освободите достаточно места для операции.

Закачиваем в БД по аналогии с предыдущим дампом через перенаправление потока ввода:

Снова копируем содержимое приведенного выше файла proftpd_user.sql в буфер обмена, нажимаем правую кнопку мыши в консоли putty и закрываем полученный файл с сохранением по Ctrl+C. Вносим дамп в БД:

Создаём директорию для пользователя `demon` и даём на неё права пользователю `proftpd`:

В версии ProFTPd 1.3.4a конфигурационные файлы поделены на несколько файлов. Проёдемся по ним по очереди, основной файл конфигурации /etc/proftpd/proftpd.conf:

Теперь расскоментируем "альтернативный способ авторизации" наших клиентов в файле конфигурации /etc/proftpd/modules.conf:

. задействуем следующие модули:

В завершение разберемся, как устроен файл конфигурации /etc/proftpd/sql.conf. Принципиальных вариантов настройки SQL для этого сервера в интернете несколько. Основные отличия в использовании нестандартных полей в таблицах, чтобы расширить функциональность сервера. Например Вы можете использовать краткую форму указания параметров запроса для таблицы:

Или написать запрос самостоятельно, с указанием всех необходимых аргументов:

Примечание: Если вы не можете записать в ftp папку используя связку proftpd + mysql (ошибка 550) – проверьте права/владельца на папку и под каким пользователем/группой происходит запись. По умолчанию, proftpd пишет файлы как 65533:65533 и игнорирует то, что указано в /etc/proftpd/proftpd.conf. Соответственно, изменим пользователя и группу по умолчанию на нашего пользователя 105(proftpd) и зададим группу 65534(nogroup) именно в файле конфигурации /etc/proftpd/sql.conf:

Перезапускаем сервис и смотрим логи на предмет ошибок.

3. Тестирование начальной конфигурации

Проверим клиентом ftp, входящим в состав любой Widows. Попробуем залить файл на сервер.

Прошло удачно? Не получилось? Читаем логи, проверяем разрешения на папки и пароли к БД MySQL и пароль ftp-пользователя.

4. Добавление виртуальных пользователей, расстановка прав

Добавляем нового пользователя БД нашего FTP сервера:

Не забывайте про гибкий механизм прав доступа. Вы можете гибко выбирать от имени какого системного пользователя будет записывать в папку наш "виртуальный" пользователь и какую группу он будет использовать.

Подправим права доступа к файлам и папкам, рекурсивно (если надо):

Если вас беспокоит безопасность, подправим права на отдельные типы файлов:

5. Увеличиваем безопасность proFTPD ftp-сервера, необходимо-достаточный тюнинг серверя для типового хостинга (опционально)

Для этого проверим и установим некоторые дополнительные параметры в конфигурационном файле /etc/proftpd/proftpd.conf:

Примечание: Если Вы хотите, чтобы отображались скрытые файлы (начинающиеся с точки) используйте директивы Directory и ListOptions:

Разрешать ли для всех подряд работу со скрытыми файлами - всё же решать Вам, но лучше использовать разрешения для отдельно взятых ресурсов.

Примечание: Для того, чтобы у Вас работала докачка файлов на ftp сервер, используйте директиву AllowStoreRestart. Поместите её в файл конфигурации /etc/proftpd/proftpd.conf:

Не забудьте перезапустить сервер proFTPD.

Поиск решений ошибок proftpd: если Вы столкнулись с ошибкой proftpd[16632]: mod_tls_memcache/0.1: notice: unable to register 'memcache' SSL session cache: Memcache support not enabled, отключите этот модуль в /etc/proftpd/modules.conf:

Или настройте memcache для proftpd как описано в руководстве - ProFTPD mini-HOWTO - ProFTPD and Memcache . Не забудьте перезапустить сервер proFTPD.

6. Добавляем сертификат SSL к нашему серверу proftpd

Для начала сгенерируем сертификат:

Подправим права на вновь-созданный сертификат:

Отредактируем конфигурационный файл /etc/proftpd/tls.conf:

Замечанние: Если вы указали опцию TLSRequired on, то для подключения к FTP возможен только доступ с использованием TLS (другие пользователи с старыми FTP клиентами не поддерживающими TLS подключиться не смогут); но закомментировав эту опцию или установим значение в TLSRequired off к FTP можно будет подключаться и используя TLS и обычным способом.

Включаем TLS в конфигурационном файле /etc/proftpd/proftpd.conf:

Перезапускаем сервис и смотрим логи на предмет ошибок.

7. Шифруем Palintext пароли в БД

Заметьте, ничего в этой команде менять не надо, она самостоятельно, с помощью функции PASSWORD() зашифрует пароли и поменяет их. ВАЖНО! Процедура одностороняя, поэтому если в базе пользователей много, сделайте бэкап.

Допишем (если её нет) в файле /etc/proftpd/sql.conf в опцию SQLAuthTypes ключ Backend:

И перезапустим сервер.

Теперь можно хранить в базе как шифрованные, так и не шифрованные пароли. Но я настоятельно рекомендую отказаться от аутентификации Plaintext

Читайте также: