Все действия приведены применительно к Debian 10.
Предполагается, что
PostgeSQL уже установлен в системе.
Создана папка для корня FTP сервера - /ftp
Созданы подпапки для пользователей, например - /ftp/nn и /ftp/saratov с правами 777
Установка сервиса ProFTPd:
$ sudo apt install proftpd
$ sudo systemctl enable proftpd
$ sudo systemctl start proftpd
Сервер работает под пользователем proftpd
Задаем пароль для этого пользователя (например, 12345) и оболочку (/bin/bash)
$sudo passwd proftpd
Новый пароль : 12345
Повторите ввод нового пароля : 12345
$sudo chsh -s /bin/bash proftpd
Установка расширения для proftpd, работающего с СУБД PostgeSQL
$ sudo apt install proftpd-mod-pgsql
Создаем базу данных для пользователя базы proftpd и выдалим привелегии этому пользователю для базы и таблицы:
$ sudo -u postgres psql
postgres=# CREATE USER proftpd;
postgres=# ALTER ROLE proftpd CREATEDB;
postgres=# ALTER USER proftpd with encrypted password 'pass123';
postgres=# CREATE DATABASE proftpddb;
postgres=# \c proftpddb;
postgres=# CREATE TABLE users (id serial PRIMARY KEY,username varchar(20),password varchar(20),groupname varchar(24),uid int,gid int,homedir varchar(70),shell varchar(20));
postgres=# GRANT ALL privileges ON DATABASE proftpddb TO proftpd;
postgres=# GRANT ALL ON users TO proftpd;
Создаем пользователей, которые будут подключаться к FTP серверу
Например, пользователя nn с паролем xxxzzz777 и домашним каталогом /ftp/nn
postgres=# INSERT INTO users (username, password, groupname, uid, gid, homedir,shell) VALUES ('nn','xxxzzz777','ftp',1010,1010, '/ftp/nn','/bin/sh');
Пользователи не смогут выходит за пределы "своих" каталогов.
Файл конфигурации сервера ProFTPd будет тут: /etc/proftpd/proftpd.conf
Вносим в него правки
$ sudo nano /etc/proftpd/proftpd.conf
Устанавливаем корень FTP сервера - для всех пользователей - свою домашнюю директорию
За ее пределы пользователи не смогу выходить
DefaultRoot ~
Раскомментируем строку, отключающаяю запрос реального shell для пользователя
RequireValidShell off
Раскомментируем строку
Include /etc/proftpd/sql.conf
В файле модулей proFFTPd (/etc/proftpd/modules.conf) подключаем модуль sql и postgres
$ sudo nano /etc/proftpd/modules.conf
Раскомментируем строку:
LoadModule mod_sql.c
и добавляем строку
LoadModule mod_sql_postgres.c
В файле модуля sql (/etc/proftpd/sql.conf) вносим настройки для доступа к базе данных с пользователями
$ sudo nano /etc/proftpd/sql.conf
<IfModule mod_sql.c>
# Определение режима работы - база PostgreSQL
SQLBackend postgres
SQLEngine on
# Аутентификация по имени пользователя, юзера
SQLAuthenticate users
# Пароль будет передаваться в базу открытым текстом
SQLAuthTypes Plaintext
# НазваниеБазы@Сервер Логин Пароль
SQLConnectInfo proftpddb@localhost proftpd pass123
# Имя таблицы (users) и последовательность полей таблицы users
SQLUserInfo users username password uid gid homedir shell
</IfModule>
Рестарт сервера для применения настроек:
$ sudo systemctl restart proftpd
Если потребуется отладка, то запуск proFTPd в отладочном режиме:
$ sudo /usr/sbin/proftpd -d 9 -n