Используемые термины: FTP, Linux, Ubuntu.
Среди возможностей ProFTPd есть использование виртуальных пользователей с uid системных учетных записей, работа по FTP через TLS, использование виртуальных пользователей с хранением их в отдельном файле или базе данных. Мы рассмотрим настройку всех этих возможностей сервера FTP на примере Linux Ubuntu 18.04. Инструкция также, во многом, подойдет для настройки на Debian.
Подготовим нашу операционную систему для корректной работы сервера FTP. Для этого настроим синхронизацию времени и правила в Firewall.
Для корректного отображения времени создания файлов, необходимо синхронизировать его с внешним источником. Также необходимо задать корректный часовой пояс. Для этого вводим команду:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Устанавливаем chrony:
apt-get install chrony
… и разрешаем его запуск при загрузке системы:
systemctl enable chrony
Если в нашем сервере используется фаервол (по умолчанию, он работает с разрешающими правилами), разрешаем порты:
В зависимости от утилиты управления брандмауэром, дальнейшие действия будут отличаться.
Если для управления netfilter мы используем утилиту Iptables, то вводим команду:
iptables -A INPUT -p tcp –match multiport –dports 20,21,60000:65535 -j ACCEPT
Для сохранения правил можно использовать утилиту:
apt-get install iptables-persistent
netfilter-persistent save
б) UFW
В ufw команда будет следующей:
ufw allow 20,21,60000:65535/tcp
Установка ProFTPd на Ubuntu выполняется следующей командой:
apt-get 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 снимаем комментарий с опции:
DefaultRoot ~
И перезапускаем сервис:
Следующим этапом настроим передачу данных через TLS.
В конфигурационном файле сервера ftp снимаем комментарий для строки:
Include /etc/proftpd/tls.conf
Открываем конфигурационный файл tls.conf:
vi /etc/proftpd/tls.conf
Снимаем комментарии для следующих настроек:
TLSEngine onTLSLog /var/log/proftpd/tls.logTLSProtocol SSLv23…TLSRSACertificateFile /etc/ssl/certs/proftpd.crtTLSRSACertificateKeyFile /etc/ssl/private/proftpd.key…TLSOptions NoCertRequest EnableDiags NoSessionReuseRequired…TLSVerifyClient off…TLSRequired on
* параметр TLSRequired можно задать в значение off, если мы не хотим требовать от клиента соединения по TLS.
Генерируем сертификат:
openssl req -x509 -nodes -newkey rsa:1024 -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.admins24.local/CN=ftp”
* где ftp.admins24.local — имя сервера в формате FQDN (не принципиально).
Перезапускаем ProFTPd:
Для безопасности рекомендуется использовать не реальных пользователей системы, а виртуальных. Мы рассмотрим процесс их хранения в файле или базе данных.
Создаем виртуального пользователя командой:
ftpasswd –passwd –file=/etc/proftpd/ftpd.passwd –name=ftpvirt –uid=33 –gid=33 –home=/var/tmp –shell=/usr/sbin/nologin
* где:
Открываем конфигурационный файл proftpd:
Снимаем комментарий или редактируем опцию (если не сделали это раньше):
* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.
Создаем дополнительный конфигурационный файл для proftpd:
vi /etc/proftpd/conf.d/virtual_file.conf
RequireValidShell offAuthUserFile /etc/proftpd/ftpd.passwdAuthPAM offLoadModule mod_auth_file.cAuthOrder mod_auth_file.c
Перезапускаем сервис FTP-сервера:
Настройку разделим на два этапа:
В качестве СУБД будем использовать MariaDB / MySQL.
Устанавливаем на Ubuntu СУБД и модуль mysql для ProFTPd:
apt-get 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 [email protected] 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.
… и отключаемся от базы:
Открываем конфигурационный файл для proftpd:
Снимаем комментарий для подключения файла sql.conf:
Include /etc/proftpd/sql.conf
Открываем на редактирование файл sql.conf:
vi /etc/proftpd/sql.conf
Приводим его к виду:
<IfModule mod_sql.c>…SQLBackend mysql…SQLEngine onSQLAuthenticate users…SQLAuthTypes Crypt…SQLConnectInfo [email protected] proftpd_user proftpd_password…SQLUserInfo users userid passwd uid gid homedir shell…SqlLogFile /var/log/proftpd/sql.log…</IfModule>
* где нужно обратить внимание на следующие параметры:
vi /etc/proftpd/conf.d/virtual_mysql.conf
RequireValidShell offAuthOrder mod_sql.c
Открываем файл modules.conf:
vi /etc/proftpd/modules.conf
Снимаем комментарии для следующих строк:
LoadModule mod_sql.c…LoadModule mod_sql_mysql.c
Можно пробовать подключаться к базе под пользователем 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/xferlogSystemLog /var/log/proftpd/proftpd.log
При необходимости, можно настроить дополнительный файл журнала:
ExtendedLog /var/log/proftpd/access.log WRITE,READ writeExtendedLog /var/log/proftpd/auth.log AUTH auth
* в данном примере в файле /var/log/proftpd/access.log будут храниться логи обращения к файлам; /var/log/proftpd/auth.log — аутентификации.
Не забываем перезагрузить сервис:
Другие инструкции про FTP, которые могут быть полезны:
1. FTP-сервер ProFTPd на CentOS 7
2. Настройка FTP-сервера vsFTPd на CentOS 7
3. Установка и настройка vsFTPd на Ubuntu
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies