Команда интерпретатора позволяет осуществлять дополнительную обработку по событию соответствия попытки доступа правилу из списка управления доступом. Во всех практических примерах эта возможность используется в файле 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 является полноценным языком настройки и позволяет решать любые разумные задачи. Несмотря на это существует расширенная версия этого языка.