Старый 30.01.2011, 19:29   #1
Pashkela
 
Аватар для Pashkela
 
Регистрация: 05.07.2010
Сообщений: 1,243
По умолчанию WhiteCat logcleaner version 1.0 [edition]

Данная утилита предназначена для системных администраторов для:

1. Контроля размера лог-файлов на сервере
2. Для проверки на уязвимость своего сервера на возможность доступа к лог-файлам сервера

Любое иное использование скрипта преследуется по закону

Клинеры все эти конечно круто, но во многих по умолчанию не прописаны пути к логам(apache access & error logs), приходится часто задавать вручную, а можно автоматизировать, поэтому ми несколько изменил witecat и добавил свои пути к логам + возможность добавлять пути к логам самостоятельно.

Пути к логам находятся в массиве APACHE_PATH[] (стр. 54, файл witecat.c). Чтобы добавить новый путь - просто добавьте строчку в массив, соблюдая запятые. Во время работы при попытке обработать несуществующий путь ошибки не вываливаются.

(поддержка FreeBSD, Linux, SOLARIS)

Компиляция: gcc whitecat.c -o whitecat

Запуск(например хотим почистить свой ip в логах):

./whitecat -u root -a 127.0.0.1

Скрипт кстати можно использовать как локальный брутер путей к логам, т.к. если найдет - отпишется (в данной версии 52 уникальных путей к логам).

В APACHE_PATH[] можно добавлять только текстовые логи

PS: На основе whitecat 1.1, код брал прямо из темы отсюда:

http://forum.antichat.ru/threadnav36595-4-10-whitecat.html


Алгоритм, конечно, не был рассчитан изначально на огромные файлы логов (неизвестно еще, сколько места на диске).

PS: for rdot.org
Вложения
Тип файла: zip whitecat_se.zip (5.9 Кб, 1225 просмотров)

Последний раз редактировалось Pashkela; 25.10.2012 в 01:23..
Pashkela вне форума   Ответить с цитированием
Старый 01.02.2011, 10:41   #2
asddas
 
Аватар для asddas
 
Регистрация: 04.08.2010
Сообщений: 153
Репутация: 161
По умолчанию

Пробывал так, не запускался.
Цитата:
Запуск(например хотим почистить свой ip в логах):

./witecat -u 127.0.0.1
Глянул сорец, в итоге ./witecat -u root -a 127.0.0.1 отработал.
asddas вне форума   Ответить с цитированием
Старый 02.02.2011, 21:09   #3
destiny
 
Аватар для destiny
 
Регистрация: 12.08.2010
Сообщений: 243
Репутация: 79
По умолчанию

до полного идеала не хватает только разбора ротации логов…
__________________
тьеу-тьеу-тьеу-ти-ть-ть-тьеу
destiny вне форума   Ответить с цитированием
Старый 02.02.2011, 21:26   #4
tipsy
 
Аватар для tipsy
 
Регистрация: 11.07.2010
Сообщений: 415
Репутация: 311
По умолчанию

До полного идеала не хватает возможности почистить хвостик лога апача на 78гб.
Обычно я использую греп, руками как-то спокойнее.
Но вышеупомянутый лог хз чем чистить.

Последний раз редактировалось tipsy; 02.02.2011 в 21:28..
tipsy вне форума   Ответить с цитированием
Старый 02.02.2011, 22:12   #5
destiny
 
Аватар для destiny
 
Регистрация: 12.08.2010
Сообщений: 243
Репутация: 79
По умолчанию

с одним файлом всегда можно разобраться вручную. плохо, когда их много.
имхо с твоим файлом должно сработать что-то вроде
Код:
 printf '$-1000,$/1.1.1.1/d\nwq'|ed - file
не тестил.
__________________
тьеу-тьеу-тьеу-ти-ть-ть-тьеу

Последний раз редактировалось destiny; 02.02.2011 в 22:50..
destiny вне форума   Ответить с цитированием
Старый 02.02.2011, 22:29   #6
tipsy
 
Аватар для tipsy
 
Регистрация: 11.07.2010
Сообщений: 415
Репутация: 311
По умолчанию

Ты не мог бы вкратце пояснить? Не осиливаю, что делает команда, man не помог.
tipsy вне форума   Ответить с цитированием
Старый 02.02.2011, 22:52   #7
destiny
 
Аватар для destiny
 
Регистрация: 12.08.2010
Сообщений: 243
Репутация: 79
По умолчанию

как я её хотел: для ed нужен либо интерактивный ввод, либо такой скрипт. его можно передать printf'ом

$-1000,$ - смотреть последние тысячу строк
/1.1.1.1/d - удалять строчки, содержащие 1.1.1.1
wq - сохранить и выйти
__________________
тьеу-тьеу-тьеу-ти-ть-ть-тьеу
destiny вне форума   Ответить с цитированием
Старый 05.02.2011, 11:51   #8
asddas
 
Аватар для asddas
 
Регистрация: 04.08.2010
Сообщений: 153
Репутация: 161
По умолчанию

Не удаляет временные файлы в /tmp, тестил на бубунте, и редхате, где благополучно спалился после многократного изпольвования, whitecat сожрал свободное пространство долбанными логами апача!
Пожалуй, попрошу прощения у ваниша, и возьму его на службу обратно

UPD:
Для правки whitecat, находим строку
Код:
sprintf(buffer, "cat %s > %s", tmpfilename, dstfilename);
меняем на
Код:
sprintf(buffer, "mv %s %s", tmpfilename, dstfilename);

Последний раз редактировалось asddas; 05.02.2011 в 12:12..
asddas вне форума   Ответить с цитированием
Старый 05.02.2011, 14:51   #9
tipsy
 
Аватар для tipsy
 
Регистрация: 11.07.2010
Сообщений: 415
Репутация: 311
По умолчанию

Цитата:
Сообщение от asddas Посмотреть сообщение
Не удаляет временные файлы в /tmp, тестил на бубунте, и редхате, где благополучно спалился после многократного изпольвования, whitecat сожрал свободное пространство долбанными логами апача!
Пожалуй, попрошу прощения у ваниша, и возьму его на службу обратно

UPD:
Для правки whitecat, находим строку
Код:
sprintf(buffer, "cat %s > %s", tmpfilename, dstfilename);
меняем на
Код:
sprintf(buffer, "mv %s %s", tmpfilename, dstfilename);
Так нельзя, после этого логи не будут вестись.

Upd
Раз уж всё равно используются шелл команды, почему бы сделать так:
sprintf(buffer, "cat %s > %s; rm %s", tmpfilename, dstfilename, tmpfilename);

Последний раз редактировалось tipsy; 05.02.2011 в 15:00..
tipsy вне форума   Ответить с цитированием
Старый 05.02.2011, 15:12   #10
tipsy
 
Аватар для tipsy
 
Регистрация: 11.07.2010
Сообщений: 415
Репутация: 311
По умолчанию

Цитата:
Сообщение от Pashkela Посмотреть сообщение
мда, потестил на другой системе (не на бубунте) - действительно, все логи оставались в /tmp дире неудаленные))) Вот что значит пилить чужой код и не прочитать КАЖДУЮ строчку. Хотя автор в качестве издевки что ли оставил коментарий:

//unlink(tmpfilename);

но без кода)
Код волшебным образом появится, если убрать два слеша.

Цитата:
mv не схавало tmp-файл размером 165 mb) Так что уж лучше просто - rm
mv не "хавает" файлы, а заменят в файловой системе запись о файле во втором аргументе тем, что указан в первом (если файлы на одном разделе). Содержимое и размер файлов роли не играет.

Цитата:
Код:
int copy_tmp(char *dstfilename, char *tmpfilename)
{
char buffer[BUFSIZ];

sprintf(buffer, "cat %s > %s", tmpfilename, dstfilename);
#ifdef DEBUG
printf("%s\n", buffer);
#endif

if (system(buffer) < 0) {
printf("Error copying from tempfile!");
return 0x48;
}
//unlink(tmpfilename);
sprintf(buffer, "rm %s", tmpfilename); <==== тут
}
Функция sprintf не выполняет шелл-команды.

Последний раз редактировалось tipsy; 05.02.2011 в 15:17.. Причина: терминология
tipsy вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot