RDot

RDot (https://rdot.org/forum/index.php)
-   Релизы/Releases (https://rdot.org/forum/forumdisplay.php?f=11)
-   -   WhiteCat logcleaner version 1.0 [edition] (https://rdot.org/forum/showthread.php?t=1179)

Pashkela 30.01.2011 18:29

WhiteCat logcleaner version 1.0 [edition]
 
Вложений: 1
Данная утилита предназначена для системных администраторов для:

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

asddas 01.02.2011 09:41

Пробывал так, не запускался.
Цитата:

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

./witecat -u 127.0.0.1
Глянул сорец, в итоге ./witecat -u root -a 127.0.0.1 отработал.

destiny 02.02.2011 20:09

до полного идеала не хватает только разбора ротации логов… :)

tipsy 02.02.2011 20:26

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

destiny 02.02.2011 21:12

с одним файлом всегда можно разобраться вручную. плохо, когда их много.
имхо с твоим файлом должно сработать что-то вроде
Код:

printf '$-1000,$/1.1.1.1/d\nwq'|ed - file
не тестил.

tipsy 02.02.2011 21:29

Ты не мог бы вкратце пояснить? Не осиливаю, что делает команда, man не помог.

destiny 02.02.2011 21:52

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

$-1000,$ - смотреть последние тысячу строк
/1.1.1.1/d - удалять строчки, содержащие 1.1.1.1
wq - сохранить и выйти

asddas 05.02.2011 10:51

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

UPD:
Для правки whitecat, находим строку
Код:

sprintf(buffer, "cat %s > %s", tmpfilename, dstfilename);
меняем на
Код:

sprintf(buffer, "mv %s %s", tmpfilename, dstfilename);

tipsy 05.02.2011 13:51

Цитата:

Сообщение от asddas (Сообщение 13585)
Не удаляет временные файлы в /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 14:12

Цитата:

Сообщение от Pashkela (Сообщение 13589)
мда, потестил на другой системе (не на бубунте) - действительно, все логи оставались в /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 не выполняет шелл-команды.


Часовой пояс GMT +3, время: 22:02.

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