понедельник, 30 августа 2021 г.

Установка и настройка ProFTPd. Настройка авторизации пользователей через базу данных PostgeSQL.

Все действия приведены применительно к 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