Автоматизированное создание политики Systrace
В неправдоподобно идеальном случае системный администратор должен изучить исходный программный код каждого приложения, устанавливаемого на его систему, и вручную создать политики доступа к системным вызовам, полагаясь на собственное понимание каждой функции приложения. Практически никто из системных администраторов не имеет времени для такой работы.
К счастью, systrace имеет средство генерации политик с учетом всех системных вызовов, выполняемых приложением. Рассмотрим данный способ создания политики для inetd. Для включения автоматического режима используется ключ -А с указанием полного пути к необходимой программе:
# systrace -A /usr/sbin/inetd
Для передачи флагов в inetd добавьте их в конец командной строки.
После этого используйте программу, для которой разрабатывается политика. На данной системе открыты службы ident, daytime и time, поэтому запустите программы, использующие эти службы. Для запуска запросов ident запустите IRC-клиент и для обращения к службам времени обратитесь с помощью telnet к 13-му и 37-му портам. После того как были проверены возможности inetd, выключите его. Демон inetd не имеет управляющей программы, поэтому его работа завершается с помощью команды kill и идентификатора процесса. Проверка списка процессов показывает нам два процесса:
# ps -ах | grep inet
24421 ?? Ixs 0:00.00 /usr/sbin/jnetd
12929 ?? Is 0:00.01 systrace -A /usr/sbin/inetd
He «убивайте» процесс systrace (в данном случае PID 12929). У него имеется информация обо всех системных вызовах, выполненных inetd. Завершите работу процесса inetd (PID 24421), и процесс systrace завершится нормальным образом.
Теперь найдите в домашнем каталоге подкаталог .systrace, содержащий заготовку systrace-политики для inetd. Не забывайте о том, что политики помещаются в файлы, имя которых составлено из полного пути к программе, в котором косые черты заменены знаком подчеркивания. Вот результат выполнения команды Is:
# Is .systrace
us r_l i bexec_i dentd us r_sbin_i netd
systrace создал две политики, а не одну. Помимо ожидавшейся политики для /usr/ sbin/inetd, создана политика для /usr/libexec/identd. Так произошло из-за того, что inetd службы времени реализует внутренне (самостоятельно), a ident для запросов службы вызывает отдельную программу. Поскольку inetd порождает identd, программа systrace также захватила системные вызовы identd.