Настройка proftpd centos 8

Обновлено: 07.07.2024

Используя ProFTPd настроим доступ по FTP к сайтам на сервере VDS под управлением CentOS 7. Создадим файловую базу пользователей для авторизации с правами от Nginx. Применим подключение с использованием сертификата для TLS.

Введение

Периодически возникает необходимость давать доступ к файлам сайта для веб разработчиков или других пользователей. Так как используется VDS сервер с настроенным функционалом на базе Nginx, то все права на файлы при добавлении и изменении должны быть как у указанного сервиса. Вначале пытался настроить vsftpd но функционал позволяет настроить только права на редактируемые файлы чтобы они оставались такие как были но вот все новые были с правами пользователя. Поэтапно опишу все действия которые привели меня к желаемому результату.

Более подробно вы можете ознакомиться с документацией по настройке сервера FTP на сайте разработчика ProFTPd.

Подготовка CentOS 7

Подключим репозиторий Еpel:

Установим необходимые пакеты для работы:

Чтобы изменения вступили в силу, необходимо перезагрузить сервер или указать команду, чтобы параметры применялись без перезагрузки:

Настройка FirewallD

Установка и настройка

Проверим наличие firewalld:

В минимальной версии CentOS Firewalld не установлен.

Установим FirewallD вез вопросов командой:

Добавим в автозагрузку и запустим:

Проверим статус короткой командой:

Всё хорошо. Можно приступать к настройке доступа к серверу FTP.

Открытие портов для работы по ftp

Добавим порты в FirewallD:

Перезагрузим правила FirewallD:

Установка и настройка ProFTPd

Установим сервер ftp:

Создание файловой базы пользователей ProFTPd

Узнаем ID пользователя и группы Nginx, так как именно под этими данными и должны работать наши пользователи:

Откроем и посмотрим файл базы пользователей:

Видим нашего добавленного пользователя. Для удаления пользователя достаточно закоментировать или удалить строку.

Сменить пароль можно выполнив команду:

Включение Ban листа и возможность подключения по TLS

Включим необходимые значения указные в главном файле конфигурации сервиса:

Если параметр -DTLS включен то без наличия правильно созданного сертификата сервис не стартует. В случае работы без TLS просто не указывайте параметр.

Получение сертификата для TLS подключения

Для работы по TLS необходимо создать сертификат. Создадим сертификат на 365 дней:

После получения перейдите в папку указанную в пути и убедитесь что сертификаты созданы и имеют не нулевой размер! При настройке я неправильно указывал команду создания сертификата и они создавались с нулевым размером.

Редактирование proftpd.conf

Файл хорошо задокументирован и имеет большое количество настроек. В файле будут указанны параметры которые необходимы для наших требований.

Сделаем оригинал копии и откроем главный файл настройки сервиса:

Управление сервером ProFTPd

Добавим в автозагрузку и запустим:

Сервис в автозагрузке и никаких ошибок нет.

Проверим порт на котором работает сервис:

Консольные утилиты статуса ProFTPd

В консоли можно вывести просмотр онлайн статистики выполнив команду:

Просмотр количества подключений выполняется командой:

Логи сервиса

Подключение по FTP c использованием TLS

Для подключения я использую программу FileZilla и приведу скриншоты настройки моего подключения.

Настройка FileZilla для TLS ProFTPd

Информация о сертификате для TLS

Вывод

Произведя данную настройку мы полностью сделали разграничение доступа к разным сайтам на сервере. Обеспечили надежное подключение используя сертификат и ведение всей статистики работы с файлами.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Понравилась статья? Поделитесь ей с друзьями! Пожалуйста, оставляйте свои комментарии

Читая их я получаю информацию которая позволяет мне улучшить качество написания статей. Кроме того, оставляя комментарии вы помогаете сайту получить более высокий рейтинг у поисковых систем. Давайте общаться.

Добавить комментарий Отменить ответ

Метки

Реклама

Советую

Реклама

Комментарии

Вместо CentOS (для меня теперь это Fedora2) будет Rocky Linux :)

Теперь все статьи с Rocky будут?

Деже не надеюсь. Знаю что так и будет!

Хорошее руководство получилось. Надеюсь, Rocky Linux получит такое же распространение, как и Centos.

Ставил. Для моей версии там только контроль параметров и максимум можно запустить тест.

В настройках программы есть возможность серверам по ssh отправлять любые команды.

ProFTPD это FTP-сервер с открытым исходным кодом и один из наиболее часто используемых, безопасных и надежных демонов передачи файлов в средах Unix, благодаря простоте конфигурации файлов, скорости и легкой настройке.

Установите Proftpd в CentOS 7

Установите Proftpd в RHEL / CentOS 7

Требования

  • Установка «CentOS 8.0» со скриншотами
  • Установка RHEL 8 со скриншотами
  • Как включить подписку RHEL в RHEL 8
  • Минимальная установка системы CentOS 7.0
  • Минимальная установка системы RHEL 7.0
  • Активные подписки и функциональные репозитории RHEL 7.0

В этом руководстве вы узнаете, как установить и использовать ProFTPD Сервер включен CentOS/RHEL 8/7 Дистрибутивы Linux для простой передачи файлов из учетных записей локальной системы в удаленные системы.

Шаг 1: Установите Proftpd Server

1. Официальный RHEL / CentOS 8/7 репозиториев не предоставляет бинарных пакетов для ProFTPD Server, поэтому вам нужно добавить дополнительные репозитории пакетов в вашу систему, предоставленные EPEL Repo , используя следующую команду.

Установите EPEL в CentOS 7

Установите EPEL в RHEL / CentOS 7

2. Перед тем, как начать установку ProFTPD Сервер, отредактируйте файл хостов вашего компьютера, измените его в соответствии с вашей системой FQDN и протестируйте конфигурации, чтобы они соответствовали именованию вашего системного домена.

Здесь добавьте полное доменное имя вашей системы в строку 127.0.0.1 localhost, как в следующем примере.

Затем отредактируйте /etc/hostname файл, чтобы он соответствовал той же записи FQDN системы, как на скриншотах ниже.

Открыть файл имени хоста Добавить имя хоста в Hosts

3. После редактирования файлов хоста проверьте локальное разрешение DNS, используя следующие команды.

Как проверить имя хоста в CentOS

Проверить имя хоста системы

4. Пришло время установить ProFTPD Server в вашу систему и некоторые необходимые утилиты ftp, которые мы будем использовать позже, введя следующую команду.

Установить FTP в CentOS

Установить Proftpd Server

5. После установки сервера запустите демон Proftpd и управляйте им, введя следующие команды.

Запустить сервер Proftpd

Запустить сервер Proftpd

Шаг 2. Добавьте правила брандмауэра и файлы доступа

6. Теперь ваш сервер ProDTPD работает и прослушивает подключения, но он недоступен для внешних подключений из-за политики брандмауэра. Чтобы включить внешние подключения, убедитесь, что вы добавили правило, открывающее порт. 21, с использованием firewall-cmd системная утилита.

Откройте порт FTP в CentOS

Откройте порт Proftp в брандмауэре

7. Самый простой способ получить доступ к FTP-серверу с удаленных машин - это использовать браузер, перенаправив его на IP-адрес или доменное имя вашего сервера с использованием протокола ftp для URL-адреса.

8. Конфигурация по умолчанию на сервере Proftpd использует действительные учетные данные локальных учетных записей системы для входа в систему и доступа к файлам вашей учетной записи, которая является вашей $ HOME системный путь учетной записи, определенный в /etc/passwd файл.

Доступ к Proftpd из браузера Индекс файлов Proftpd

9. Чтобы заставить ProFTPD Server автоматически запускаться после перезагрузки системы, то есть включить его в масштабе всей системы, введите следующую команду.

Вот и все! Теперь вы можете получать доступ к файлам и папкам своей учетной записи и управлять ими с помощью протокола FTP, используя браузер или другие более продвинутые программы, такие как FileZilla , который доступен практически на любых платформах, или WinSCP , отличная программа для передачи файлов, работающая в системах на базе Windows.

Предлагаемое чтение: Как установить, настроить и защитить FTP-сервер в CentOS 7

О следующей серии руководств по ProFTPD Server на RHEL / CentOS 8/7, Я расскажу о более продвинутых функциях, таких как включение анонимной учетной записи , использовать для передачи файлов с шифрованием TLS и добавление виртуальных пользователей.

Веб-сервер, настроенный по данной инструкции можно будет использовать для размещения собственных сайтов в локальной сети или сети Интернет. Данная инструкция проверена для CentOS 8.

Общая настройка системы

Установка пакетов

1. Обновляем CentOS:

2. Устанавливаем репозиторий EPEL и дополнительные пакеты для загрузки и распаковки:

dnf install epel-release wget unzip

Время

1. Устанавливаем часовой пояс:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* данной командой мы установим часовой пояс по московскому времени.

2. Устанавливаем и запускаем службу для автоматической синхронизации времени:

dnf install chrony

systemctl enable chronyd

systemctl start chronyd

Настройка безопасности

1. Отключаем SELinux:

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

* первая команда редактирует конфигурационный файл, чтобы SELinux не запускался автоматически, вторая — отключает его разово. Подробнее читайте статью Как отключить SELinux.

2. Открываем необходимые порты в брандмауэре:

firewall-cmd --permanent --add-port=/tcp

firewall-cmd --permanent --add-port=/tcp

firewall-cmd --permanent --add-port=/tcp

* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); 25, 465 и 587 порты нужны для работы почтового сервера по SMTP; последняя команда перезапускает firewalld, чтобы применить новые правила. Подробнее про настройку firewalld.

Установка NGINX

dnf install nginx

Внесем небольшую корректировку в файл nginx.conf:

* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.

Разрешаем автозапуск сервиса и запустим его:

systemctl enable nginx

systemctl start nginx

Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:

* обратите внимание, что данное приветствие может иметь и другой вид.

Установка PHP и PHP-FPM

Устанавливаем PHP и php-fpm следующей командой:

dnf install php php-fpm

* В CentOS 8 будет установлена версия php 7.2 и выше

Запускаем php-fpm и разрешаем его автозапуск:

systemctl enable php-fpm --now

Настройка связки NGINX + PHP

Открываем файл для настройки виртуального домена по умолчанию:

В секции location редактируем параметр index на следующее значение:

location / index index.php index.html index.htm;
>

* добавляем index.php в начало списка. Если параметра index нет, создаем его.

А внутри секции server добавим следующее:

Открываем настройки php-fpm:

Проверяем, что параметр listen настроен так:

. иначе, меняем значение. После перезагружаем php-fpm:

systemctl restart php-fpm

Проверяем правильность настроек nginx:

И перезагружаем его:

systemctl restart nginx

Создаем index.php в каталоге сайта по умолчанию со следующим содержимым:

Открываем в браузере IP-адрес нашего сервера. Теперь мы должны увидеть сводную информацию по PHP и его настройкам, например:

Установка MariaDB или MySQL

В данной статье мы установим MariaDB, но процедура установки и настройки MySQL аналогичная. Все расхождения будут отмечены явно в инструкции.

Устанавливаем MariaDB следующей командой:

dnf install mariadb mariadb-server

* для установки mysql выполняем команду dnf install mysql

Разрешаем автозапуск и запускаем СУБД:

systemctl enable mariadb --now

* для работы с mysql меняем mariadb на mysql.

Сразу создаем пароль для учетной записи root:

mysqladmin -u root password

PHP + MariaDB (MySQL)

Для возможности подключаться к базе данных скриптами PHP необходимо установить следующие модули:

dnf install php-mysqli

Если мы установили php5, также ставим php-mysql:

dnf install php-mysql

После перезагружаем php-fpm:

systemctl restart php-fpm

И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:

В phpinfo появилась информация о поддержке MySQL

* нас не должно смущать, что установили мы mariadb, а заголовок mysql. Если посмотреть в таблицу, можно увидеть ячейку Client API version, в которой указано, что используется именно mariadb.

Установка phpMyAdmin

Переходим на сайт разработчика phpMyAdmin и копируем ссылку на нужную нам версию, например, последнюю:

Копируем ссылку на последнюю версию phpMyAdmin

Воспользовавшись скопированной ссылкой, скачиваем архив с установочными файлами:

Распаковываем скачанный архив:

Создаем каталог для phpmyadmin:

. и переносим в него содержимое распакованного архива:

mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/

Задаем владельца для каталога:

chown -R apache:apache /usr/share/phpMyAdmin

* как правило, сервис, которых обрабатываем php-запросы работает от пользователя apache.

Устанавливаем модули php, необходимые для корректной работы phpMyAdmin:

dnf install php-json php-mbstring php-mysqli

Внесем небольшую настройку в конфигурацию phpMyAdmin.

Сгенерируем случайную последовательность символов:

Откроем на редактирование или создадим файл:

Внесем в него строку:

* где jd7n6yIcHOl55ikE7l5HAdNaWwunSHvR — последовательность, которую нам выдала команда head /dev/urandom . ; Также обратите внимание на <?php ?> — если мы создали новый файл, необходимо указать данные теги, так как они открывают код PHP. В противном случае, настройка не применится.

Теперь создадим для phpmyadmin отдельный виртуальный домен в NGINX:

И добавим в него следующее содержимое:

server listen 80;
server_name phpmyadmin.dmosk.local;
set $root_path /usr/share/phpMyAdmin;

location / root $root_path;
index index.php;
>

* где phpmyadmin.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому если нет возможности зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.

После перезапускаем NGINX:

systemctl reload nginx

Также нужно перезапустить php-fpm, так как в процессе установки были добавлены модули для PHP:

systemctl restart php-fpm

Установка Memcached

Первым этапом мы установим и настроим сервис memcached. Вторым — модуль php-memcached.

Сервис memcached

Выполняем установку пакетов:

dnf install memcached libmemcached

Создаем или открываем на редактирование конфигурационный файл для запуска сервиса:

Приводим его к виду:

* где PORT указываем на каком порту будет слушать сервис кэширования; USER — пользователь, под которым должен запускаться сервис; MAXCONN — максимальное число одновременных подключений; CACHESIZE — размер под кэш в мегабайтах; OPTIONS — параметры запуска (в данном примере наш сервис будет принимать запросы только с адреса локальной петли).

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached --now

Модуль для php

Копируем ссылку на исходник memcached

Обратите внимание, что у каждой версии пакета есть свои требования к версии PHP. Внимательно изучаем, подойдет ли версия php-memcached для нашего сервера.

Скачиваем архив, ссылку на который мы скопировали:

Устанавливаем пакеты, необходимые для сборки php-pecl-memcached:

dnf install php-devel zlib-devel make

dnf --enablerepo=PowerTools install libmemcached-devel

Распаковываем скачанный архив:

tar -xvzf memcached-*.tgz

Переходим в распакованный каталог:

Запускаем компиляцию php-расширения:

Копируем созданный модуль в каталог php-модулей:

cp modules/memcached.so /usr/lib64/php/modules/

Создаем конфигурационной файл для подключения расширения:

После установки модуля перезапускаем php-fpm:

systemctl restart php-fpm

Чтобы проверить, что модуль memcached работаем, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:

В phpinfo появилась информация о поддержке Memcached

. или вводим команду:

php -m | grep memcached

Мы должны получить:

Установка и настройка FTP-сервера

В качестве FTP-сервера будем использовать ProFTPd, так как он позволяет авторизовываться под uid системных учетных записей.

ProFTPd можно устанавливать командой:

dnf install proftpd

Загружаем скрипт ftpasswd:

Разрешаем запуск на выполнение скрипта:

chmod +x /etc/proftpd/ftpasswd

Создаем виртуального пользователя:

/etc/proftpd/ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpwww --uid=48 --gid=48 --home=/var/www --shell=/sbin/nologin

  • /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи;
  • ftpwww — имя пользователя (логин);
  • uid и gid — идентификаторы пользователя и группы системной учетной записи (apache);
  • /var/www — домашний каталог пользователя;
  • /sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Изменим права для созданного файла с паролями:

chmod 440 /etc/proftpd/ftpd.passwd

* в противном случае, при запуске proftpd мы получим ошибку «. fatal: AuthUserFile: unable to use /etc/proftpd.d/ftpd.passwd: Operation not permitted. »

Открываем на редактирование конфигурационный файл proftpd:

И редактируем следующее (комментируем):

Создадим конфигурационный файл со своими настройками:

И добавим следующее:

UseIPv6 off
IdentLookups off
PassivePorts 60000 65535

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

* где 60000 - 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и запускаем его:

systemctl enable proftpd --now

Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.

Это базовая и самая простая настройка ProFTPd, но если необходимо настроить TLS или хранить виртуальных пользователей в базе MySQL, читайте подробнее инструкцию по настройке ProFTPd на CentOS.

Несмотря на то, что мы установили и настроили PHP-FPM, Apache нам понадобится, как минимум, по двум причинам. Во-первых, многие сайты используют файл .htaccess, который читает Apache. Во-вторых, последний включает большое число модулей, которые может использовать портал.

В некоторых случаях, можно обойтись без Apache, но в данной инструкции мы опишем процедуру его установки и настройки.

Заходим в настройки:

И редактируем следующее:

* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html

<Directory /var/www/*/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>

* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталогов разрешен со всех адресов (all granted).

И если получаем ответ:

. разрешаем автозапуск и запускаем службу:

Создаем php-файл со следующим содержимым:

NGINX + Apache

Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.

Открываем конфигурационный файл nginx:

Находим наш настроенный location для php-fpm:

Проверяем, есть ли файл:

. и если есть, комментируем его содержимое:

* в данном примере мы отключили обработку всех php-файлов с помощью php-fpm, так как это у нас должен делать apache.

Проверяем и перезапускаем nginx:

systemctl restart nginx

Apache Real IP

Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:

Переходим в каталог /usr/local/src:

Переходим в распакованный каталог:

Собираем модуль и устанавливаем его:

* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой dnf install which.

Создаем конфигурационный файл со следующим содержимым:

Реальный IP-адрес при обращении к Apache

Postfix

Устанавливаем postfix командой:

dnf install postfix

Теперь нам необходимо сделать несколько простых настроек:

.
myorigin = $mydomain
.
inet_protocols = ipv4
.

Открываем карту пересылки:

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@dmosk.local.

Для применения настроек перезагружаем почтовый сервер:

systemctl restart postfix

Тюнинг веб-сервера

Открываем на редактирование следующий файл:

И правим следующее:

upload_max_filesize = 512M
.
post_max_size = 512M
.
short_open_tag = On
.
date.timezone = "Europe/Moscow"

systemctl restart php-fpm

NGINX

Открываем на редактирование следующий файл:

После перезапускаем nginx:

systemctl restart nginx

Postfix

Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:

Создание первого сайта

Задаем переменную, значение которой будет домен сайта:

Создаем новый файл виртуального домена NGINX:

* обязательно на конце должен быть .conf, так как только такие файлы веб-сервер подгружает в конфигурацию.

И добавляем следующее содержимое.

access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;

gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>

* где site1.local — домен, для которого создается виртуальный домен; /var/www/site1 — каталог, в котором будет размещаться сайт.
** все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).
*** обратите внимание на выделения полужирным — здесь нужно подставить свои данные.

server listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;

access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;

gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>

Теперь настроим виртуальный домен в Apache:

<VirtualHost *:8080>
Define root_domain site1.local
Define root_path /var/www/site1

ErrorLog $/log/apache/error_log
TransferLog $/log/apache/access_log
</VirtualHost>

Создаем каталоги для сайта:

mkdir -p /var/www/$TMP_SITE/

mkdir -p /var/www/$TMP_SITE/log/

Создаем индексный файл со следующим содержимым:

Задаем права на папки:

chown -R apache:apache /var/www/$TMP_SITE

chmod -R 775 /var/www/$TMP_SITE

Проверяем корректность настроек конфигурационных файлов:

systemctl reload nginx

Открываем сайт в браузере.

При необходимости, создаем базу данных.

> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.

Ситуация: Имеется у меня большая коллекция разных интересных программ для компьютера. Коллекция большая! Скидывать друзьям то одно, то другое мне надоело и решил я сделать единый репозиторий для всех друзей, но с личной парольной аутентификацией и контролем доступа каждого лично. Мало ли кто из них свой логин и пароль разбазарит по всему городу. Еще требуется, чтобы кто-нибудь кривыми лапками не вырезал безвозвратно файлы на свой компьютер или подкинуть на сервер чего лишнего.

Задача: Организовать FTP хранилище с виртуальными пользователями и парольной аутентификацией. Запретить изменение файлов в каталогах и запись новых, а скачивание не ограничивать ничем.


2. Описание программы

ProFTPD (Professional FTP Daemon) — FTP-сервер для Linux и UNIX-подобных операционных систем.

ProFTPD использует лишь один конфигурационный файл proftpd.conf , который располагается по умолчанию в CentOS 7 тут /etc/proftpd.conf . Сервер может быть настроен для работы нескольких виртуальных хостов, также поддерживает chroot.

3. Установка программы

Первым делом проверим имеется ли она уже на сервере?

Для установки данной программы нам потребуется подключить репозиторий EPEL, файловый менеджер Midnight Commander, утилиты Net Tools:

Ставим сам пакет proftpd из репозитория:

Проверим старт сервиса:


Снова проверим очевидный факт наличия программы:


Проверить на каком порту повисла ProFTPd можно командой:


Создадим резервную копию файла конфигурации программы:

Открываем файл конфигурации /etc/proftpd.conf :

Добавляем туда строки:

Проверяем или есть настройка закрыть пользователя в его домашней директории чтобы не мог видеть другие каталоги в системе:

Найти и закомментировать настройку AuthOrder в файле конфигурации /etc/proftpd.conf .

Добавить в таком виде:

Таким образом мы отключили другие способы авторизации, оставили только через наш файл виртуальных пользователей.

На этом редактирование конфига и закончили, нужно создать файл /etc/ftpd.passwd :

Нужно будет два раза ввести пароль пользователя, после чего все данные запишутся в файл /etc/ftpd.passwd .

Синтаксис:

  • --name ftpuser имя виртуального пользователя.
  • --uid 1001 указывается ID пользователя в системе под которым будет логиниться виртуальный созданный пользователь.
  • --home /home/user/project/somefolder/ указали папку, в которую пользователь будет иметь доступ и не сможет выйти выше благодаря настройке « DefaultRoot

Чтобы пользователь исправно попадал туда куда мы запланировали и не мог там ничего стереть или записать, нужно прописать права использования на каталоге.

Ограничим права доступа на файл с паролями пользователей:

Если используется firewalld в системе, открываем нужные порты:

Если используется iptables в системе, открываем нужные порты:

Перезапустим службу iptables:

Перезапустим службу proftpd:

Минимальная настройка FTP-сервера proftpd готова c авторизацией через файл proftpd.conf и виртуальными пользователями.

4. Logging — включаем ведение логов FTP-сервера.

Очень полезно вести логирование захода пользователей на сервер. Если кто-то из них теряет свой пароль и пароль уходит в массы, но потом масса посторонних людей начинает ошиваться в файлохранилище. Таким образом можно отследить кто виновник такой ситуации.

Создаём сами файлы логов:

Редактируем файл конфигурации /etc/proftpd.conf .

В него добавляем строки:

Уровень логгирования устанавливается опцией DebugLevel , уровни от 0 до 9 , где 9 — наиболее подробное логирование:

Перезапустим службу proftpd:

Через некоторое время можно смотреть кто, где и когда был в гостях на сервере:



5. Настройка ротации логов.

Последний штрих в настройке ftp-сервера — ротация логов!

Если этого не сделать, то через какое-то, обычно продолжительное, время возникает проблема в связи с огромным размером log-файла.

У нас уже будет файл конфигурации logrotate для proFTPd, который был создан во время установки — /etc/logrotate.d/proftpd .

Приведем его к следующему виду:

Предлагается ротировать файлы логов по достижению ими размера в 10 Мб, сжимать после ротации и хранить 10 архивов с логом.

Читайте также: