Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #69, СЕНТЯБРЬ 2004 г.

Скажи логам нет!

Докучаев Дмитрий aka Forb

Xakep, номер #069, стр. 069-080-3


SunOS’ный Zap2

Наконец, мы подобрались к самой проблемной операционке, под которую не компилится ни Vanish, ни Grlogwipe. Это связано с тем, что структура utmp в Солярке оформлена чуть по-другому, да и файлы расположены в других местах. Wtmp находится в каталоге /usr/adm, а utmp вообще в /etc. В утилите Zap2 (http://nsd.ru/soft/1/sunos-zap2.zip) все изменения учтены, поскольку этот логклинер используется только для Соляры. При чистке wtmp логвайпер переходит в конец файла, а затем последовательно просматривает все его элементы до начала. Естественно, что скорость работы такой утилиты будет высокой. Во время тестов Zap2 вычистил логи за три секунды. И это не предел!

Текстовое журналирование

Помимо бинарных, существуют и текстовые логи. Они находятся в каталоге /var/log и создаются, как правило, демоном syslogd (либо его аналогом). Конечно, можно протроянить демон, и проблема текстового логирования будет решена. Но лучше пойти другим путем, применив текстовый логклинер. На самом деле обработать читабельный журнал можно и без дополнительных утилит. Чтобы вычистить лог от шаблона pattern, достаточно выполнить две следующие команды:

cat /var/log/messages | grep –v pattern > /var/log/messages.1

mv –f /var/log/messages.1 /var/log/messages

Подобная очистка используется в подавляющем большинстве логклинеров, написанных на sh (например, в скрипте fresht.sh – http://kamensk.net.ru/forb/1/x/fresht.sh). В других утилитах, написанных на C, используются стандартные функции fopen/fclose и strstr, что дает нехилый прирост в скорости. Логвайпер plain_wipe.c (http://kamensk.net.ru/forb/1/x/plain_wipe.c) способен обрабатывать логи с конечной позиции, последовательно перемещая указатель к верхним записям.

Собственный логклинер

Настало время попрактиковаться в усвоении материала. Для этого напишем собственный логвайпер, вычищающий /var/log/utmp и /var/log/secure от посторонних записей. Я постараюсь сделать проект универсальным, чтобы ты смог быстро и без особых усилий доработать его самостоятельно.

Для обращения к бинарным файлам нам потребуется установить дополнительный модуль User::Utmp. Благодаря тому, что Perl содержит множество модулей, админ не заметит установку пакета. Сам проект находится по адресу http://search.cpan.org/CPAN/authors/id/M/MP/MPIOTR/User-Utmp-1.6.tar.gz. Установи его, а затем напиши процедуру, которая будет вычищать бинарные журналы.

В моем скрипте подобная функция названа именем binary(). Из-за того, что в модуле нет возможности вставить запись нулевой длины, придется воспользоваться алгоритмом от Vanish. В сценарии будет открыт настоящий utmp с последующим чтением всех данных. Затем создается временный файл (я его назвал /tmp/.tmp), в который записывается структура оригинального utmp-файла, исключая скрываемую запись. Непонятно? Давай обратимся к исходникам этой процедуры, и все станет ясно.

Назад на стр. 069-080-2  Содержание  Вперед на стр. 069-080-4