Debian pure ftpd настройка

Обновлено: 04.07.2024

FTP - очень небезопасный протокол, потому что все пароли и вообще вся информация передается как обычный текст. Использование TLS позволяет зашифровать соединение, что делает FTP намного безопаснее. Данная статья рассказывает о том, как сконфигурировать PureFTPd для работы с TLS на сервере Debian Lenny.

Автор руководства не предоставляет никаких гарантий, что данный метод будет работать для вас!

1 Небольшое предисловие

На вашем сервере долен быть установлен рабочий PureFTPd (установка описана в статье Virtual Hosting With PureFTPd And MySQL (Incl. Quota And Bandwidth Management) On Debian Lenny ).

2 Установка OpenSSL

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

3 Настройка PureFTPd

Если вы хотите разрешить сессии как FTP, так и TLS, выполните команду:

Если же вы хотите разрешить только сессии TLS (без FTP), выполните:

вместо первой команды.

Чтобы запретить TLS совсем (разрешить только FTP), либо удалите файл /etc/pure-ftpd/conf/TLS , либо выполните:

4 Создание SSL-сертификата для TLS

Для использования TLS необходимо сначала создать SSL-сертификат. Я его создаю в /etc/ssl/private, поэтому я вначале создам эту директорию:

После этого можно сгенерировать SSL-сертификат, как показано ниже:

Изменим права доступа к нашему сертификату:

И перезапустим PureFTPd:

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

5 Настройка FileZilla для использования TLS

Для использования FTP с TLS вам необходим FTP-клиент, который бы поддерживал TLS, такой как FileZilla.

В FileZilla откройте Менеджер Сайтов:

Менеджер сайтов FileZilla

Выберите сервер, на котором используется PureFTPd с TLS, в меню "Тип сервера" вместо FTP выберите FTPES:

FileZilla: Тип сервера

Теперь можно соединиться с сервером. Если соединение производится первый раз, вам будет предложено принять новый SSL-сертификат сервера:

FileZilla: Сертификат SSL

Если все прошло успешно, то вы должны теперь видеть содержимое корневой папки сервера:


28 Авг 2018 23:08:04 | 10 комментариев

Настройка сервера на базе Debin 9 для Web-хостинга сайтов (nginx + php-fpm7 + pure-ftpd + phpmyadmin)

В Интернете десятки, а может даже и сотни статей о настройке Linux серверов для хостинга Web-сайтов, что же такого нового в этой статье?

Итак приступим к настройке.

Исходные данные:
VPS сервер, арендованный в apt-get update apt-get upgrade

Устанавливаем правильную часовую зону (Asia/Yekaterinburg):

Устанавливаем вспомогательные пакеты (все они понадобятся нам в дальнейшем):

Добавим настройки среды для пользователя root (опционально, Вы можете это не делать):

Указанные выше настройки среды делают следующее (Многие из них описаны в моей статье про ведение истории команд):
1. Включают подсветку синтаксиса в vim;
2. Включают возможность копировать текст открытый в vim с помощью выделения его мышкой в терминале Putty.
3. При вызове vi будет запускаться редактор vim;
4. Устанавливают настройки хранения и вывода истории команд в консоле;
5. Изменяют командную строку терминала;

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

Настраиваем sudo для нашего пользователя:

Хочу обратить Ваше внимание на формат добавляемой строки в файл /etc/sudoers, обычно многие администраторы добавляют такую строку:

Итак, наша правильная строка выглядит так:

$(hostname) будет заменено на имя сервера и в файл /etc/sudoers добавиться строка:

Проверяем коректность настроек sudo:

Теперь заходим на наш сервер через Putty под пользователем mgrigorev и добавляем свой публичный ssh-ключ:

Разлогиневаемся и пробуем зайти по ssh-ключу, если после подключения к серверу у Вас не был запрошен пароль и в окне Putty при подключении было написано:

то Вы авторизовались по ssh-ключу.

Пробуем перейти в привилигерованный режим выполнив команду:

Будет запрошен пароль пользователя mgrigorev, вводим его и мы должны увидеть приглашение вида:

Если все получилось, то отключаем возможность входа на сервер под пользователем root:

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

2. Установка БД MariaDB 10.3

Я не буду останавливаться на установке и первоначальной настройки MariaDB 10.3, т.к. у меня в блоге есть отдельная полная статья на эту тему, на данном сервере я все делал как в статье.

3. Установка и базовая настройка Nginx

Скачиваем и добавляем ключ Nginx Inc. на нашу систему:

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

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

Обновляем список пакетов:

Устанавливаем Nginx и OpenSSL (опционально):

Проверим открытые порты:

Теперь займемся базовой настройкой Nginx.

Создадим директорию для хранения SSL сертификатов и DH-ключей, а также создаем файл с параметрами для DHE-шифров:

2048 бит выбраны не случайно, это разумный компромисс между безопасностью, оптимальной нагрузкой на CPU и скоростью работы. Если Вы думаете, что 2048 бит недостаточно, то Вы ошибаетесь, авторы атаки Logjam говорят, что простое число размеров 2048 бит и более не взламываемое при текущем уровне развития техники.

Создадим директории для хранения настроек Web-сайтов:

Я приведу базовый эталонный файл настроек который использую я на 99% серверов, рекомендую использовать его с дополнительными Вашими правками под конкретные нужды. В файле присутствуют комментарии для многих параметров.

После того, как мы сохранили наш новый файл настроек nginx.conf проверим конфигурацию Nginx:

Если ошибок нет, то выполняем (это заставит Nginx перечитать конфигурацию):

Меняем системные лимиты на кол.открытых файлов.

Т.к. мы указали в nginx.conf параметр worker_rlimit_nofile = 10000, то будем исходить из него.

Традиционно во всех статьях в Интернет все меняют лимиты через редактирование файла /etc/security/limits.conf, но это неправильно, т.к. для Debian 8 и Debian 9 этот файл не работает.

В Debian 8 и Debian 9 используется система инициализации systemd и поэтому лимиты на максимальное количество открытых файлов нужно настроить для systemd, для этого выполняем:

Теперь проверим лимиты, для этого смотрим строку «Max open files» в выводе:

Все отлично! Nginx работает, лимит открытых файлов мы поменяли.

4. Установка и базовая настройка PHP 7.0 и PHP-FPM

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

Отредактируем некоторые настройки PHP (cli):

Отредактируем некоторые настройки PHP (fpm):

Мы установили следующие базовые настройки для php (cli):

И установили базовые настройки для php (fpm), которые будут применяться для всех php-fpm пулов по умолчанию:

Вы можете дописать необходимые Вам настройки.

5. Создание и настройка площадки для сайта

Скачиваем мои скрипты и распаковываем:

Результат работы скрипта:

Что делает этот скрипт ?

Он выполняет вот такие команды на основе введенных данных и файла настройки /etc/nginx/settings.conf:

Как видите, скрипт делает довольно много работы, а главное делает он ее с предварительной проверкой многих параметров системы. А после выполнения практический каждой команды он проверяет результат ее выполнения и если что-то пойдет не так, то выполнение будет остановлено.
Именно из-за необходимости выполнения большого числа рутиных команд я и написал скрипт автоматизации nginx-create-vhost.sh

Скрипт ./nginx-create-vhost.sh создает следующую иерархию каталогов для размещения web-сайта:

Все файлы конфигурации Nginx будут создаваться в каталоге /etc/nginx/sites-available
Все активные сайты активируются путем создания симлинка в каталоге /etc/nginx/sites-enabled на соответствующий файл в /etc/nginx/sites-available
Все файлы настроек пулов php-fpm для Debian 9 будут создаваться в каталоге /etc/php/7.0/fpm/pool.d, для Debian 8 или Oracle Linux каталоги будут другие.
Все файлы правил ротации логов будут создаваться в каталоге /etc/logrotate.d

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

Например если у Вас сайт на WordPress, то файл может принять такой вид (привожу только часть блоков location):

После изменения файла конфигурации Nginx не забудьте проверить конфигурацию и перезагрузить ее:

Ниже представлен типовой файл настроек пула php-fpm (/etc/php/7.0/fpm/pool.d/web1.conf)
Файлы пула называются по логину создаваемого пользователя от имени которого данный пул будет работать.
Вы можете изменить файл шаблона template/php_fpm.conf.template на основе которого создаются настройки пула php-fpm.

Вы можете добавлять в этот файл уникальные для каждого сайта настройки php, например увеличим лимит памяти (memory_limit) для сайта, для этого добавим в файл /etc/php/7.0/fpm/pool.d/web1.conf настройку

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

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

Удалим каталог сайта, все настройки php-fpm, nginx, logrotate, а так же пользователя и группу с правами которой работал php-fpm:

ВНИМАНИЕ! Скрипт nginx-remove-vhost.sh удаляет все настройки созданные скриптом nginx-create-vhost.sh включая каталог с сайтом, логами и т.п., он не спросит подтверждения, он удалит тот каталог в /var/www что Вы укажите в опции -d и удалит пользователя и группу указанные в опциях -u и -g

6. Расширенная настройка Nginx

Почему я выделил эти настройки в отдельный пункт и что сюда входит ?

Сохраняем это в файл /etc/nginx/conf.d/fallback.conf, правим под себя IP адрес вашего сервера.
Чтобы Nginx подключил конфигурацию из файла /etc/nginx/conf.d/fallback.conf нужно чтобы каталог /etc/nginx/conf.d был определен в директиве include в файле /etc/nginx/nginx.conf, примерно так:

После этого проверяем конфигурацию Nginx и перезагружаем ее:

Можно попробовать с другого сервера установить соединение с помощью curl, например так:

7. Установка и настройка phpMyAdmin

Для Web-разработчиков phpMyAdmin необходим как собственно и сам PHP, поэтому давайте установим и настроим его.

Воспользуемся моим скриптом nginx-create-vhost.sh для создания этой сервисной площадки:

Здесь в команде chown мы назначаем владельца и группу для файлов phpMyAdmin, у Вас это будут другие пользователь и группа.

8. Установка и настройка Pure-FTPd

Теперь установим и настроим ftp-сервер Pure-FTPd.

В качестве базы хранения пользователей мы будем использовать локальную базу Pure-FTPd.
Для начала отключим авторизацию по системный учетным записям через подсистему PAM, для этого остановим Pure-FTPd и выполним ряд команд:

Настроим некоторые полезные опции Pure-FTPd:
1. Запретим анонимный вход;
2. Включим поддержку chroot, это значит, что пользователь будет ограничен своим домашним каталогом и не сможет перейти выше уровнем;
3. Включим расширенное ведение логов;
4. Оставим поддержку только IPv4;
5. Увеличим максимальное число клиентов до 100;
6. Разрешим отображение в директориях файлов начинающихся с точки;
7. Определим список пассивных портов;
8. Зададим кодировку по умолчанию;
9. Увеличим лимиты на количество отображаемых в директориях файлов и глубину вложенности;

Проверим, что демон pure-ftpd запустился:

Посмотрим список открытых портов:

Отлично, Pure-FTPd работает.

Теперь можно добавить виртуального пользователя (логин mysite):

При первом запуске данная команда создает базу пользователей, а после любых операций с пользователями — обновляет (не забывайте ее запускать каждый раз):

Просмотрим список пользователей:

Для просмотра подробной информации о пользователе mysite выполним:

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

Для смены пароля пользователя mysite выполните:

Для смены домашней директории пользователя mysite выполните:

Для удаления пользователя mysite выполните:

Pure-FTPd пишет логи в файл /var/log/messages, поэтому для просмотра логов нужно отфильтровать их по слову pure-ftpd, например так:

Расширенный лог пишется в файл /var/log/pure-ftpd/transfer.log, в нем можно посмотреть кто, когда и какие операции выполнял после прохождения аутентификации. Сами попытки аутентификации (удачные и не удачные) нужно смотреть в файле /var/log/messages

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

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

Это документ описывает как установить PureFTPd сервер, который использует виртуальных пользователей из базы данных MySQL вместо реальных пользователей системы. Это позволит иметь тысячи пользователей ftp на одной машине. Кроме того, я покажу как использовать квотирование и ограничить входящую/исходящую пропускную способность. Пароли будут записаны в виде зашифрованных MD5 строк в базе данных.

Для администрирования базы данных MySQL вы можете использовать web-интерфейс, такой как phpMyAdmin, установка которого тоже будет описана в этом документе. phpMyAdmin - это удобный графический интерфейс, благодаря которому не надо будет ничего делать из командной строки.

В статье используется Debian Etch (Debian 4.0). У вас уже должна быть установлена базовая система Debian Etch, как это описано в первых шести главах этого учебника.

Эта статья является практической и не содержит теоретических отступлений.

Статья не дает каких-либо гарантий! Я не утверждаю что это единчтвенный способ настройки. Есть много способов, добиться той же цели. И я не гарантирую, что приведенный способ будет работать у вас.

Предварительные комментарии

Установка MySQL и phpMyAdmin

Всё можно установить одной командой:

Создайте пароль для MySQL пользователя root (замените yourrootsqlpassword на пароль, который хотите использовать):

Затем с помощью следующей команды проверьте какой адрес слушает MySQL.

Если вывод выглядит примерно так:

то это означает, что MySQL слушает только localhost.localdomain, и вы можете безопасно использовать пароль, установленный ранее. Но если вывод выглядит так:

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

Установка PureFTPd с поддержкой MySQL

Для Debian доступен сконфигурированный пакет pure-ftpd-mysql. Установить его можно так:

Затем создаем ftp группу (ftpgroup) и пользователя (ftpuser), на которых будут ссылаться все наши виртуальные пользователи. Замените group- и userid 2001 на номер, который свободен в вашей системе:

Создание базы данных MySQL для PureFTPd

Сейчас мы создадим базу данных, которую назовем pureftpd и MySQL пользователя pureftpd, которого демон PureFTPd будет использовать для подключения к базе данных pureftpd.

Замените строку ftpdpass на пароль, который вы хотите использовать для пользователя pureftpd. Затем создадим таблицу, которая будет нам нужна:

Как вы возможно заметили, командой quit; мы завершаем работу с MySQL.

Конфигурация PureFTPd

Отредактируйте /etc/pure-ftpd/db/mysql.conf. Это делается примерно так:

Убедитесь, что заменили ftpdpass настоящим паролем пользователя pureftpd в строке MYSQLPassword!! Убедитесь, что используете md5 как MYSQLCrypt метод, что означает, что мы запоминаем пароли пользователей как MD5 строки, что гораздо безопаснее использования обычного текста!

Затем создайте файл /etc/pure-ftpd/conf/ChrootEveryone, содержащий строчку yes:

Это заставит PureFTPd делать chroot для каждого пользователя в его домашний каталог и он не сможет простматривать файлы и папке вне домашнего каталога.

Также создайте файл /etc/pure-ftpd/conf/CreateHomeDir, также содержащий строку yes:

Это заставит PureFTPd создавать домашний каталог пользователя если его не существует.

Теперь нам надо сконфигурировать PureFTPd как самостоятельный демон (пока он конторолируется inetd). Чтобы это сделать, мы откроем /etc/default/pure-ftpd-common и изменим значение параметра STANDALONE_OR_INETD на standalone:

