Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Чистка логов Апача, Нужны названия и ссылки
 
Может кто знает уже готовый парсер для чистки логов Апача по конкретным запросам/хостам?

Не хочется велосипед изобретать...
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
grep -v "твой ip" access_log (или error_log) > tmp; mv tmp access_log
 
А как насчот времени модификации фаила? через touch?
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
Цитата
А как насчот времени модификации фаила? через touch?
Это немного туповато!!!  :cry:  :cry:  :cry:
 
to logos:
Цитата
grep -v "твой ip" access_log (или error_log) > tmp; mv tmp access_log
После такой 'чистки' Apache больше ничего не будет писать в access_log до своего рестарта.

To Shanker:
Цитата
А как насчот времени модификации фаила? через touch?
В Unix есть три типа атрибутов времени, которые характеризуют файл:

Дата последнего изменения метаданных файла (ctime). Её можно увидеть с помощью ls -lc filename). Для многих редкоизменяемых файлов ctime обычно указывает на дату их создания.

Дата последней модификации содержимого файла (mtime). Её можно увидеть с помощью ls -l filename).

Дата последнего доступа к файлу (atime). В современных условиях это уже малоактуальный атрибут и его использование часто отключается администраторами путём добавления соответсвующей опции (noatime) при монтировании файловой системы.

Для того чтобы пользовательские приложения могли изменять вышеперечисленные атрибуты, ядро предоставляет несколько *utime-подобных системных вызовов (которые и используются утилитой touch). Однако, есть одно "НО". Дело в том, что эти системные вызовы позволяют изменять только mtime и atime атрибуты, а вот ctime изменяется только самим ядром. Например, если атакующий заменил какой-нибудь бинарный executable файл, а затем через touch (или подобную утилиту) "подогнал" его mtime+atime атрибуты под те же значения, которые были ранее у файла-оригинала, то факт подмены файла очень просто обнаруживается при помощи команд ls -lc  и ls -l. Простро сравните даты. Если mtime является более ранней датой чем ctime, то это наталкивает на определённые подозрения. Особенно если метаданные анализируемого файла в нормальной ситуации не должны были измениться (а в большинстве ситуаций метаданные бинарных executable файлов очень редко изменяются с момента их создания).

Короче, для полноценного и чистого исправления *time атрибутов файла необходимо обязательно изменять и ctime. Это можно сделать путём "отката" системного времени перед внесением изменений в файл (хотя это и ОЧЕНЬ КОРЯВЫЙ метод, но он и самый простой), либо путём прямого исправления файловой системы (этот метод по-сложнее, т.к. он не всегда может быть выполнен штатными средствами). Второй метод можно раскрыть следующим примером:

Допустим, у нас имеется корневая файловая система ext2 на /dev/hda2 и нам необходимо изменить ctime атрибут файла /etc/passwd. Воспользуемся штатной утилитой debugfs из пакета e2fsprogs.

bash#  debugfs -w /dev/hda2
debugfs: 1.39 (29-May-2006)
debugfs: show_inode_info /etc/passwd
.......skip.....
ctime: 0x44eed0fe -- Fri Aug 25 10:29:18 2006
.......skip.....
debugfs: set_inode_field /etc/passwd ctime 20060102030405
debugfs: show_inode_info /etc/passwd
.......skip.....
ctime: 0x43b89825 -- Mon Jan 02 03:04:05 2006
.......skip.....
debugfs: quit
bash#

P.S. Здесь специально не упоминаются системы хранения и проверки контрольных сумм/хешей файлов, т.к. это выходит за рамки поднятых вопросов.

Удачи.
 
Цитата
ClosedGL пишет:
После такой 'чистки' Apache больше ничего не будет писать в access_log до своего рестарта.
Не свосем: апач постоянно обращается к этому файлу, поэтому вообще не даёт его перезаписывать!  :(
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
Я имел ввиду, что если использовать тот способ, который предложил г-н logos, то система журналирования апача нарушится (из-за того что изменяется inode number access_log файла).
 
ClosedGL, дык апач вообще не даёт перезаписывать этот файл! Поэтому совет logos'а не подходит. Верней, подходит, если убить апач, выполнить те самые манипуляции с лог-файлами и снова запустить его.
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
А какую ошибку выдаёт если не убивать апач и пытаться манипулировать с логами ?
 
2 Shanker  
наверно апач в Windows системе не дает перезаписать файл.
Что вполне возможно.
В юниксе рут конечно может удалить файл и перезаписаь его.
чтоб апач писал после перезаписи файла, его надо рестартануть
killall -1 httpd
 
Цитата
ClosedGL пишет:
А какую ошибку выдаёт если не убивать апач и пытаться манипулировать с логами ?
У меня не рутовкие права. Просто не даёт перезаписать файл: ошибка записи.

Тем не менее вопрос остаётся открытым: есть ли возможность модификации логов БЕЗ рестарта апача? Или это невозможно даже теоритически?
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
Цитата
есть ли возможность модификации логов БЕЗ рестарта апача

Да можно конечно. хоть обычным grep'ом :)
Только root привилегии нужны. Обычно apache открывает логфайлы из главного процесса, который работает с привилегиями суперпользователя. А его потомки просто наследуют дескрипторы и пишут туда без проблем. Но сам логфайл принадлежит пользователю root, и поумолчанию он лишь root'у и доступен для изменения.
 
Цитата
ClosedGL пишет:
Да можно конечно. хоть обычным grep'ом
А как же твои же слова:

Цитата
ClosedGL пишет:
После такой 'чистки' Apache больше ничего не будет писать в access_log до своего рестарта

То ли явное противоречие толи я что-то не догоняю  :(
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
 
To Shanker:
Цитата
То ли явное противоречие толи я что-то не догоняю
grep отлично подходит для "чистки" логов прямо в realtime. Просто нужно правильно его использовать. :)

Внимательно посмотри на первоначальную команду:
Цитата
grep -v "твой ip" access_log (или error_log) > tmp; mv tmp access_log
Здесь grep создаёт временный файл tmp. Далее команда 'mv tmp access_log'  УДАЛЯЕТ старый access_log файл, а вместо него помещаеет переменованный tmp. Именно в этом УДАЛЕНИИ вся проблема. Новый файл имеет другой inode и Apache о нём ничего не знает. Apache пытается работать со старым access_log, который уже удалён. Таким образом журналирование в access_log нарушается и не будет производиться до рестарта Apache.

Правильнее будет использовать следующую команду:

grep -v "твой ip" access_log  > tmp; cat tmp > access_log; rm -f tmp

Смысл её примерно тот же, но метод работы с файлами другой. В этом случае старый access_log не будет удалён, а заменится лишь его содержимое и система журналирования повреждена не будет.

Удачи.
 
Теперь всё понял :)

ClosedGL
logos

Спасибо, +1
"Красота - как специи, которые хорошую еду делают ещё вкуснее, а без еды есть невозможно."
Страницы: 1
Читают тему