Создание команды интерпретатора

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Команда интерпретатора позволяет осуществлять дополнительную обработку по событию соответствия попытки доступа правилу из списка управления доступом. Во всех практических примерах эта возможность используется в файле hosts.deny для сбора дополнительных сведений о злоумышленнике либо для уведомления администратора системы о возможной атаке. Например:

AL L : AL L : (safe_finger -1 @% h | /usr/sbin/mail -s %d - %h root.) &

Данное правило из файла hosts.deny запрещает доступ ко всем службам всем системам, которым доступ не разрешен явным образом правилами hosts.allow. Зарегистрировав и заблокировав попытку доступа, tcpd передает команду safe_finger командному интерпретатору для выполнения. Все варианты finger , включая safe_finger, обращаются к удаленному узлу, чтобы определить, кто работает на этом узле. Такие сведения полезны при поиске нарушителя. Результаты выполнения команды safe_finger передаются в почтовом сообщении пользователю учетной записи root. Символ & в конце строки предписывает интерпретатору выполнять команду в фоновом режиме. Этот символ очень важен. В его отсутствие tcpd будет ожидать завершения работы команды, и лишь после вернется к выполнению своих задач.

Программа safe_finger входит в состав пакета wrapper. Она особым образом модифицирована и менее уязвима для атак, чем стандартная программа finger.

В приведенных примерах использовались некоторые переменные, такие как %h и %d . Переменные позволяют использовать параметры входящего соединения в работе процесса командного интерпретатора. Существующие переменные перечислены в табл. 12.1.

Таблица 12.1. Переменные, используемые в командах интерпретатора

Переменная Значение
%a IP-адрес клиента
%A IP-адрес сервера
Вся доступная информация по клиенту, включая имя пользователя (когда возможно)
%d Имя процесса демона| сетевой службы
%h Имя узла клиента. Если имя узла недоступно, переменная хранит IP-адрес клиента
Имя узла сервера
%n Имя узла клиента. Если имя узла недоступно, переменная хранит ключевое слово UNKNOWN Если поиск в DNS возвращает адрес, не совпадающий с IP-адресом клиента, используется ключевое слово PARANOID
%N Имя узла сервера
%p Идентификатор процесса демона сетевой службы (PID)
%s Вся доступная информация по серверу, включая имя пользователя (когда возможно)
%u Имя пользователя клиента либо ключевое слово UNKNOWN, когда имя пользователя недоступно
%% Символ процента (%)

Из табл. 12.1 видно, что %h - это имя удаленного узла, a %d - процесс демона, к которому происходит обращение. Вернемся к примеру команды интерпретатора. Предположим, что попытка обращения к in. rshd исходила от узла foo.bar.org. Интерпретатору передается команда:

safe_finger -1 @foo.bar.org | /usr/sbin/mail -s in.rshd-foo.bar.org root 

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