Михаил Флёнов - Linux глазами хакера
□ 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).