Linux глазами хакера

Флёнов Михаил Евгеньевич

Глава 10

Передача файлов

 

 

Вспоминаю времена, когда построение сети было делом дорогим, а Интернет — еще дороже, и для обмена файлами приходилось бегать с дискетами 3,5 или 5,25 дюймов. Если кто-либо застал те времена, то, вероятно, вспоминает их с ужасом. Дискеты постоянно портились, и данные периодически переставали читаться. Благо, если расстояние небольшое, и можно было повторить пробежку, но когда дистанция стайерская, — потеря очень сильно отражалась на эмоциональном состоянии.

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

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

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

В настоящее время самым популярным протоколом обмена файлами является FTP (File Transfer Protocol, протокол передачи файлов). Он был разработан достаточно давно, но до сих пор не потерял своей актуальности, хотя некоторые возможности оставляют желать лучшего.

 

10.1. Работа FTP-протокола

 

Как мы уже говорили в гл. 6, для использования FTP-протокола требуется две составляющие: клиент и сервер. Для работы с FTP-сервером можно использовать любой Telnet-клиент, и подключившись к 21 порту сервера, вручную передавать команды. Но во времена графического интерфейса нужно что-то более удобное. В ОС Windows мой любимый FTP-клиент — CyD FTP Client XP (www.cydsoft.com), главное окно программы можно увидеть на рис. 10.1.

Рис. 10.1. Главное окно программы CyD FTP Client XP

Если у вас нет FTP-клиента, то для тестирования протокола можно использовать даже браузер, например, Internet Explorer или Netscape. Для этого в строке URL нужно набрать адрес: в формате ftp://имя:пароль@адрес.

Например:

ftp://flenov:[email protected]_server.com

или

ftp://flenov:[email protected]

Протокол FTP работает сразу на двух портах: один используется для управления (пересылка команд), а другой — для передачи данных (файлов). Программа-клиент соединяется с 21 портом и начинает передавать команды. К этому порту подключаются все пользователи, и сервис, который прослушивает этот канал, работает одновременно с несколькими соединениями.

Когда клиент запрашивает данные, открывается еще одно соединение с конкретным пользователем, по которому передается файл. Это удобно с точки зрения программирования, но несподручно с точки зрения администрирования, точнее сказать, конфигурирования сетевого экрана.

Большинство команд, используемых в протоколе FTP, схожи с теми директивами, которые вы используете в Linux для управления файлами. Это связано с тем, что во время разработки протокола основной сетевой ОС являлась Unix-система. Это в наше время везде стоит Windows, а 20 лет назад все было иначе.

 

10.1.1. Команды FTP-протокола

Давайте рассмотрим листинг 10.1. В нем приведен пример, в котором клиентская программа обменивается командами с FTP-сервером. Если в начале строки стоит знак ">", то текст из нее был отправлен серверу, иначе — это ответ FTP-сервера на нашу команду.

Листинг 10.1. Пример работы протокола FTP

< 220 Flenov Mikhail FTP Server

> USER Anonymous

< 331 Anonymous access allowed, send identity (e-mail name) as password.

> PASS [email protected]

< 230 Anonymous user logged in.

> PWD

< 257 "/" is current directory.

> TYPE A

< 200 Type set to A.

> PASV

< 227 Entering Passive Mode (127,0,0,1,13,20).

> LIST

< 125 Data connection already open; Transfer starting.

< 226 Transfer complete.

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

220 flenovm.ru FTP server (Version wu-2.6.2-5) ready.

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

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

После чтения строки сообщения можно посылать команды FTP-серверу. Но ничего особого выполнить не удастся, пока вы не представитесь серверу. Для этого нужно выполнить FTP-команды: user с параметром имя пользователя, а затем PASS, указав пароль.

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

331 Password required for flenov

В случае с анонимным доступом в качестве имени нужно указать Anonymous (команда USER Anonymous). В ответ на это сервер вернет нам сообщение:

331 Anonymous access allowed, send identity (e-mail name) as password.

Здесь говорится, что анонимный доступ разрешен, и вы должны передать в качестве пароля E-mail-адрес. Честно говоря, можно ввести и чужой E-mail, например, соседа или кого-нибудь другого. Это сервер проконтролировать не сможет. Некоторые серверы вообще не проверяют корректность адреса даже по простым шаблонам, и можно передавать что угодно.

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

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

Гостевой доступ по своим правам является чем-то промежуточным между анонимным и действительным. По сравнению с анонимным пользователем гость обладает большими правами, и ему может выдаваться разрешение на загрузку файлов, но, в отличие от действительного, он работает только в своей директории. Например, если гостю назначен каталог /home/robert, то он сможет безнаказанно здесь работать с файлами и подкаталогами, но выше этой директории подняться невозможно. Вы можете определить любое имя в качестве гостевого.

Обратите внимание, что пароль в команде pass передается абсолютно в открытом виде. Это серьезная проблема. В каждой главе, где мы рассматриваем какой-либо сервис, доводится сталкиваться с открытой передачей данных. Ну что поделаешь, если на заре рождения Интернета никто не думал о хакерах. Теперь приходится изобретать разные методы, чтобы спрятать пароль.

Если ваш сервер обслуживает только анонимные соединения, то пароли могут передаваться как угодно. При такой аутентификации любой пользователь итак может подключиться к серверу, указав произвольный E-mail-адрес в качестве пароля. Но подобные серверы используются только с общедоступными ресурсами/файлами. При наличии важной информации доступ происходит по паролю, и необходимо сделать так, чтобы он шифровался. Для этого можно использовать stunnel или уже готовый протокол SFTP, который мы рассматривали в разд. 5.3.8.

Отличное решение я видел на одном из публичных Web-серверов около 10 лет назад. Для того чтобы закачать данные на сервер, необходимо было зарегистрироваться, заполнив Web-форму с личными данными. Затем вам выдается пароль на доступ, который действует только в течение одной сессии. После этого пароль уничтожается, и повторное подключение становится невозможным. Файлы закачиваются в специальную директорию, в которую разрешена лишь запись. Самим файлам устанавливаются права только для чтения и записи, а выполнение остается недоступным. Таким образом, пароли можно передавать в открытом виде. Даже если хакер увидит его, подключиться не сможет.

Реализовать одноразовые пароли достаточно просто, если ваш сервер использует подключаемые модули аутентификации РАМ (см. разд. 3.3.3).

После того как вы авторизовались на сервере, можно выполнять любые другие команды FTP-сервера. Но тут есть одна проблема — список директив зависит от сервера. Конечно же, есть определенные требования, которых придерживаются все производители, это основные команды, которые описаны в RFC (Requests for Comments, рабочие предложения). Так как возможности, предоставляемые стандартом, уже устарели, то разработчики Web-серверов начали добавлять свои функции, которые могут отличаться в разных версиях программ. Так что, если клиентская программа в каких-то ситуациях ведет себя не совсем корректно, то это еще не значит, что она плохая, просто она может быть несовместима с данным сервером.

Основные команды FTP-протокола вы можете увидеть в табл. 10.1. При работе через Telnet и для тестирования сервера они вам могут пригодиться.

Таблица 10.1. Команды FTP-протокола

Команда Описание
USER имя Используется при авторизации для указания имени пользователя
PASS пароль Предназначена для указания пароля при авторизации
SYST Вернуть тип системы
HELP Предоставить список доступных для выполнения команд
LIST Вывести список файлов и каталогов текущей директории
PWD Возвратить текущую директорию
CWD директория Сменить текущую директорию
TYPE тип Указать тип передачи данных: A для ASCII, I — для бинарных файлов
RETR параметр Скачать с сервера файл, указанный в качестве параметра
STOR параметр Загрузить на сервер файл, указанный в качестве параметра
ABOR Прервать последнюю FTP-команду или передачу данных
QUIT Выйти из системы

 

10.1.2. Сообщения сервера

В ответ на полученные команды сервер возвращает нам сообщения, по которым можно оценить результат работы. Уведомления состоят из числового трехзначного кода и необязательной текстовой части. Если для ответа требуется несколько строк, то в первой (после кода) стоит дефис, а в последней (после кода) — идет пробел.

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

Значения первой и второй цифр кода ответа FTP-сервера можно увидеть в табл. 10.2 и 10.3 соответственно.

Таблица 10.2. Значения первой цифры в коде ответа FTP-сервера

Код Описание
1 Команда удачно запустилась, но еще не закончила свое выполнение, поэтому нужно дождаться ее окончания перед продолжением работы. Такие сообщения приходят во время выполнения длительных операций (например, запрос на передачу файлов). После завершения работы команды будет получено еще одно сообщение
2 Команда выполнена удачно, можно продолжать работу и посылать новые директивы. Такие сообщения приходят в ответ на простые команды
3 Команда выполнена удачно, но для завершения работы требуется дополнительная директива. Такие сообщения можно увидеть в ответ на операции, предусматривающие несколько действий, например, во время аутентификации, которая требует двух команд. Сообщение с кодом, начинающимся с цифры 3, появляется между отправкой команд USER и PASS
4 Команда выполнена неверно, но результат может быть положительным, если повторить попытку позже. Сообщение может быть получено в случае, если сервер не в состоянии сейчас выполнить команду из-за выполнения другой операции
5 Команда выполнена неверно. Это самый критичный ответ, который может быть при неверном синтаксисе директивы или неправильном задании параметров

Таблица 10.3. Значения второй цифры в коде ответа FTP-сервера

Код Описание
0 Синтаксическая ошибка, команда воспринята неверно
1 Информация
2 Установка соединения
3 Сообщение относиться к аутентификации
4 Не определено
5 Сообщение файловой системы

Рассмотрим пример. Допустим, что пользователь увидел в своей программе FTP-клиент следующее сообщение и не знает, что делать дальше:

331 Anonymous access allowed, send identity (e-mail name) as password.

Вам достаточно только знать код 331. По первому числу 3 видно, что директива выполнена удачно, но требуется дополнительная команда. Вторая цифра тоже 3, т.е. сообщение появилось в ответ на аутентификацию. Когда может быть такой отклик? Конечно же, после ввода имени. Сервер FTP ожидает пароль, поэтому выдал сообщение с кодом 331.

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

 

10.1.3. Передача файлов

Так как протокол FTP предназначен для работы с разными системами, то для передачи файлов используются два основных режима — текстовый (ASCII) и бинарный.

Допустим, что вы хотите переслать текстовый файл с компьютера Unix на компьютер Windows. В Unix для текстовых файлов в качестве идентификатора конца строки используется символ (Carriage Return, возврат каретки, код 13). В Windows то же самое обозначается двумя символами и (Line Feed, перевод строки, код 10). Если после передачи открыть в Windows этот текстовый файл, то все строки сольются в одну, потому что нет символа .

На рис. 10.2 показан файл sendmail.cf (используется для конфигурации сервиса Sendmail), скаченный с Linux-сервера в бинарном режиме и открытый в программе Windows Notepad. Как видите, очень тяжело разобрать, что здесь и для чего, а вместо перехода на новую строку можно увидеть нечитаемый символ в виде квадрата.

Рис. 10.2. Файл sendmail.cf, полученный с Linux-сервера в бинарном режиме

Чтобы решить проблему конца строки, необходимо скачивать файл с сервера в символьном (ASCII) режиме. В этом случае текст передается построчно, и ОС-получатель сама добавляет нужные символы перевода строки. На рис. 10.3 можно увидеть файл sendmail.cf, полученный с сервера в ASCII- режиме. Теперь информация стала читабельной, и все символы перехода на новую строку расставлены самой ОС верно, в соответствии со своими внутренними правилами.

Рис. 10.3. Файл sendmail.cf, полученный с Linux-сервера в ASCII-режиме

Бинарные файлы (например, картинки или музыку) необходимо передавать в двоичном режиме. Здесь нет различий, в какой ОС создан объект, и он будет правильно воспринят в любой операционной системе, умеющей работать сданным форматом.

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

 

10.1.4. Режим канала данных

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

□ программа-клиент открывает порт на компьютере, куда сервер должен передать содержимое файла;

□ серверу направляется запрос на скачивание файла и сообщается порт и IP-адрес клиентского компьютера, с которым он должен соединиться;

□ сервер инициализирует соединение с компьютером клиента и начинает передачу данных.

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

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

Чтобы решить проблему работы через сетевой экран, был разработан пассивный режим. В большинстве серверов и клиентских программ именно его теперь начинают устанавливать по умолчанию, потому что сетевые экраны в наше время уже встроены почти во все ОС.

В пассивном режиме соединение происходит иначе:

□ клиент запрашивает скачивание или просит принять файл;

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

□ клиент устанавливает соединение с указанным портом, по которому происходит передача данных.

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

 

10.2. Конфигурирование wu-ftp-сервера

По моим наблюдениям самым распространенным FTP-сервером является wu-ftp (Washington University FTP Server), потому что он поставляется вместе с основными дистрибутивами Linux, в том числе Red Hat и его клонами. Если у вас именно такой дистрибутив, то с установкой проблем не будет. Остается только правильно сконфигурировать сервис. Но даже если сейчас в системе нет FTP-сервера, его легко установить из RPM-пакета (для Redhat-систем) или другого архива.

Для конфигурирования FTP в современных дистрибутивах есть графическая утилита kwuftpd. Для ее запуска выберите основное меню KDE, а затем нажмите System/kwuftpd. Главное окно программы вы можете увидеть на рис. 10.4. Но, как всегда, мы будем рассматривать более тонкую настройку через конфигурационные файлы. Разобравшись с этим, вы без проблем сможете настроить свой FTP-сервер и с помощью графической утилиты kwuftpd.

Рис. 10.4. Главное окно программы kwuftpd

Итак, конфигурация FTP-сервера содержится в шести файлах:

□ ftpaccess — определяются права доступа к серверу, круг пользователей FTP и основные настройки безопасности;

□ ftpservers — описываются виртуальные FTP-серверы;

□ ftpusers — указываются пользователи, которым явно запрещен доступ к FTP-серверу;

□ ftphosts — определяются права доступа к серверу с определенных хостов. Можно как запрещать, так и разрешать доступ;

□ ftpgroups — описываются группы FTP;

□ ftpconversion — дает нам возможность настройки преобразования файлов на лету.

 

10.3. Основные настройки wu-ftp-сервера

 

Основным конфигурационным файлом wu-ftp-сервера является ftpaccess. Его содержимое можно увидеть в листинге 10.2.

Листинг 10.2. Пример конфигурационного файла ftpaccess

# This file was generated by the KDE wu-ftpd configurator.

# (c) 2000 by Bernhard Rosenkränzer ([email protected])

class all anonymous, guest, real *

noretrieve

loginfails 5

private no

banner /welcome.msg

email root@localhost

message/welcome.msg LOGIN

message.message     CWD=*

readme       README* LOGIN

readme       README* CWD=*

chmod        no      anonymous, guest

delete       no      anonymous

overwrite    no      anonymous

rename       no      anonymous

passwd-check rfc822  warn

log transfers anonymous,guest,real inbound

log transfers anonymous,guest,real outbound

anonymous-root /home/flenov

При настройке FTP-сервера существует множество директив, для которых администраторы сохраняют исходные значения, потому что их работа не влияет на производительность или безопасность. Хотя некоторые из них помогают предотвратить неправильное или неэффективное использование сервера (например, время ожидания timeout XXXX способствует освобождению ресурсов), но значений по умолчанию достаточно, кроме того, изменение некоторых из них может, наоборот, сделать работу менее комфортной.

Давайте рассмотрим основные директивы этого файла. Чтобы впоследствии с ними легче было работать, я разбил все команды по категориям.

О дополнительных возможностях, которые мы не рассмотрим, вы можете получить подробную информацию из страниц руководства, выполнив команду man ftpaccess.

 

10.3.1. Доступ

Такие директивы определяют основные права доступа к FTP-серверу. Давайте рассмотрим основные из них:

□ class имя type адреса — позволяет организовать классы пользователей по их типу и адресу. В нашем конфигурационном файле указана следующая строка:

class all anonymous,guest,real *

В качестве имени класса здесь указано all. После этого идет перечисление через запятую типов пользователей, которые будут отнесены к этому классу. В данном случае присутствуют все категории: anonymous, guest и real (анонимные, гости и авторизованные пользователи). Последний параметр — это шаблон адреса, на месте которого стоит звездочка, т.е. любой адрес. Получается, что к классу all относятся любые пользователи с произвольными адресами.

Классы — очень удобная вещь. Это как группы. Вы объединяете определенных пользователей и можете назначать им права. Например, можно создать класс пользователей, у которых IP-адрес относится к зоне вашей компании, офиса или страны. Затем только этому классу открываете полноценный доступ к FTP, а всем остальным — запрещаете или ограничиваете использование. Назначить права сразу целому классу намного удобнее, чем расписывать разрешение каждому пользователю в отдельности;

□ noretrieve тип класс файл — запрещает чтение указанного файла. Параметр тип указывает на абсолютную (absolute) или относительную (relative) адресацию (путь) к файлу. Далее идет определение класса в формате class=имя класса, к которому относится данный запрет. Можно явно указать описанный выше класс all или вообще его опустить, тогда запрет будет относиться ко всем пользователям. Если в качестве файла указан конкретный путь, то доступа не будет только к этому файлу. Если в параметре указано лишь его имя (например, passwd), то будет закрыт доступ ко всем файлам с таким названием в любой директории.

Рассмотрим пример, запрещающий доступ к любым файлам с именем passwd:

noretrieve relative passwd

Попробуйте добавить эту строку в свой конфигурационный файл. Теперь подключитесь к серверу с помощью FTP-клиента. Для тестирования из X Window я в графическом режиме Linux использовал программу gftp. Подключившись к серверу, я создал файл passwd в директории /home и попытался его скачать в каталог /home/flenov. В ответ на это FTP-клиент только создал пустой файл, но скачать ничего не смог, из-за установленного запрета программа завершилась аварийно. Такое окончание — это, конечно же, особенность gftp, а другой FTP-клиент должен правильно обработать ошибку и сохранить работоспособное состояние.

Если FTP-сервер находится на одном физическом сервере с Web-сервером, то вполне логичным будет запретить чтение файла .htaccess, в котором прописываются права доступа на директории для Web-сервера. Пользователи FTP не должны иметь права даже смотреть их. Лучше прописать разрешение только конкретным клиентам, чтобы каждый из них мог работать только со своими файлами .htaccess, или предоставить другой способ редактирования прав.

Работу с системными каталогами можно вообще отменить. Например, следующая строка запретит получение любого файла из директории /etc:

noretrieve /etc

После этого нельзя будет скачать ни один файл не только из директории /etc, но и из ее поддиректорий;

□ loginfails число — количество неудачных попыток входа на сервер, после которого в журнале будет создана соответствующая запись. В нашем примере стоит число 5. Если пользователь не смог войти на сервер 5 раз, то это уже говорит о попытке взломщиком подобрать пароль случайным образом или по словарю (атака brute force);

□ private параметр — возможность использовать команды wu-ftp-сервера SITE GROUP и SITE GPASS (в других FTP-серверах этих команд может и не быть) для смены группы (значение параметра yes). Если пользователь укажет верную группу и пароль, то он получит права группы из файла ftpgroups;

□ deny адрес файл — запрет доступа клиентов с указанного адреса. В случае попытки подключения выводится сообщение из текстового файла, указанного в качестве последнего параметра. Адрес может указываться в виде шаблона;

□ defumask mask — маска прав доступа, используемая при создании новых файлов. О команде umask для ОС Linux (задает текущее значение маски) мы говорили в разд. 4.1;

□ limit-time тип минуты — ограничение времени сессии. Например, вы хотите, чтобы определенные пользователи не засиживались на вашем FTP-сервере. Используя эту директиву, в качестве типа можно указать звездочку (*) для всех пользователей, real, anonymous или guest. Последний параметр — это количество минут сессии. По прошествии указанного времени соединение будет разорвано;

□ file-limit направление число класс — ограничение на число передаваемых файлов. В качестве направления можно указать in (входящие), out (исходящие) и total (всего). Чтобы запретить работу более чем с 10 файлами, воспользуйтесь командой file-limit total 10;

□ byte-limit направление число класс — ограничение на число передаваемых байт. Работа директивы схожа с file-limit;

□ anonymous-root каталог — задание в явном виде корневой директории для анонимных пользователей, т.к. у них не может быть собственного каталога в отличие от реального пользователя, для которого при подключении к системе корнем является его домашняя директория;

□ guest-root каталог — аналогична предыдущей команде. Директива необходима, если вы хотите, чтобы все гости могли работать с одной и той же директорией. Если у каждого гостя должен быть свой каталог, то лучше для каждого из них явно создавать учетную запись (см. разд. 10.6).

□ passwd-check тип сообщение — определяет проверку правильности пароля для анонимных пользователей. В данном случае имеется в виду контроль E-mail-адреса, который они используют. В качестве типа может указываться одно из трех значений: none (нет проверки), trivial (простая проверка на содержания в адресе символа "@)" или rfc882 (полная проверка, на соответствие стандарту rfc 822). Параметру сообщение можно присваивать значение warn (выводить предупреждение, но продолжать работу) или enforce (отказать в доступе);

□ deny-email адрес — отказ в доступе, если в качестве пароля используется указанный адрес. В большинстве FTP-клиентов в настройках прописан для анонимного доступа какой-либо почтовый ящик, например, [email protected]. Мало кто меняет этот адрес. Так как он соответствует всем правилам, то сервер не определит, что это обманка. Но можно прописать его в этом параметре, и тогда пользователю придется поменять в настройках FTP-клиента адрес на другой, иначе он не сможет подключиться. Но даже это не будет гарантировать, что анонимный пользователь указал именно свой E-mail в качестве пароля;

□ deny-uid идентификаторы — запрещает доступ к FTP пользователям с указанными идентификаторами. Те же самые функции выполняет файл ftpusers, который мы рассмотрим в разд. 10.5. Удобство этой команды в том, что можно задать диапазоны. Например, deny-uid %-500. Данная директива запретит доступ всем пользователям, у которых идентификатор менее 500;

□ deny-gid идентификаторы — запрещает доступ к FTP пользователям группы, с указанными идентификаторами. Те же самые функции выполняет файл ftpusers;

□ restricted_uid идентификаторы — разрешает гостевому пользователю с указанным ID получать доступ к директориям вне его домашнего каталога;

□ restricted_gid идентификаторы — дает право группе пользователей с указанным ID получать доступ к директориям вне домашнего каталога;

□ unrestricted_uid идентификаторы — запрещает гостевому пользователю с указанным ID получать доступ к директориям вне его домашнего каталога;

□ unrestricted_gid идентификаторы — запрещает группе пользователей с указанным ID получать доступ к директориям вне домашнего каталога;

□ dns refuse_no_reverse файл override — выдать сообщение, если клиент не имеет обратного адреса. При отсутствии параметра override соединение будет завершено;

□ dns refuse_mismatch файл override — выдать сообщение, если прямой и обратный адреса не совпадают. Если не указать параметр override, то соединение будет завершено. По умолчанию я всегда включаю эту опцию, а отключаю, только если у действительных пользователей возникают проблемы при работе с сервером. Это необходимо для того, чтобы взломщик не мог подделать IP-адрес для входа в систему и обхода соответствующей проверки.

 

10.3.2. Контроль загрузки файлов

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

upload параметры — команда позволяет настроить права на загрузку файлов в определенные каталоги. Для запрета загрузки в каталог /etc нужно написать следующую строку:

upload /etc no

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

upload /home yes root root 0600 nodir

В данной строке разрешается загрузка файлов в директорию /home. Третий и четвертый параметры определяют владельца и группу, которые будут установлены для файла. В обоих случаях я указал root, чтобы простой смертный после загрузки ничего не смог сделать с документом. Далее идут права доступа на файл — 0600, т.е. читать и писать в него сможет только администратор, а все остальные отдыхают. Последний параметр равен nodir, что соответствует запрету на создание директорий.

Следующий пример разрешает создавать директории:

upload /home/robert yes root root 0600 dir 0700

Предпоследний параметр равен dir, что позволяет создавать директории. Последний параметр 0700 — это права доступа на каталог (только администратору разрешено все). Изменение этого значения позволяет сделать возможной работу с файлами только администратору root. Даже если злоумышленник загрузит в указанную директорию свою программу, выполнить он ее не сможет, не имея соответствующих прав.

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

 

10.3.3. Доступ по операциям

Помимо этого, в файле ftpaccess может быть описание основных операций и прав доступа к ним. В общем виде это выглядит следующим образом:

Действие yes|no пользователь

В качестве действия можно указать одно из следующих значений: chmod, delete, overwrite, rename или umask. Затем идет разрешение (yes) или запрет (no). Потом через запятую могут перечисляться типы пользователей (anonymous, guest или real) или указывается класс (class=имя_класса).

По умолчанию все действия и для всех пользователей разрешены. Но вполне логичным будет запретить удаление, изменение атрибутов, переименование или перезапись файлов неавторизованным (anonymous) пользователям.

Например, в листинге 10.2 для запрещения доступа к операциям есть следующие строки:

chmod     no anonymous,guest

delete    no anonymous

overwrite no anonymous

rename    no anonymous

 

10.3.4. Информационные директивы

Эти директивы отвечают за информационные сообщения, которые видит пользователь, работая с вашим FTP-сервером:

□ banner имя — в качестве имени можно указать текстовый файл, содержимое которого будет передано пользователю во время входа в систему. Этот файл может содержать приветствие, полезную информацию или правила использования вашего FTP-сервера. Вы должны помнить, что баннер виден пользователю еще до авторизации, поэтому здесь не должно быть никаких сведений, которые помогут хакеру при взломе;

□ greeting параметр — определяет, какую информацию выдавать пользователю о системе после отображения баннера. Это текстовая строка, которая может выглядеть следующим образом: "220 flenovm.ru FTP server (Version wu-2.6.2-5) ready.". Как мы уже говорили ранее (см. разд. 10.1), эта строка отображается до авторизации, и в ней содержится информация о системе и версии используемого FTP-сервера. Это лишнее, злоумышленник не должен видеть этого, лучше выводить минимум полезного или даже что-то запутывающее. В качестве параметра можно использовать одно из следующих значений:

• full — полная информация, включая имена хоста и программы и версия;

• brief — отображать сокращенную информацию, включающую только имя хоста;

• terse — только сообщение о готовности системы к работе;

• text — собственное сообщение.

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

greeting text строка

На собственных серверах я использую сообщения именно этого типа (одно из двух):

greeting text flenovm.ru FTP Server (MS IIS 4.1.0) ready

или

greeting text flenovm.ru FTP Server (cd-ftpd 2.1.9) ready

Увидев любое из этих сообщений, хакер не сможет определить, какой FTP-сервер реально установлен. В первом случае он подумает, что имеет дело с IIS (Internet Information Services, информационные сервисы Интернета) разработки Microsoft, который может работать только в среде Windows. Это может сбить с толку любого, даже опытного хакера. Но, проверив сервер специальными утилитами, он увидит, что реально используется Linux (точную версию такие утилиты, чаще всего, не могут определить) и догадается, что его просто кидают.

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

Можно притвориться, что у вас установлен сервер ProFTP, который реально существует и тоже достаточно часто используется администраторами Linux;

□ hostname имя — параметр определяет имя локального хоста по умолчанию;

□ email адрес — это адрес электронной почты администратора;

□ message файл тип — содержимое указанного текстового файла, отображается пользователю в следующих случаях:

 • при входе в систему, если в качестве типа задано слово LOGIN;

 • при смене директории, если в качестве типа указано CWD=каталог и пользователь вошел в указанный каталог.

 

10.3.5. Журналирование

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

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

Если произошло что-то неординарное, то, используя журналы, вы должны получить максимальную информацию о происшедшем и сделать все необходимое, чтобы это не повторилось (к вопросу журналирования мы еще вернемся в гл. 12).

По умолчанию wu-ftp для хранения журнала, который содержит последние записи FTP-сервера, использует файл /var/log/xferlog. История за предыдущие дни может быть просмотрена в файлах /var/log/xferlog.X, где X — это число от 0 до 5.

Давайте посмотрим, что можно регистрировать в журналах wu-ftp-сервера:

□ log commands список — сохранять все команды клиента. В качестве списка можно указать одно из следующих значений: anonymous, guest или real;

□ log transfers список направление — писать файлы, которые получает или отправляет пользователь. Последний параметр может содержать одно из двух значений inboard (входящий) и outboard (исходящий);

□ log security список — регистрировать все нарушения безопасности, попытки выполнить запрещенные команды и др.;

□ log syslog — использовать системный журнал syslog;

□ log syslog+xferlog — использовать журналы syslog и xferlog одновременно.

 

10.4. Создание виртуальных серверов

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

Мы не будем сильно заострять внимание на виртуальных серверах, потому что это выходит за рамки нашей книги. Если вы хотите узнать о их параметрах, то можете обратиться к документации (man ftpaccess), или для создания воспользоваться графической утилитой управления FTP-сервером.

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

Определение всех виртуальных FTP-серверов происходит в конфигурационном файле ftpservers. Описание выполнено в виде строк, каждая из них содержит IP-адрес виртуального сервера и каталог, в котором находятся его файлы настройки (дублирующие все указанные ранее файлы wu-ftp-сервера). Если один из них отсутствует, то будет использоваться соответствующий конфигурационный файл из каталога /etc.

 

10.5. Дополнительные настройки

 

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

 

10.5.1. Запрет доступа реальным пользователям

Так как сервер wu-ftp работает с учетными записями ОС, которые расположены в файле /etc/passwd, то любой пользователь автоматически сможет работать с FTP-сервером, используя свой аккаунт и права доступа. Но далеко не всем это необходимо.

Чтобы запретить доступ уже существующему пользователю, его имя нужно добавить в файл /etc/ftpusers. Содержимое этого файла по умолчанию можно увидеть в листинге 10.3. В зависимости от дистрибутива текст может изменяться.

Листинг 10.3. Содержимое файла /etc/ftpusers

# The ftpusers file is deprecated.

# Use deny-uid/deny-gid in ftpaccess.

root

bin

daemon adm lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody

Обратите внимание, что пользователю root тоже запрещен доступ. Это связано с тем, что у администратора слишком много прав, и если злоумышленник получит возможность пользоваться этой учетной записью, то сможет удаленно уничтожить систему (например, стереть файлы). Никогда не допускайте к FTP пользователей с повышенными привилегиями (администратора root и пользователей группы root).

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

Лучше всего доступ по FTP запретить всем системным учетным записям, ID которых менее 500. Для этого достаточно в файле ftpaccess добавить следующую строку:

deny-uid %-500

В этом случае можно быть уверенным, что никого не забыли. Тем более что с одним идентификатором (например, с ID, равным нулю) может быть несколько пользователей.

 

10.5.2. Компьютерам вход запрещен

Как говорит великая администраторская мудрость — на сетевой экран надейся, а сам не плошай. Firewall позволяет запретить доступ к серверу на определенные порты с конкретных компьютеров. Конфигурационный файл /etc/ftphosts выполняет схожие задачи — разрешает или запрещает доступ с указанных IP-адресов или целой сети.

По умолчанию файл пустой, потому что разработчики дистрибутива не могут знать, как вы планируете организовать доступ. Вы можете прописать в нем следующие директивы:

allow имя шаблон

deny имя шаблон

Например, если вы хотите запретить доступ анонимным пользователям с адреса 192.168.1.1, то добавьте строку:

deny anonymous 192.168.1.1

Если исходить из нашего принципа "Что не разрешено, то запрещено", то может показаться, что строка с директивой deny не нужна. Это неверно, потому что необходимо закрепить разрешение на доступ с указанного адреса для определенного типа пользователей, чтобы остальным закрыть возможность входа на FTP.

 

10.5.3. Группировка

В файле ftpgroups находятся описания групп (равносильны правам доступа), при создании которых можно использовать команды SITE GROUP и SITE GPASS. Это нестандартные директивы FTP, и мало кем из производителей поддерживаются, поэтому для пользователей работа с этими командами может оказаться слишком неудобной.

Файл ftpgroups содержит строки примерно следующего вида:

test:ENCRYPTED PASSWORD HERE:archive

Строка-описание состоит из трех параметров, разделенных двоеточием: имя группы, пароль и реальное (системное) имя группы.

 

10.6. Гостевые учетные записи

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

Для начала нужно создать новую учетную запись для пользователя, например robert_ftp. Для этого выполняем команду:

add robert_ftp

Теперь посмотрим на созданную для него строку в файле /etc/passwd. Она должна выглядеть примерно следующим образом:

robert_ftp:x:507:507::/home/robert_ftp:/bin/bash

Классическая запись для нового пользователя. Но через нее можно входить в систему локально, а мы должны ограничиться только FTP-доступом. Изменим командную оболочку (shell) для этого пользователя на /bin/ftponly. Такой оболочки пока нет, и мы ее еще создадим чуть позже. Помимо этого, необходимо директорию /home/robert_ftp сделать корневой. Для этого нужно добавить в конце пути папку с именем в виде точки.

Отредактируйте соответствующим образом строку, и вы получите такой результат:

robert_ftp:x:507:507::/home/robert_ftp/.:/bin/ftponly

Обратите внимание, что в качестве командной оболочки указан файл /bin/ftponly, который не существует. Давайте его создадим. Это делается только один раз и потом используется всеми гостевыми учетными записями. Для создания файла можно воспользоваться командой cat:

cat >> /bin/ftponly

В ответ на это все команды, которые теперь будут вводиться в консоли, попадут в файл /bin/ftponly. Наберите следующий текст:

#! /bin/sh

echo 'You are not allowed to log in interactively'

exit 0

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

В файле /bin/ftponly у нас хранится всего две команды: первая выводит на экран эхо-сообщение о том, что нельзя входить в систему интерактивно, вторая — завершает сеанс.

Теперь необходимо сделать наш скрипт /bin/ftponly исполняемым. Для этого выполните команду:

chmod 755 /bin/ftponly

Итак, у нас создан файл командной оболочки и пользователь, который использует ее. Если сейчас попытаться войти в систему как пользователь robert_ftp, то на секунду появится сообщение "You are not allowed to log in interactively" и произойдет выход из системы. Таким образом, работать под учетной записью robert_ftp нельзя.

Вместо файла /bin/ftponly можно использовать в качестве командного интерпретатора /dev/null — нулевое устройство, которое не может обрабатывать команды и не позволит входить в систему под этой учетной записью. Оно определено в качестве консоли в файле /etc/passwd для всех системных учетных записей, которые не предназначены для локальной работы.

Теперь осталась самая малость — сказать серверу FTP, что пользователь с именем robert_ftp является гостем. Для этого в файл ftpaccess добавим строку:

guestuser robert_ftp

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

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

Для гостевых пользователей достаточно только ограничить доступ определенной директорией, а все остальное защитит сервер. Правда, и здесь иногда бывают проблемы. Рассмотрим классическую ошибку программистов. Допустим, что пользователю открыта директория /home/robert, и для обеспечения этого сервер банально проверяет, чтобы путь к каталогу начинался с этой строки. Хакер видит эту директорию как корневую (/) и выше подниматься не должен. Теперь посмотрите на следующую команду:

cat /home/robert/../../../../../etc/passwd

Она должна выводить на экран файл /home/robert/../../../../../etc/passwd, а на экране вы увидите содержимое /etc/passwd. С точки зрения проверки начала пути все записано верно, но после /home/robert идет множество символов "/..", каждый из которых заставляет передвинуться на уровень выше. Хакер, не зная в какой папке он находится, может поставить такую комбинацию раз пять и, скорее всего, поднимется до корня, а потом переместится в системную папку /etc/passwd.

Несмотря на эту простоту, ошибка встречается довольно часто. А ведь программисту достаточно проверить адрес на вхождение в него символов двоеточия, и если они есть, то принять меры. В wu-ftp-сервере такой ошибки нет, но нет гарантии, что она не появится в будущем, когда выйдет обновление, в котором по случайности кто-то отключит проверку или удалит ее. Поверьте мне, такое иногда бывает с любым программным обеспечением, особенно если над ним работает целая команда, и нет контроля.

 

10.7. Безопасность FTP-сервера

 

Пока что мы говорили о конфигурации FTP-сервера под Linux. А сейчас нам предстоит разобраться с некоторыми практическими примерами использования сервера не по назначению и методами защиты.

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

 

10.7.1. Перехват соединения

Вспомним полный цикл соединения с FTP-сервером и передачи файлов:

1. Соединение с сервером.

2. Авторизация.

3. Запрос на скачивание файлов.

4. Сервер открывает порт и сообщает его клиенту.

5. Клиент подключается к указанному порту и получает или передает файл.

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

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

В настоящее время в большинство FTP-клиентов уже встроили сравнение IP-адресов, подключенных к 21 порту и каналу для передачи данных. Это усложняет атаку, потому что теперь хакеру необходимо подделывать IP-адрес, что в случае с TCP-протоколом не так уж и просто.

Использование привязки к IP не всегда позволяет решить проблему. Если на пути соединения с FTP-сервером находится анонимный прокси-сервер или сетевой экран, маскирующий IP-адрес, то сервер будет видеть не реальный IP-адрес клиента, а IP-адрес proxy или Firewall.

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

А чего ждать? Активное соединение тоже можно перехватить, хотя это сделать немного сложнее. Если хакер получил доступ к компьютеру, который подключен к FTP-серверу, то достаточно дождаться момента, когда пользователь взломанного компьютера запросит передачу данных, и перехватить порт.

 

10.7.2. Сканирование портов

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

Одна из уловок — использование сценария на PHP или Perl, который с сервера будет производить сканирование. Но этот метод обладает следующими недостатками:

□ необходим сервер, который сможет выполнять сценарии, а не всегда есть возможность найти подходящий;

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

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

Вспомним, как происходит прием/передача файлов в активном режиме. Для этого FTP-серверу посылается запрос с указанием порта клиентского компьютера, к которому он должен подключиться. Помимо номера порта передается и IP-адрес. Это значит, что клиент с адреса 192.168.1.1 может запросить соединение с компьютером 192.168.8.2 и любым его портом, и сервером это воспримется нормально. Хакеры научились использовать эту особенность для того, чтобы заставить FTP-сервер сканировать порты удаленного компьютера.

Таким образом мне удалось один раз удачно произвести атаку DoS на свой сервер. Я заставил FTP-сервис сканировать компьютер с proxy, через который происходило подключение к Интернету. На прокси-сервере была установлена система обнаружения атак, которая при выявлении попытки сканирования автоматически блокировала любые соединения с компьютером (о таких системах мы поговорим в гл. 12). Сканирование прошло удачно, и я со спокойной душой пошел на обед. Вернувшись, услышал от пользователей, что невозможна работа по FTP. Я проверил, сервер работал исправно. Оказалось, что FTP стал недоступен для внешних пользователей, подключающихся через прокси-сервер, который во время сканирования добавил FTP-сервер в черный список.

Для сканирования через FTP-сервер можно использовать программу nmap:

nmap -b имя_пользователя:пароль@ftpсервер:порт

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

nmap -b ftpсервер:порт

Если сервер работает на 21 порту, то можно опустить и этот параметр.

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

 

10.7.3. Рассылка файлов

С помощью FTP-сервера можно рассылать E-mail-сообщения. Для этого создайте на сервере текстовый файл со следующим содержимым:

HALO mailserver.com

MAIL FROM: [email protected]

RCPT TO: [email protected]

DATA

Текст письма

.

Рассмотрим, что означают эти строки, которые на самом деле являются командами SMTP-сервера:

□ HALO mailserver.com — строка приветствия SMTP-сервера. Параметр maiiserver.com необходимо заменить на реальное имя сервера;

□ MAIL from: [email protected] — адрес отправителя письма;

□ RCPT ТО: [email protected] — получатель письма;

□ DATA — после команды идет содержимое письма.

Последняя строка в файле должна состоять только из одной точки, потому что SMTP-сервер символы и (конец строки и перевод каретки) воспринимает как конец письма. Когда вы нажимаете клавишу , то в ОС Windows создается как раз такая пара символов. ОС Linux ограничивается только переводом каретки. Для нас главное, чтобы в тексте был переход на новую строку, а какой он, — не имеет значения, потому что файл будет передаваться в ASCII-режиме.

Этот файл загружаем на FTP-сервер и выполняем следующие две команды:

PORT 192,168,1,1,25

RETR filename

В первой строке мы просим сервер соединиться с компьютером, имеющим адрес 192.168.1.1. Для этого используется FTP-команда port, которой необходимо передать 5 чисел: первые 4 — это IP-адрес компьютера, последний параметр определяет порт. С помощью этой директивы можно производить сканирование портов на сервере вручную, но в данном случае у нас другая цель.

Вторая команда посылает на этот сервер файл с именем filename, который содержит SMTP-команды. Для SMTP-сервера все выглядит так, как будто FTP-сервер направляет ему директивы для отправки письма, которое он и отошлет. А получатель не сможет определить источник. Все параметры приведут его только к FTP-серверу. Получается, что злоумышленник может абсолютно анонимно отправить письмо, и его никто не найдет.

Таким способом могут рассылаться вирусы, троянские программы или даже спам. Есть еще один вариант использования почтовых сообщений — поместить на FTP-сервер большой файл и заставить бесконечно передавать его на SMTP-сервер. Если запустить несколько таких процессов, то при слабеньком канале SMTP-сервера получится полноценная DoS-атака.

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

 

10.8. Дополнительная информация

Я не стал описывать все директивы конфигурационных файлов, которые доступны в wu-ftp-сервере. Их слишком много, и мы остановились только на основных.

Для получения дополнительной информации можно выполнить команду man файл.

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

Помимо этого, можно почитать документы из директории /usr/share/doc/wu-ftpd-Х.X.Х, где X.Х.X — это номер версии установленного у вас wu-ftp-сервера.

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

При администрировании FTP-сервера вам помогут следующие команды:

□ ftpd — позволяет запустить сервер с особыми параметрами. Атрибутов очень много, поэтому для получения подробной информации о них можно обратиться к документации (выполнить команду man ftpd). Лично мне еще ни разу не приходилось прибегать к использованию ключей, потому что единожды настроив конфигурацию, сервер работает стабильно;

□ ftprestart — используется для перезапуска FTP-сервера;

□ ftpshut — корректно завершает работу сервера. Например, если вы хотите обновить программное обеспечение, то не стоит отключать сервис аварийно. Используйте эту команду со следующими ключами:

 • -l n — не принимать новые соединения за n минут до завершения работы FTP-сервера. Укажите приемлемое время, чтобы клиенты успели корректно завершить работу с сервером;

 • -d n — разорвать соединения за n минут до завершения работы FTP-сервера. Я рекомендую установить разрыв непосредственно перед завершением или указать 1 минуту;

 • время — задает момент завершения работы FTP-сервера и схож с аналогичным параметром в команде shutdown для Linux. Вы можете указать вместо времени ключевое слово now, чтобы завершить работу немедленно, но я рекомендую использовать ключ +n (где n — это количество минут до завершения работы) или указать точное время в формате HHMM (часы — минуты);

□ ftpcount — выводит количество подключенных по FTP пользователей. Когда в системе происходит что-то неладное, то я всегда проверяю, есть ли соединения клиентов по FTP. Если да, то следующим этапом нужно узнать, кто подключен;

□ ftpwho — возвращает список подключенных к FTP-серверу клиентов с указанием учетной записи, использовавшейся при подключении. Иногда одного взгляда достаточно, чтобы определить соединение злоумышленника. Например, имеется учетная запись человека, который не может быть в данное время на FTP;

□ ckconfig — проверяет конфигурацию FTP-сервера и выводит отчет для каждого конфигурационного файла wu-ftp-сервера.

 

10.9. Резюме

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

Главная проблема протокола FTP заключается в том, что он создавался как дружественный и удобный для пользователя. Вторая проблема — использование двух портов. Авторизация происходит только при подключении на 21 порт, а работа с каналом для передачи данных происходит без какого-либо подтверждения подлинности клиента.

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

Если необходим обмен данными в локальной сети, то можно использовать Samba-сервер или опять же HTTP-протокол. Многие администраторы не хотят настраивать Web-сервер только ради обмена данными и устанавливать на него потенциально опасные сценарии. Но нельзя забывать, что FTP также может оказать медвежью услугу. Из двух зол нужно выбирать меньшее. Если у вас уже работает Web-сервер, то максимально используйте его возможности, и тогда можно будет закрыть 21 порт, тем самым оградив себя от вероятных ошибок, которые могут с ним прийти.

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