Тематические термины: FTP , Linux , Rocky , CentOS
Сервер FTP является простым средством передачи данных. Несмотря на наличие облачных систем, которые позволяют делать то же самое, собственный FTP имеет меньше ограничений и является более безопастным средством для обмена конфиденциальной информацией.
Предварительная настройка
Установка и базовая настройка
Настройка SSL
Виртуальные пользователи
Хранение в файле
Хранение в СУБД
Решение проблем
Прежде чем начать настройку нашего сервера, выполним следующие действия:
Рассмотрим эти действия подробнее.
Зададим правильный часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере будет задана зона по московскому времени. Список всех доступных зон можно посмотреть командой timedatectl list-timezones .
Теперь установим утилиту для синхронизации времени и запустим ее в качестве сервиса:
yum install chrony
systemctl enable chronyd —now
Нам нужно открыть порты 20, 21 для работы ftp и динамический диапазон — мы будем использовать 60000-65535.
В CentOS, как правило, используется утилита управления брандмауэром на базе firewalld, но мы также рассмотрим и iptables.
а) При использовании Firewalld:
firewall-cmd —permanent —add-port=20-21/tcp —add-port=60000-65535/tcp
firewall-cmd —reload
б) При использовании iptables:
iptables -I INPUT -p tcp —match multiport —dports 20,21,60000:65535 -j ACCEPT
service iptables save
Для отключения SELinux вводим две команды:
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
setenforce 0
Для настройки рекомендую ознакомиться с другой инструкцией Настройка SELinux в CentOS .
Устанавливаем EPEL репозиторий:
yum install epel-release
Устанавливаем ProFTPd:
yum install proftpd
Если мы получимо ошибку на подобие (как правило, на Rocky):
Error:
Problem: conflicting requests
— nothing provides libmemcached.so.11()(64bit) needed by proftpd-xxx from epel
— nothing provides libmemcachedutil.so.2()(64bit) needed by proftpd-xxx from epelРазрешаем репозиторий crb:
dnf config-manager —set-enabled crb
И устанавливаем FTP-сервер:
dnf install proftpd
Внесем небольшие правки в начальную конфигурацию сервера. Для этого создаем разностный файл:
vi /etc/proftpd/conf.d/custom.conf
UseIPv6 off
PassivePorts 60000 65535
Разрешаем сервис и запускаем его:
systemctl enable proftpd —now
Можно пробовать подключаться под любой системной учетной записью. Если необходимо добавить отдельного пользователя, вводим команду:
useradd ftpuser -m
passwd ftpuser
* в данном примере мы создали пользователя ftpuser . Второй командой мы задали пароль.
Откроем файл:
vi /etc/sysconfig/proftpd
Зададим значение для опции PROFTPD_OPTIONS :
PROFTPD_OPTIONS=»-DTLS»
* опция DTLS включает TLS.
Генерируем сертификат:
openssl req -x509 -days 1461 -nodes -newkey rsa:2048 -sha256 -keyout /etc/pki/tls/private/proftpd-key.pem -out /etc/pki/tls/certs/proftpd-cert.pem -subj «/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=proftpd»
При необходимости использовать свои пути до сертификатов, правим файл:
vi /etc/proftpd/mod_tls.conf
Строки:
#TLSCertificateChainFile /etc/pki/tls/certs/proftpd-chain.pem
TLSRSACertificateFile /etc/pki/tls/certs/proftpd-cert.pem
TLSRSACertificateKeyFile /etc/pki/tls/private/proftpd-key.pemОбратите внимание, что опция TLSCertificateChainFile закомментирована. Она позволяет указать на расположение файла с сертификатами удостоверяющих центров, принимающих участие в выпуске сертификата.
Перезапускаем сервис:
systemctl restart proftpd
Хранить пользователей можно в файле и базе данных. Рассмотрим настройку и того, и другого.
Устанавливаем proftpd-utils:
yum install proftpd-utils
Создаем файл с паролями:
ftpasswd —passwd —file=/etc/proftpd/conf.d/ftpd.passwd —name=vuser1 —uid=48 —gid=48 —home=/var/www —shell=/sbin/nologin
* где:
Редактируем конфигурацию:
vi /etc/proftpd/conf.d/custom.conf
Добавляем следующее:
RequireValidShell off
AuthUserFile /etc/proftpd/conf.d/ftpd.passwd
AuthPAM off
Открываем файл:
vi /etc/proftpd.conf
Находимо строку:
AuthOrder …
Добавляем mod_auth_file.c к значениям так, чтобы оно было первым в списке, например:
AuthOrder mod_auth_file.c mod_auth_pam.c* mod_auth_unix.c
Перезапускаем сервис:
systemctl restart proftpd
Можно пробовать подключиться под созданным пользователем (в нашем примере, vuser1 ).
Устанавливаем компонент proftpd-mysql:
yum install proftpd-mysql
Если не установлена, ставим MariaDB:
yum install mariadb mariadb-server
Разрешаем и запускаем сервис:
systemctl enable mariadb
systemctl start mariadb
Задаем пароль для суперпользователя базы данных:
mysqladmin -u root password
Подключаемся к базе данных:
mysql -uroot -p
Создаем базу данных, таблицу и пользователя:
> CREATE DATABASE proftpd DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
> CREATE TABLE `proftpd`.`users` (
`username` VARCHAR( 32 ) NOT NULL ,
`password` CHAR( 41 ) NOT NULL ,
`uid` INT NOT NULL ,
`gid` INT NOT NULL ,
`homedir` VARCHAR( 255 ) NOT NULL ,
`shell` VARCHAR( 255 ) NOT NULL DEFAULT ‘/sbin/nologin’,
UNIQUE (`username`)
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
> GRANT SELECT ON proftpd.* TO proftpu@localhost IDENTIFIED BY ‘proftpdpass’;
* данными командами мы создали базу данных proftpd . В ней таблицу users и пользователя proftpu с паролем proftpdpass , которому дали право подключаться только с локального сервера.
Добавляем пользователя в таблицу и отключаемся от базы:
> INSERT INTO `proftpd`.`users` VALUES (‘sqluser1’, ENCRYPT(‘sqlpassword’), ’48’, ’48’, ‘/var/www’, ‘/sbin/nologin’);
> q
* в данном примере мы создаем пользователя sqluser1 с паролем sqlpassword .
Создаем файл с конфигурацией для SQL:
mkdir /etc/proftpd.d
vi /etc/proftpd.d/sql.conf
SQLBackend mysql
SQLEngine on
SQLAuthTypes Crypt
SQLConnectInfo proftpd@localhost proftpu proftpdpass
SQLUserInfo users username password uid gid homedir shell
SQLAuthenticate users*
SQLMinUserUID 33
SQLMinUserGID 33
SQLLogFile /var/log/proftpd/sql.log
Настраиваем proftpd (добавляем строки):
vi /etc/proftpd.conf
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
Include /etc/proftpd.d/sql.conf
А также редактируем опцию AuthOrder :
AuthOrder mod_sql.c
Перезапускаем сервис:
systemctl restart proftpd
Ошибку можно увидеть в некоторых FTP-клиентах при попытке подключиться к серверу, который использует SSL.
Причина: как и следует из сообщения, клиенту не нравится алгоритм шифрования, так как он устарел и не соответствуем требованиям безопасности.
Решение: необходимо использовать сертификат с более стойким алгоритмом шифрования, например sha256. Чтобы получить такой сертификат с помощью утилиты openssl нужно добавить ключ -sha256 ( в инструкции выше используется именно такой подход). Также мы можем получить сертификат от Let’s Encrypt или купить у поставщика SSL.
При попытке работы с каталогом lib, сервис выдает ошибку permission denied .
Причина: при использовании chroot в proftpd используется модуль RLimitChroot, который запрещает работу с «чувствительными» каталогами — lib, etc и так далее.
Решение: если у нас есть необходимость постоянно работать с каталогами, защищенными модулем RLimitChroot, то его действие можно отключить.
Открываем конфигурационный файл:
vi /etc/proftpd.conf
Добавляем строку:
RLimitChroot off
Чтобы настройка применилась, перезапускаем сервис:
systemctl restart proftpd
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…