Настройка FTP-сервера на примере Ubuntu Linux

12 Июля 2018

Настройка FTP-сервера на примере Ubuntu Linux В данной статье будет показано, как выполняется настройка FTP сервера на Ubuntu Linux. Статья подходит пользователям Виртуального сервера Ubuntu. Для передачи файлов используется протокол FTP (File Transfer Protocol), поэтому мы будем настраивать ни что иное, как FTP-сервер.

Выбор FTP-сервера 

На базе Linux/UNIX разработано очень много различных FTP-серверов, а именно: proftpd, pure-ftpd, wu-ftpd, vsftpd. Какой из них выбрать?

Если вам нужно максимум настроек и максимальная гибкость, тогда нужно выбрать proftpd. Это настоящий монстр (в хорошем смысле этого слова) по сравнению с остальными. 

Vsftpd (Very Secure FTP Daemon) позиционируется как простой, но очень защищенный FTP. Обслуживает официальные репозитарии ftp.debian.org, ftp.redhat.com, ftp.openbsd.org, ftp.freebsd.org и других дистрибутивов. Если настройка FTP сервера Ubuntu выполнена правильно, и есть надежда на лучшую защищенность, он вроде бы работает чуть быстрее — вот что можно сказать о vsftpd. Серьезное ограничение vsftpd — он не позволяет в системе одновременную регистрацию обычных и анонимных клиентов. 

Если у вас совсем простой проект и вам нужен сервер, который практически не нужно настраивать, тогда ваш выбор — pure-ftpd. Сервер простенький, но на production-серверах его использовать не рекомендуется. 

Самый древний вариант — wu-ftpd. Старый и «дырявый». По причине его почтенного возраста и не очень совершенной безопасности не рекомендуется к использованию. Оптимальным вариантом на сегодняшний день является сервер proftpd. Настройка FTP сервера Ubuntu такого типа требует знаний, но это наиболее гибко настраиваемое и при этом защищенное решение. 

intro.png

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

Для установки proftpd нужно установить одноименный пакет, который имеется во всех дистрибутивах Linux. Введите команду: 

apt install proftpd

1.png

Рис. 1. Установка FTP-сервера 

Конфигурационные файлы сервера хранятся в каталоге /etc/proftpd. Основной конфигурационный файл называется proftpd.conf и будет рассмотрен далее. 

Управление и настройка FTP сервера Ubuntu выполняется с помощью команд: 

# service proftpd start 

# service proftpd restart 

# service proftpd stop 

# service proftpd status 

Первая команда, как обычно, запускает сервер, вторая — перезапускает, третья — останавливает. Последняя команда показывает состояние сервера. Когда серверу «плохо», с помощью этой команды можно узнать, что ему «не нравится». Пока запускать сервер не нужно. 

Настройка FTP-сервера 

Далее — небольшое практическое руководство, необходимое чтобы была выполнена настройка FTP сервера Ubuntu. Первым делом нужно исправить директиву DefaultRoot так:

DefaultRoot ~

Для каждого пользователя его домашний каталог станет его корневым каталогом. Это означает, что клиент не сможет выйти за пределы его домашнего каталога и прочитать ваши системные конфигурационные файлы. 

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

В глобальной секции можно ограничить доступ только пользователям вашей виртуальной сети, для этого потребуется дополнительная настройка FTP сервера Ubuntu. Это можно сделать путем ограничения операции LOGIN, например: 

der deny, allow

DenyAll

Allow from 10.0.0.

IP-адрес виртуальной сети можно посмотреть в разделе Сети панели управления Xelent. Если у вас несколько виртуальных сетей, нужно указать IP-адрес сети, к которой подключен настраиваемый сервер. 

2.png

Рис. 2. IP-адрес виртуальной сети 

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

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

AuthOrder              mod_auth_unix.c 

Если FTP-пользователей немного (пусть даже около сотни), тогда в Linux настройка FTP сервера делается проще. При желании можно использовать аутентификацию PAM: 

AuthOrder  mod_auth_pam.c* mod_auth_unix.c 

Когда же пользователей очень много (несколько сотен или тысяч), удобнее для аутентификации использовать MySQL. В этом случае учетные записи FTP-пользователей будут храниться не в /etc/passwd, а в отдельной таблице MySQL. Такой вариант настройки выходит за рамки этой статьи и будет непременно рассмотрен в следующих наших статьях. Следите за нашим блогом. 

