FTP-сервер для операционных систем на базе Linux
Основным протоколом передачи файлов в Интернете является FTP. Он появился на заре Интернета и до сих пор остается одним из самых востребованных. Конечно, в последнее время для передачи файлов большого объема между пользователями в большинстве случаев используются различные системы на базе технологии peer-to-peer, однако для компаний и большинства сайтов, которые выкладывают информацию, основным протоколом по-прежнему является FTP.
Протокол FTP базируется на TCP-соединении с применением клиент-серверной технологии. Первоначальное TCP-соединение инициируется пользователем к серверу по порту 21 (это порт по умолчанию, но может использоваться и другой). Управление обменом осуществляется по каналу управления в стандарте протокола telnet. Команды пользователя и ответы сервера проходят только через управляющий канал. Таким образом, существует возможность инициировать передачу файлов между двумя FTP-серверами. Затем, после согласования сторон и при необходимости авторизации пользователя, FTP-сервер инициирует новое TCP-соединение от 20-го порта сервера, по которому и передаются данные. Этот режим называется активным, поскольку сервер сам запрашивает порт у клиента и устанавливает соединение для передачи данных. Существует также пассивный режим, когда после согласования по управляющему каналу соединение для передачи данных инициируется клиентом, который запрашивает порт из динамического диапазона (1024-65535) у сервера. Если необходимо передать файлы с сервера на сервер, клиент поддерживает связь с обоими серверами и управляет работой канала обмена, который устанавливается между серверами. Однако на практике такой способ применяется редко, поскольку в некоторых случаях позволяет злоумышленникам использовать этот тип соединения в своих целях.
Большинство серверов поддерживают и пассивный и активный режим работы, при этом оба типа могут применяться одновременно. Для операционных систем семейства Linux существует множество различных FTP-серверов. Среди них стоит отметить проект под названием proftpd — один из немногих, зарекомендовавших себя как отличное решение и для систем на базе Linux, и для систем на базе *BSD.
Установка
В настоящий момент стабильной, проверенной версией считается пакет proftpd 1.3.0a. Скачать его можно с сайта разработчика — www.proftpd.org. Там же можно найти последние версии, которые еще не получили статус релиза. Пакет распространяется по лицензии GPL, то есть бесплатно. Он расположен на нескольких серверах-зеркалах и представлен в виде gz- или bz2-архива. В архиве находится исходный код, который необходимо скомпилировать, чтобы получить рабочую программу. Компиляция выполняется обычным методом.
Необходимо запустить файл для автоматической конфигурации пакета перед сборкой. Сделать это можно, разархивировав исходный код в отдельную папку и, находясь в ней, запустив файл ./configure. Этот скрипт автоматически определит настройки системы и сообщит о необходимых библиотеках, если таковые требуются для установки. Также при запуске скрипта можно сделать специальные настройки: исключить/добавить модули, указать папку для установки или имя пользователя, для которого этот сервис будет установлен. Более подробную информацию о возможных командах для скрипта можно найти на сайте разработчиков или в файле install, который находится в корне архива с исходным кодом. После конфигурирования пакета необходимо скомпилировать его командой make и make install. По умолчанию в системах Linux сервер proftpd устанавливается в папку /usr/local. Исполняемый файл находится в папке
/usr/local/sbin, а кроме того, он может быть запущен обычной командой proftpd из командной строки. После установки необходимо создать в папке /usr/local/etc/ конфигурационный файл proftpd.conf, который будет определять настройки FTP-сервера. В архиве с дистрибутивом в папке sample-configurations находятся типичные конфигурационные файлы, которые можно использовать для создания первоначального сервера, а также для проверки его работоспособности. Эти файлы можно переименовать в proftpd.conf, и тогда сервер будет работать в зависимости от указанных настроек. Конфигурация, которая прописана в файле anonymous.conf, позволяет получить доступ любому пользователю к серверу в папку
/home/ftp, а также возможность залить файлы в папку uploads. Конфигурация basic.conf практически идентична предыдущей, но не позволяет загружать файлы на сервер. В качестве примера в этой папке также присутствуют конфигурационные файлы для серверов с виртуальными серверами (virtual.conf, complexvirtual.conf), с помощью которых можно организовать несколько серверов, которые будут сопоставлены разным доменным именам.
Настройка
Синтаксис основного конфигурационного файла практически полностью совпадает с синтаксисом конфигурационных файлов web-сервера Apache и является стандартом для большинства веб-сервисов для платформы Linux.
FTP-сервер proftpd поддерживает многочисленные варианты работы: от мини-сервера для локальной сети, где доступ к папкам имеют все пользователи, до «тяжелого» сервера с авторизацией пользователей через базу данных и созданием многоуровневых виртуальных серверов. Поскольку можно найти описание большинства конфигураций на сайте или самостоятельно изучить примеры, остановимся на базовых настройках, которые понадобятся для эффективной работы сервера. Сразу обратим ваше внимание на то, что для обеспечения возможности подключения любых клиентов в системе должны присутствовать пользователи ftp и nobody, а также соответствующие группы, в противном случае сервер может некорректно работать с логинами anonymous (то есть произвольными неавторизованным пользователями).
В базовом конфигурационном файле должны присутствовать следующие директивы (параметры), без которых сервер работать не будет:
- Port — опция отвечает за порт, на котором сервер будет прослушивать входящие соединения от клиентов. По умолчанию для FTP-серверов номер порта — 21;
- ServerName («название») — здесь указывается название FTP-сервера, которое отображается клиенту при успешном соединении;
- ServerType — данный параметр может принимать два значения: standalone и inetd. Первый параметр необходим в том случае, если сервис proftpd запускается отдельно и самостоятельно прослушивает входящие соединения на указанном порту. При этом повышается скорость соединения и не требуется дополнительная загрузка конфигурационного файла при каждом обращении клиента. Если указан параметр inetd, сервер не прослушивает входящие соединения на указанном порту — за это отвечает сервис inetd, который объединяет сетевые сервисы системы и уменьшает нагрузку на сервер. Однако для корректной работы в режиме inetd необходимо прописать настройки FTP-сервера в конфигурационном файле inetd. В этом случае сервер запускается через inetd, и контролировать его сложнее;
- <Limit LOGIN> </Limit> — опция отвечает за доступ к FTP-серверу. С ее помощью можно заблокировать доступ с определенных IP-адресов или доменных имен либо же, наоборот, открыть доступ к серверу только определенным клиентам. Типичный пример синтаксиса этого параметра:
<Limit LOGIN>
Order Deny, Allow
Deny from 192.168.
Deny from .host.net
Allow from 10.
<Limit>
Кроме того, можно указать более общие настройки. Например: Allow from All или Deny from All, когда доступ соответственно открыт или закрыт всем клиентам. Опция <Limit LOGIN> может применяться как ко всему серверу в целом, так и к конкретным виртуальным серверам или директориям;
- PassivePorts — параметр отвечает за точное указание портов, которые будут использоваться при пассивном соединении; рекомендуется указывать порты из виртуального диапазона (1024-65535) для исключения конфликтов с другими сервисами. Если эта опция не указана явно, сервер сам назначит необходимые порты;
- User и Group — эти параметры указывают на пользователя, от лица которого запускается сервис, и его группу. По умолчанию эти параметры имеют значение nobody для доступа к серверу любых клиентов (пользователи anonymous);
- MaxInstances — опция отвечает за максимально возможное количество процессов сервера для защиты от DoS-атак. Она работает только в том случае, когда в параметре ServerType указан тип standalone, в противном случае эти настройки определяются сервисом inetd;
- <Directory path></Directory> — опция необходима для описания параметров директории path. Внутри этой директивы можно также указывать другие настройки доступа вида <Limit></Limit>;
- <Anonymous path></Anonymous> — параметр назначает корневую директорию path для пользователей, которым не требуется авторизация, а также ее параметры.
Все наиболее распространенные конфигурации сервера можно найти в архиве с исходным кодом или на сайте разработчиков. Большинство из них имеют подробные комментарии к каждому параметру.
Следует отметить, что при стандартной установке пакета в систему добавляется несколько утилит для работы с proftpd. Утилита ftpshut позволяет корректно завершить работу FTP-сервера. Синтаксис команды ftpshut можно узнать, добавив опцию help. Эта утилита, кроме обычного завершения процесса, позволяет завершить работу после окончания всех текущих соединений или трансферов файлов, что очень удобно для пользователей и самого администратора. Дополнительная утилита ftpwho дает возможность увидеть всех пользователей, которые подключены к серверу. Однако самой функциональной утилитой является ftptop — она аналогична стандартной утилите top и позволяет получать статистику о текущих FTP-сессиях, пользователях и передаваемых файлах.
Возможные проблемы
При настройке сервера может возникнуть такая проблема, как нестабильная работа с тремя и более сетевыми интерфейсами. При этом на одном из интерфейсов FTP-сервер не виден. Для ее решения необходимо вручную прописать виртуальный сервер, где явно будет указан IP-адрес этого интерфейса. Одной из возможных причин появления данной проблемы является неправильная таблица маршрутизации.
Другая распространенная проблема, возникающая при настройке proftpd, касается работы клиентов Windows, которые заходят на сервер из-под браузера Internet Explorer. Она проявляется либо в недоступности сервера — клиент выводит сообщение «Отсутствует доступ к папке», либо в долгом обмене при инициировании первоначального соединения. Для ее решения необходимо явно указать пассивные порты с помощью директивы PassivePorts в конфигурационном файле proftpd.conf.
В целом пакет proftpd является отличным решением для построения как корпоративного FTP-сервера с возможностью работы виртуальных серверов на одном компьютере, так и небольшого домашнего файлового архива. Уже включенные в дистрибутив типичные конфигурационные файлы позволяют за несколько минут запустить FTP-сервер, настроенный на различные типы задач.