Служба FTP

Аннотация

Протокол FTP (file transfer protocol, протокол передачи файлов) широко используется для обмена файлами в Интернете и локальных сетях. Это специализированный протокол, который предназначен только для передачи файлов и хорошо приспособлен для выполнения этой задачи. К сожалению, изначально протокол спроектирован таким образом, что пароли, данные и управляющие команды передаются открытым текстом и их можно легко перехватить. Однако это не является проблемой при работе с многочисленными серверами, которые предоставляют только анонимный доступ.

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

FTP-сервер vsftpd

В состав дистрибутива ALT Linux 2.4 Master входит vsftpd (Very Secure FTP Daemon) — полнофункциональный FTP-сервер, позволяющий обслуживать как анонимные запросы, так и запросы от пользователей, зарегистрированных на сервере и имеющих полноценный доступ к его ресурсам. Именно vsftpd рекомендован разработчиками дистрибутива для использования в качестве FTP-сервера.

Разумеется, слова «very secure» (очень защищённый) в названии сервера не являются гарантией полной безопасности, однако указывают на приоритеты его разработчиков. Они стремились создать как можно более надёжную, аккуратно спроектированную и написанную программу, максимально устойчивую к разного рода атакам. Каждая строка кода неоднократно подвергалась тщательным проверкам со стороны специалистов по безопасности информационных систем.

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

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

Организация анонимного доступа на основе vsftpd

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

Для обеспечения надёжности системы архитектура сервера vsftpd позволяет устанавливать соединения от имени специально указанного непривилегированного пользователя, который определяется директивой nopriv_user в конфигурационном файле. Для того, чтобы риск был минимальным, этот пользователь должен обладать как можно меньшими привилегиями. С этой целью при установке vsftpd в системе автоматически создаётся учётная запись псевдопользователя novsftpd. Это регистрационное имя не должно использоваться кем-либо для входа в систему, поэтому реальный пароль для него не задаётся. Вместо командного интерпретатора указывается /dev/null.

При установке пакета anonftp автоматически создаётся каталог, который будет корневым при анонимном подключении, — /var/ftp с необходимыми правами доступа. Владельцем этого каталога является пользователь root, а не псевдопользователь, от имени которого работает vsftpd. Это сделано для обеспечения безопасности FTP-сервера и системы в целом. Группой-владельцем каталога является специальная группа ftpadmin, предназначенная для администраторов FTP-сервера.

Если вы хотите создать в области для анонимного доступа дерево каталогов, начните с каталога /var/ftp/pub. Этот каталог традиционно используется для размещения общедоступных файлов. Для него следует установить права доступа 2775. При этом анонимным пользователям FTP-сервера будет предоставлен доступ на чтение к файлам, находящимся в каталоге. Владельцем каталога сделайте root. В качестве группы, которой принадлежит /var/ftp/pub, целесообразно назначить ftpadmin, включив в неё пользователей, которым необходимо изменять содержимое каталогов FTP-сервера (не стоит работать с содержимым от имени root).

Чтобы разрешить анонимным пользователям вашего сервера доступ на запись, создайте каталог /var/ftp/incoming с правами доступа 3773 (владелец — ftpadmin, группа-владелец — ftpadmin), тем самым предоставив анонимным пользователям право записи в этот каталог, но лишив их возможности просмотра его содержимого. О том, какие изменения в конфигурации сервера должны быть сделаны для того, чтобы разрешить запись, рассказано ниже в этой главе.

Замечание

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

Доступ к серверу зарегистрированных пользователей

Чтобы предоставить доступ к FTP-серверу для локально зарегистрированных пользователей, необходимо внести изменения в конфигурационный файл /etc/vsftpd.conf. Для этого достаточно удалить знак комментария перед директивой local_enable=YES. В такой конфигурации клиенты FTP-сервера получат доступ к любым каталогам файловой системы, для которых такой доступ разрешён исходя из прав соответствующих локальных пользователей. Это могут быть как домашние каталоги пользователей, так и системные каталоги. Если в настройках vsftpd разрешена запись (см. ниже), клиенты получат и все права на запись, которыми располагают эти пользователи.

Сервер vsftpd позволяет ограничить возможность пользователей, зарегистрированных локально, перемещаться по дереву каталогов. При этом процесс, работающий с клиентом, будет выполняться в изолированной среде (chrooted environment), и пользователь будет иметь доступ лишь к своему домашнему каталогу и его подкаталогам. Чтобы ограничить таким образом доступ к каталогам для отдельных пользователей, удалите знаки комментариев у следующих строк в конфигурационном файле:

chroot_list_enable=YES  
chroot_list_file=/etc/vsftpd/chroot_list

В файле /etc/vsftpd/chroot_list перечислите регистрационные имена пользователей, для которых должна использоваться изолированная среда выполнения. Вы можете использовать для этого и другой файл, указав его имя в строке chroot_list_file конфигурационного файла.

Чтобы ограничить доступ к дереву каталогов для всех пользователей, зарегистрированных локально, добавьте в конфигурационный файл директиву chroot_local_user=YES.

В этом случае имена пользователей, перечисленные в файле /etc/vsftpd/chroot_list (при условии, что у строк, указанных выше, удалены знаки комментария), имеют противоположное действие. Для них не используется изолированная среда выполнения, и перемещение по файловой иерархии не ограничивается домашним каталогом.

Чтобы запретить анонимный доступ к FTP-серверу, поставьте знак комментария в начале строки anonymous_enable=YES в конфигурационном файле.

Дополнительные сведения о настройке сервера

Сервер vsftpd способен осуществлять всю передачу данных в пассивном режиме, что сопряжено со значительно меньшим риском, однако не всегда удобно. Чтобы разрешить использование только пассивного режима, достаточно удалить символ комментария у директивы port_enable=NO в конфигурационном файле.

Чтобы разрешить запись файлов на сервер, удалите знак комментария у директивы write_enable=YES. Этого достаточно для того, чтобы пользователи, зарегистрированные локально, получили возможность загружать файлы в те каталоги, для которых они располагают правами на запись. Чтобы разрешить запись файлов анонимным пользователям, необходимо, кроме этого, удалить знак комментария у строки anon_upload_enable=YES. Кроме того, специальный непривилегированный пользователь, используемый для работы с анонимными клиентами, должен иметь права на запись в один или несколько каталогов, доступных таким клиентам.

Для получения дополнительной информации о настройке FTP-сервера vsftpd и параметрах конфигурационного файла обратитесь к странице руководства vsftpd.conf.

Многие параметры использования vsftpd, в том числе относящиеся к безопасности, могут быть заданы при помощи 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.