Ускорить аутентификацию может отключение следующих директив: 

IdentLookups off 

UseReverseDns off 

Первая строка отключает Ident-запросы (давно уже не используются), вторая — запрещает разрешать IP-адреса пользователей в доменные имена. При желании вы всегда сможете разрешить IP-адрес в доменное имя вручную, если вам это будет нужно. Зато при частом использовании сервера отключив разрешение IP-адресов, вы существенно повысите скорость работы сервера. 

Директива TimeoutLogin задает, сколько времени можно потратить пользователю на аутентификацию. По умолчанию — 60 секунд. Представьте ситуацию. Пользователь подключается к серверу. Сервер просит его ввести логин. Пользователь его вводит. Затем пользователь долго и нудно вспоминает свой пароль. Если с момента подключения прошло 60 секунд, а пользователь так и не ввел пароль, то он отключается. Но кто сейчас вводит пароль вручную? Обычно он сохраняется в FTP-клиенте таком как Total Commander, Filezilla. Программа вводит пароль моментально, поэтому нечего ждать 60 секунд. Достаточно ожидания в 20 секунд — специально для пользователей, которые вводят пароль вручную. Думаю, 20 секунд вполне достаточно, чтобы ввести имя и пароль вручную: 

TimeoutLogin 20

В Ubuntu установка FTP сервера позволяет указать, сколько клиентов могут подключаться с одного и того же IP-адреса. Если вы настраиваете корпоративный сервер, то, очевидно, с одного IP-адреса может подключаться только один клиент: 

MaxClientsPerHost 1

Но если вы настраиваете FTP-сервер, к которому будут подключаться пользователи Интернета, нужно помнить о NAT. Представьте, что есть другая локальная сеть с одним реальным IP-адресом (как правило, реальный IP-адрес есть только на шлюзе). Получается, что к вашему серверу могут подключиться несколько пользователей из этой сети и у всех них будет одинаковых IP-адрес, хотя сами пользователи будут разные. Обычно такие ситуации — редкие, поэтому можно ограничиться 2–3 клиентами. Но бывают исключения — у вас может быть очень популярный сервер, например, с музыкальным контентом или же вы знаете, что где-то есть другая сеть, практически все пользователи которой будут подключаться к вашему серверу. Здесь решать вам, в Ubuntu установка FTP сервера позволяет настраивать и этот параметр. Пока установим ограничение на уровне 3 пользователей с одного IP-адреса:

MaxClientsPerHost 3

Максимальное число одновременных клиентов задается директивой MaxInstances. Для предотвращения DoS-атак лучше не устанавливать большие значения для этого параметра: 

MaxInstances 20

С другой стороны, если выполняется Ubuntu установка FTP сервера хостинг-провайдера, на котором будет 1000 пользователей, а вы разрешили одновременную работу всего двадцати пользователям, может возникнуть ситуация, когда пользователи не смогут войти на сервер. Тогда придется увеличивать это число. Насколько — нужно смотреть по ситуации и по количеству пользователей. Теоретически можно увеличить это значение до 10% от количества пользователей, например: 

MaxInstances 100

Об оперативной памяти можно особо не заботиться, proftpd довольно экономно ее использует. Каждый процесс proftpd занимает около 2.5 Мб, следовательно, 100 процессов займут всего 250 Мб. Самое страшное — это загрузка процессора. При закачке одного файла один процесс proftpd занимает от 10 до 30% процессорного времени одного ядра. Вот и считаем, что если даже один процесс расходует 10% процессорного времени одного ядра, всего 10 процессов «сожрут» одно ядро процессора. 40 одновременных процессов окажут ощутимое влияние даже на четырехядерный процессор. Вот поэтому в настройках по умолчанию и рекомендует не превышать значение 30 для этого параметра. Также довольно интересный параметр MaxClientsPerUser. Означает, сколько соединений может создать один пользователь. Чтобы один пользователь не залогинился 30 раз и не узурпировал все 30 процессов, рекомендую ограничить это значение до 1: 

MaxClientsPerUser 1 «Only one connection at a time».

Когда выполняется настройка FTP сервера Ubuntu server, первый параметр этой директивы — число соединений. Второй — сообщение об ошибке, которое будет выведено. Если у клиента медленное или нестабильное соединение, бывает так, что он может начать передачу файла, но потом связь может оборваться. Можно задать тайм-аут, определяющий, сколько нужно ждать в такой ситуации до разъединения. Медленные и нестабильные соединения уходят в прошлое, поэтому можно понизить время ожидания с 5 минут (300 секунд) до 2 минут: 

TimeoutStalled 120

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

Максимальная продолжительность сессии с момента аутентификации задается директивой TimeoutSession. По умолчанию эта настройка FTP сервера Ubuntu server составляет 1 час, чего вполне хватит даже для загрузки больших файлов. Например, при относительно низкой скорости загрузки в 1 Мбайт/с файл размером 1 Гб загрузится примерно за 1024 секунды. То есть за одну такую сессию пользователь сможет загрузить три таких файла. Думаю, этого более, чем достаточно. 

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Анонимные пользователи 

По умолчанию секция Anonymous, разрешающая вход анонимных пользователей, выглядит так (все комментарии переведены на русский язык):

<Anonymous ~ftp>

      # Limit LOGIN

      #<Limit LOGIN>

      #     Order Allow,Deny

      #     Allow from .examples.net,113.141.114.1

      #     Deny from All

      #</Limit>

      # Ограничиваем WRITE везде, запрещаем запись полностью

      <Limit WRITE>

            DenyAll

      </Limit>

      # LoginPasswordPrompt -- будем ли отображать приветствие или нет

      LoginPasswordPrompt off

      # DirFakeMode -- прячем настоящие разрешения файлов/каталогов

      DirFakeMode 0640

      # DirFakeUser -- прячем настоящих владельцев файлов/каталогов

      DirFakeUser On

      # DirFakeGroup -- скрываем настоящую группу файла/каталога

      DirFakeGroup On

      # Для анонимного входа можно использовать как имя anonymous, так и ftp

      UserAlias         anonymous ftp

      # Максимальное число одновременных анонимных пользователей

      MaxClients        10

      # Максимальный размер получаемого файла

      #MaxRetrieveFileSize    512 Mb

      # Ограничиваем скорость передачи данных до 255 Кайт/с

      #TransferRate APPE,RETR,STOR,STOU  255

            # Файл 'welcome.msg' будет отображаться при входе, а файл '.message' при

      # каждом новом изменении каталога

      DisplayLogin            welcome.msg

      DisplayChdir            .message

      # Далее следует закомментированная секция Directory, позволяющая указать

      # параметры каталога. В данном случае ограничивается доступ к каталогу

      # pub. Получить доступ к нему могут только сети .examples.net и с IP

# 113.141.114.1

      #<Directory pub>

      #  <Limit ALL>

      #     Order Allow,Deny

      #     Allow from .examples.net,113.141.114.1

      #     Deny from All

      #  </Limit>

      #</Directory>

      # Следующая секция содержит параметры каталога uploads, который обычно

# используется для загрузки файлов анонимными пользователями на сервер.

# Если вам нужна такая возможность, раскомментируйте эту секцию

# Мы запретили чтение этого каталога, но разрешили загрузку в

# него файлов

      #<Directory uploads/*>

      #  <Limit READ>

            DenyAll

      #  </Limit>

      #  <Limit STOR>

            AllowAll

      #  </Limit>

      #</Directory>

</Anonymous>

При желании вы можете расскомментировать необходимые вам строки. Поскольку последняя директива Directory закомментирована, то анонимные пользователи не смогут загружать в каталог uploads файлы. Если нужно разрешить это действие, директиву Directory нужно раскомментировать: 

 <Directory uploads/*> 
        <Limit READ>
            DenyAll
        </Limit>
        <Limit STOR>
            AllowAll
        </Limit>
      </Directory>

Доступ на запись разрешен всем (AllowAll), но мы рекомендуем открыть его только пользователям нашей виртуальной сети — так безопаснее: 

 <Directory uploads/*> 
        <Limit READ>
            DenyAll
        </Limit>
        <Limit STOR>
            DenyAll
            Allow from 10.0.0.
        </Limit>
      </Directory>

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

Как все будет готово, запустим сервер: 

 # service proftpd start 

После запуска просмотрим его состояние (рис. 3): 

 # service proftpd status 

3.png

Рис. 3. FTP-сервер запущен 

На этом все. Если у вас что-то не получилось, обращайтесь в техническую поддержку Xelent.

Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent