Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

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

FTP, второй по популярности в интернет протокол после HTTP, предназначен для обмена файлами. Он предназначен только для передачи файлов, зато делает это хорошо. К сожалению, изначально протокол спроектирован так, что пароли, данные и все прочее передаются открытым текстом и их можно легко перехватить – однако большинство серверов предоставляют только анонимный доступ, так что это не проблема.

В этом документе изложены рекомендации, которые помогут вам правильно настроить FTP-сервер и свести к минимуму угрозу проникновения в систему злоумышленников через этот вид сервиса.

Настройка анонимного FTP-сервера

Для начала вам необходимо создать бюджет пользователя ftp. Для этого следует добавить данные пользователя в системный файл паролей, если это не сделано пакетом ftp-сервера при установке. Бюджет ftp не должен использоваться кем-либо для входа в систему, поэтому задавать реальный пароль для него не следует; группа пользователя также может быть любой, не имеющей каких-либо прав на файловой системе – например, собственно ftp (если группа ещё не существует, то создайте её), укажите рабочий каталог для него, например /var/ftp, а вместо интерпретатора командной строки укажите /bin/false. Таким образом, запись в файле /etc/passwd для пользователя ftp будет иметь примерно следующий вид:

ftp:x:14:50:FTP User:/var/ftp:/bin/false

Итак, после того, как “официальный” пользователь будущего FTP-сервера создан, можно обратить внимание и на его домашний каталог. Домашним каталогом пользователя ftp является ~ftp – это полный путь к каталогу, который будет “корневым” для всех анонимных пользователей. В нашем случае это /var/ftp. Владельцем этого каталога будет являться пользователь root. Да-да, именно он, а не ftp. Это должно быть сделано в целях вашей же (FTP-сервера и системы в целом) безопасности – иначе однажды вы можете узнать неприятную новость, что больше не являетесь хозяином в своей системе.

Для нормального функционирования будущего сервера неплохо было бы создать дерево подкаталогов, в которых будут размещаться некоторые необходимые в работе файлы. Это ~ftp/bin, ~ftp/etc, ~ftp/lib и ~ftp/pub. На все перечисленные выше каталоги необходимо разграничить права доступа. Для ~ftp/bin, ~ftp/etc и ~ftp/lib это должны быть 711, а для ~ftp/pub – 775. Владельцем для всех каталогов будет являться root – это делается для того, чтобы содержимое первых трёх каталогов было доступно только для выполнения, во избежание копирования выполняемых файлов находящихся в них с целью изучения их на предмет уязвимости – в отличие от ~ftp/pub, который должен быть доступен для всех пользователей FTP-сервера, чтобы они могли беспрепятственно (разумеется, в рамках дозволенного) использовать те файлы, которые вы хотите сделать доступными публично.

Группу, которой принадлежит ~ftp/pub, лучше сменить с root на специальную, в которую включены пользователи, имеющие право изменения содержимого этого каталога – этим не стоит заниматься от имени root.

Для чего нужны эти каталоги и что в них должно находиться – спросите вы. Поскольку сеанс работы с анонимным FTP-сервером выполняется в изолированной среде выполнения (chrooted environment), то каталог ~ftp становится корневым каталогом, а каталоги ~ftp/bin, ~ftp/etc, ~ftp/lib и ~ftp/pub маскируются соответственно под /bin, /etc, /lib и /pub. Таким образом, ваш сервис оказывается отрезанным от системных библиотек и прочих “опасных” программ, которые, тем не менее, ему нужны в работе и их требуется предоставить, не нарушая при этом безопасности системы. Какие именно программы и библиотеки необходимы – зависит от того, какой FTP-сервер вы будете использовать, так как у большинства из них свои специфические особенности. Некоторым, например, требуется наличие ~ftp/etc/passwd для получения имен владельцев и групп файлов. Поэтому вы должны будете положить копию вашего системного файла /etc/passwd, предварительно удалив оттуда все лишние записи.

Для того, чтобы разрешить пользователям вашего сервера доступ на запись, создайте каталог ~ftp/pub/incoming с правами доступа 733 (владелец – root), тем самым предоставив право записи в этот каталог, но лишив возможности просмотра его содержимого.

Замечание

Совет: для предотвращения атаки на ваш сервер через ftp путём переполнения диска информацией с целью заблокировать работу всей системы создавайте каталог ~ftp/pub/incoming на отдельном разделе.

Особенности FTP-серверов, входящих в комплект поставки ALT Linux Master

В комплект поставки нашего дистрибутива входят следующие FTP-серверы:

  • libra-ftpd (Libra FTP daemon) - для организации FTP-сервера с анонимным доступом к предоставляемым ресурсам, подобного описанному в предыдущей главе;
  • vsftpd (Very Secure FTP Daemon) – полнофункциональный FTP-сервер.

Разумеется, “Very Secure” в его названии не является гарантией, однако свидетельствует о том, что при написании кода целью стояло создание максимально безопасной и аккуратно выполненной программы, минимально чувствительной к атакам со стороны.

Если вам достаточно анонимного FTP-сервера, то вам подойдет libra-ftpd в сочетании с anonftp. Этот пакет содержит дерево каталогов и набор файлов необходимых для организации сервера с анонимным доступом, который не требует дополнительной настройки – если только вы не захотите, например, предоставить пользователям доступ на запись. Всю передачу данных этот сервер осуществляет в пассивном режиме, что в высшей степени безопасно, однако не всегда удобно. Хорошим решением будет применение libra-ftpd в качестве локального сервера в организации. Его использование в качестве публичного сервера не совсем оправдано, так как его система безопасности настроена слишком параноидально для этой задачи.

Если же вам необходим надёжный, защищённый и одновременно чрезвычайно быстрый и масштабируемый FTP-сервер, предоставляющий не только анонимный доступ к ресурсам вашего сервера, но и доступ локально зарегистрированным пользователям, то вам безусловно понадобится более серьёзное средство, такое как vsftpd. Примером такого использования может послужить серверный пул ftp.redhat.com, обрабатывающий по 15000 соединений одновременно.

Что же придаёт ему такую популярность? Во-первых, конечно же безопасность работы. Каждая строка его кода неоднократно подвергалась самым жестким проверкам со стороны специалистов в вопросах безопасности. Другой стороной его привлекательности безусловно является простота и гибкость настройки. Все необходимые настройки осуществляются путем редактирования единственного конфигурационного файла /etc/vsftpd.conf.

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

Для предоставления доступа к FTP-серверу локально зарегистрированным пользователям необходимо удалить знак комментария перед директивой local_enable=YES – тем самым вы предоставите доступ пользователям к их домашним и системным каталогам. Для ограничения возможности пользователя перемещаться по дереву каталогов в пределах только его домашнего каталога достаточно убрать знак комментария из строки, содержащей директиву chroot_list_file, чтобы сообщить vsftpd о необходимости использования изолированной среды выполнения, а также указать имя этого пользователя в файле /etc/vsftpd/chroot_list.

Общие рекомендации

Еще большей безопасности в работе FTP-сервера можно добиться при помощи xinetd. Этот сервер позволяет ограничить количество одновременно выполняемых процессов как по системе в целом, так и для каждого отдельного пользователя, указать пользователя, от имени которого будет выполняться сервис, задать приоритет процесса (nice), указать адреса, с которых разрешено подключение к данной службе, а также время доступа и множество других параметров. Вот наглядный пример файла конфигурации xinetd для vsftpd:

# default: off
# description: The vsftpd FTP server.
service ftp
{
      disable = no # включает службу
      socket_type = stream
      protocol = tcp
      wait = no
      user = root
      nice = 10
      rlimit_as = 16M # устанавливает лимит адресного пространства
      server = /usr/sbin/vsftpd # путь к исполняемому файлу
      only_from = 192.168.0.0 # предоставляем доступ из всей подсети 192.168.0
      only_from = 207.46.197.100, 207.46.197.101 # доступ с указанных адресов
#     only_from = 0.0.0.0 # неограниченный по адресам доступ
      access_times = 2:00-9:00 12:00-24:00 # время, когда возможен доступ
} 

Для получения дополнительной информации по использованию xinetd смотрите страницы руководства xinetd и xinetd.conf.