Затем изменим /etc/inetd.conf, замментировав строку ftp:

После этого перезапустим Inetd и PureFTPd:

Заполнение базы данных и тесты

Для заполнения базы данных вы можете использовать командный интерпритатор MySQL:

Если вам удалось подключиться - поздравляю! Если нет, то что-то пошло не так.

Теперь, если вы выполните

Администрирование базы данных

Когда вы хотите создать нового пользователя, вам надо создать запись в таблице ftpd. Далее будут описаны все строки этой таблицы:

Таблица ftpd:

User: Имя виртуального пользователя PureFTPd.

status: 0 или 1. 0 означает, что аккаунт отключен и пользователь не может подключится.

Password: Пароль виртуального пользователя.

UID: userid пользователя, который был создан во 2 части.

GID: groupid пользователя, который был создан во 2 части.

Dir: Домашний каталог виртуального пользователя PureFTPd.

ULBandwidth: Скорость закачки для вирткального пользователя и КБ/с. 0 - не ограничена.

DLBandwidth: Скорость скачки для вирткального пользователя и КБ/с. 0 - не ограничена.

comment: Комментарии. Поле можно оставить пустым.

ipaccess: IP адрес, с которого подключаться с данным аккаунтом.

QuotaSize: Квота в МБ.

QuotaFiles: Количество файлов, которое можно сохранять.0 - не ограничено.

Анонимный FTP

Если вы хотите создать анонимный аккаунт (аккаунт, с которым любой может подключаться без пароля), вам надо сделать что-то вроде этого:

Сначала надо создать пользователя ftp (с домашним каталогом /home/ftp) и группу ftp:

Затем создать файл /etc/pure-ftpd/conf/NoAnonymous, содержайщий строку no:

После этого PureFTPd позволит использовать анонимный вход.

Теперь создадим директорию /home/ftp/incoming, в которую позволим анонимным пользователям закачивать файлы. Дадим директории /home/ftp/incoming права 311 и пользователи смогут закачивать файлы, но не смогут их видеть или скачивать. Директория /home/ftp будет иметь права 555, что позволит видеть и скачивать файлы:

Теперь анонимные пользователи могут подключаться, скачивать файлы из /home/ftp и закачивать в /home/ftp/incoming.

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)

PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 13 апреля 2012 г.

Debian: Быстрая настройка pure-ftpd

pure-ftpd - один из многих ftp-серверов под Linux, но как-то так сложилось, что я использую именно его. Приведу небольшой пример его послеустановочной настройки в Debian.

Во-первых, идем в /etc/pure-ftpd/conf/. В некоторых системах все конфигурационные директивы собраны в один файл (типа /usr/local/etc/pure-ftpd.conf), в Debian же каждой конфигурационной директиве соответствует один файл в /etc/pure-ftpd/conf/, где имя файла совпадает с именем директивы (имя регистро-зависимо!), а значение директивы определяется содержимым этого файла:



По-моему не самое лучшее решение, но придется с этим мириться.

По-умолчанию установлены настройки MinUID=1000 (что уже не даст зайти под системными пользователями, в т.ч. под root), NoAnonymous=yes (отключает анонимных клиентов), и включена PAM-аутентификация. Меня устраивает и UNIX-аутентификация, поэтому я задал в файле PAMAuthentication значение 'no', а в UnixAuthentication - 'yes'. Кстати, порядок использования средств аутентификации задается в /etc/pure-ftpd/auth символическими ссылками на соответствующие конфигурационные файлы в /etc/pure-ftpd/conf/:


Единственная опция, которую я решил добавить, это ChrootEveryone, чтобы пользователи блокировались в своей домашней директории. Для этого создаем файл ChrootEveryone, открываем его и записываем в него 'yes' (без кавычек).

Комментариев нет:

Метки

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