albibek 25.12.2009 13:56
Security — Журналирование событий. Часть 2.1 - sysklogd
В следующих частях мы с вами рассмотрим самые популярные на сегодняшний день syslog-серверы и выясним, что они умеют и как это всё настраивается. Писать о всех трёх сразху получается длинновато и сложно воспринимается, поэтому первым подопытным будет sysklogd, а за ним уже последуют syslog-ng и rsyslog.Ещё раз напомню мантру из первой части для тех, кому лень было эту часть читать :):
Настройка любого syslog-сервера сводится к следующей задаче:
Определение действий над сообщением по критериям facility, severity, хосту-источнику(для приходящих по сети), собственно тексту сообщения, возможно, другим критериям...
Определение действий над сообщением по критериям facility, severity, хосту-источнику(для приходящих по сети), собственно тексту сообщения, возможно, другим критериям...
Sysklogd
Sysklogd - один из самых старых и минималистичных syslog-серверов, пришедший в мир Linux из мира BSD. От BSD-версии незначительно отличается в настройке. По-умолчанию поставляется с Debian etch и lenny, про другие дистрибутивы сказать не смогу. В следующей версии Debian вместо него используется rsyslog. Логически разделён на 2 демона - sysklogd - собственно syslog-демон и klogd - демон, читающий сообщения ядра, поэтому будьте готовы увидеть в списке процессов 2 демона вместо одного.
Настройки его, как правило, хранятся в файле /etc/syslog.conf и задаются построчно. Срока имеет вид:
<критерий><;<критерий>;...> <действие>
Где <критерий> должен выглядеть как:
<facility><,facility,...>.<severity><,<severity>,...>
Проще говоря, можно задать несколько facility и/или severity, отделяя их запятой, и задать несколько критериев, отделяя их точкой-с-запятой.
Правила, заданные в каждой строке никак не зависят друг от друга. Поэтому если вы, например, сделаете одинаковый критерий для двух разных файлов, то вы получите 2 одинаковых файла.
Например:
mail.crit /var/log/mail.log
Будет означать "записывать все сообщения почтовой подсистемы начиная с crit и выше в файл /var/log/mail.log". Обратите внимание, что записываются не сообщения только с severity crit, а все сообщения с crit и выше, т.е. crit, alrt и emerg.
Кроме того:
Вместо facility и severity может стоять *, что будет означать любое facility/severity
Знак "=" перед severity ограничит сообщение только указанным критерием.
Знак "!" перед severity будет означать все severity ниже указанного.
Комбинация "!=" перед severity позволит исключить конкретное severity.
Примеры:
# Писать любые сообщения почтовой подсистемы в /var/log/mail.log
mail.* /var/log/mail.log
# Писать все критические сообщения (alert и emerg) в файл /var/log/alert.log
*.alert /var/log/alert.log
# То же самое
*.=alert;*.=emerg /var/log/alert.log
# Писать отладочную(debug) информацию в файл /var/log/debug.log
*.=debug /var/log/debug.log
# Писать отладочную(debug) информацию от ядра и системных демонов в /var/log/system_debug.log
kern,daemon.=debug /var/log/system_debug.log
# Писать отладочную(debug и info) информацию в файл /var/log/debug.log
*.!notice /var/log/debug.log
# Писать все сообщения в файл /var/log/all.log
*.* /var/log/all.log
Действие, производимое над сообщением определяется перед полем <действие> (без пробела). Указываю их в таблице:
Символ и параметрыДействие
/<остаток пути к файлу> | Запись в файл. Файлом также может быть устройство, например /dev/null или /dev/console |
-/<путь к файлу> | Записывать в файл, но "сбрасывать" файл на диск при записи каждого сообщения. |
|<путь к файлу> | Запись в fifo (fifo нужно предварительно создать командой mkfifo) |
@<имя сервера или IP> | Отправка на удалённый сервер по UDP |
* | Отправка в консоли всем залогиненным пользователям |
<имя пользователя><,имя пользователя,...> | Отправка определённым залогиненным пользователям |
Примеры:
# Писать все критические сообщения (alert и emerg) в спец-файл fifo
# Создать спец-файл командой mkfifo /var/log/pipe.fifo
*.alert |/var/log/pipe.fifo
# Отправлять информацию об аутентификации на сервер безопасности
auth.*;authpriv.* @security
# Оповещать всех пользователей о важных событиях
*.emerg *
# Оповещать рута и Васю Пупкина о менее важных событиях тоже
*.crit root,pupkin
# Напоследок реальный пример из Debian - вся перечисленная муть попадает в /var/log/messages
# none здесь означает случай, когда severity сообщения не указано (для локальных сообщений такое может быть)
# Слеш используется, если хочется разместить правило на несколькох строках
# Учтите, что без слеша каждая строка будет восприниматься раздельно!
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages