Используемые термины: FTP , Linux , Ubuntu .
Среди возможностей ProFTPd есть использование виртуальных пользователей с uid системных учетных записей, работа по FTP через TLS, использование виртуальных пользователей с хранением их в отдельном файле или базе данных. Мы рассмотрим настройку всех этих возможностей сервера FTP на примере Linux Ubuntu 18.04, 20.04 и 22.04. Инструкция также, во многом, подойдет для настройки на Debian.
Подготовка системы
Правильное время
Правила фаервола
Имя сервера
Базовая настройка
Настройка SSL
Виртуальные пользователи
Хранение в файле
Использование MySQL
Настройка прав для пользователей FTP
Настройка логов
Читайте также
Подготовим нашу операционную систему для корректной работы сервера FTP. Для этого настроим синхронизацию времени и правила в Firewall.
Для корректного отображения времени создания файлов, необходимо синхронизировать его с внешним источником. Также необходимо задать корректный часовой пояс. Для этого вводим команду:
timedatectl set-timezone Europe/Moscow
* в данном примере мы задаем зону по московскому времени. Список все доступных зон можно посмотреть командой timedatectl list-timezones .
Устанавливаем chrony:
apt update
apt install chrony
… и разрешаем его запуск при загрузке системы:
systemctl enable chrony
Если в нашем сервере используется фаервол (по умолчанию, он работает с разрешающими правилами), разрешаем порты:
В зависимости от утилиты управления брандмауэром, дальнейшие действия будут отличаться.
Если для управления netfilter мы используем утилиту Iptables, то вводим команду:
iptables -I INPUT -p tcp —match multiport —dports 20,21,60000:65535 -j ACCEPT
Для сохранения правил можно использовать утилиту:
apt install iptables-persistent
netfilter-persistent save
б) UFW
В ufw команда будет следующей:
ufw allow 20,21,60000:65535/tcp
Для корректного запуска ProFTPd важно, чтобы имя сервера корректно разрешалось в адрес сервера. Если имя сервера не задано, вводим:
hostnamectl set-hostname ftp.remontka.localnet
* где ftp.remontka.localnet — имя сервера.
Для разрешения имени оно должно быть внесено в DNS, но если у нас его нет, открываем файл hosts:
vi /etc/hosts
И приписываем:
127.0.0.1 … ftp.remontka.localnet
Установка ProFTPd на Ubuntu выполняется следующей командой:
apt update
apt install proftpd
Открываем основной конфигурационный файл:
vi /etc/proftpd/proftpd.conf
Редактируем значения для параметров:
UseIPv6 off
* где 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
Задаем ей пароль:
passwd ftpuser
Если мы хотим, чтобы учетная запись не могла покидать пределы своей домашней директории, в настройках ProFTPd снимаем комментарий с опции:
vi /etc/proftpd/proftpd.conf
DefaultRoot ~
И перезапускаем сервис:
systemctl restart proftpd
Следующим этапом настроим передачу данных через TLS.
Устанавливаем пакет:
apt install proftpd-mod-crypto
В конфигурационном файле сервера ftp снимаем комментарий для строки:
vi /etc/proftpd/proftpd.conf
Include /etc/proftpd/tls.conf
Открываем конфигурационный файл tls.conf:
vi /etc/proftpd/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.3
* мы добавили TLSv1.2 и TLSv1.3 для поддержки более актуальных протоколов шифрования. В противном случае, некоторые старые клиенты могут возвращать ошибку Error in protocol version .
Генерируем сертификат:
openssl req -x509 -days 1461 -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.remontka.local/CN=ftp»
* где ftp.remontka.local — имя сервера в формате FQDN (не принципиально).
Открываем файл со списком модулей:
vi /etc/proftpd/modules.conf
Снимаем комментарий:
LoadModule mod_tls.c
Перезапускаем ProFTPd:
systemctl restart proftpd
Для безопасности рекомендуется использовать не реальных пользователей системы, а виртуальных. Мы рассмотрим процесс их хранения в файле или базе данных.
Создаем виртуального пользователя командой:
ftpasswd —passwd —file=/etc/proftpd/ftpd.passwd —name=ftpvirt —uid=33 —gid=33 —home=/var/tmp —shell=/usr/sbin/nologin
* где:
Открываем конфигурационный файл proftpd:
vi /etc/proftpd/proftpd.conf
Снимаем комментарий или редактируем опцию (если не сделали это раньше):
DefaultRoot ~
* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.
Создаем дополнительный конфигурационный файл для proftpd:
vi /etc/proftpd/conf.d/virtual_file.conf
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.
Устанавливаем на Ubuntu СУБД и модуль mysql для ProFTPd:
apt install mariadb-server proftpd-mod-mysql
Разрешаем автозапуск сервиса mariadb:
systemctl enable mariadb
Задаем пароль для пользователя root в mysql:
mysqladmin -u root password
Подключаемся к базе данных:
mysql -uroot -p
Создаем базу данных для хранения пользователей:
> CREATE DATABASE proftpd DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* в данном примере мы создали базу данных proftpd .
Создаем таблицу в созданной базе:
> CREATE TABLE `proftpd`.`users` (
`userid` VARCHAR( 32 ) NOT NULL ,
`passwd` CHAR( 41 ) NOT NULL ,
`uid` INT NOT NULL ,
`gid` INT NOT NULL ,
`homedir` VARCHAR( 255 ) NOT NULL ,
`shell` VARCHAR( 255 ) NOT NULL DEFAULT ‘/usr/sbin/nologin’,
UNIQUE (`userid`)
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
* данной командой мы создаем таблицу users в базе данных proftpd .
Создаем пользователя mariadb для доступа к таблицам базы proftpd:
> GRANT SELECT ON proftpd.* TO proftpd_user@localhost IDENTIFIED BY ‘proftpd_password’;
* мы создали пользователя proftpd_user с паролем proftpd_password , которому дали право подключаться только с локального сервера.
Добавляем FTP-пользователя в таблицу:
> INSERT INTO `proftpd`.`users` VALUES (‘sqluser’, ENCRYPT(‘sqlpassword’), ’33’, ’33’, ‘/var/tmp’, ‘/usr/sbin/nologin’);
* в данном примере мы создаем пользователя sqluser с паролем sqlpassword .
… и отключаемся от базы:
> q
Открываем конфигурационный файл для proftpd:
vi /etc/proftpd/proftpd.conf
Снимаем комментарий для подключения файла sql.conf:
Include /etc/proftpd/sql.conf
Открываем на редактирование файл sql.conf:
vi /etc/proftpd/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>
* где нужно обратить внимание на следующие параметры:
Создаем дополнительный конфигурационный файл для proftpd:
vi /etc/proftpd/conf.d/virtual_mysql.conf
RequireValidShell off
AuthOrder mod_sql.c
Открываем файл modules.conf:
vi /etc/proftpd/modules.conf
Снимаем комментарии для следующих строк:
LoadModule mod_sql.c
…
LoadModule mod_sql_mysql.c
Перезапускаем сервис FTP-сервера:
systemctl restart proftpd
Можно пробовать подключаться к базе под пользователем sqluser с паролем sqlpassword .
Разберем пример, когда нам нужно будет к одной и той же папке дать разные права — одному пользователю только на чтение, другому на чтение и запись.
vi /etc/proftpd/conf.d/rights.conf
Добавляем:
<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 выглядит так:
TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log
При необходимости, можно настроить дополнительный файл журнала:
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth
* в данном примере в файле /var/log/proftpd/access.log будут храниться логи обращения к файлам; /var/log/proftpd/auth.log — аутентификации.
Не забываем перезагрузить сервис:
systemctl restart proftpd
Другие инструкции про FTP, которые могут быть полезны:
1. FTP-сервер ProFTPd на CentOS 7
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…