| emerg | События, угрожающие работе системы |
В Red Hat-совместимых системах можно ставить перед уровнем серьезности дополнительные модификаторы «=» (регистрировать сообщения только указанного уровня) и «!» (игнорировать сообщения указанного и более высоких уровней). Можно также направлять сообщения не только в обычный файл, но и в именованный канал, поставив перед ним символ «|».
Листинг 9.4. Примерный файл /etc/syslog.conf
# Протоколирование аутентификации. Файл протокола
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
# Файл регистрации попыток доступа к системе, имеет
# ограниченный доступ. Обычно в этот файл записываются
# сообщения об удаленном доступе к этой машине, например,
# сообщения от демона FTP о том, какие пользователи и
# когда регистрировались на данном сервере.
authpriv.* /var/log/secure
# Сообщения пользовательских программ
user.* -/var/log/user.log
# Протоколировать все информационные сообщения, кроме
# почтовых
*.info;mail.none; -/var/log/messages
# Протоколирование почты
# Уровень отладки, информации и замечаний
mail.=debug;mail.=info;mail.=notice -/var/log/mail/info
# Уровень предупреждений
mail.=warn -/var/log/mail/warnings
# Уровень ошибок
mail.err -/var/log/mail/errors
# Протоколирование демона cron.
cron.=debug;cron.=info;cron.=notice -/var/log/cron/info
cron.=warn -/var/log/cron/warnings
cron.err -/var/log/cron/errors
# Протоколирование ядра
kern.=debug;kern.=infо;kern.=notice -/var/log/kernel/info
kern.=warn -/var/log/kernel/warnings
kern.err -/var/log/kernel/errors
# Очередь печати: сообщения уровня от 'инфо' до 'предупреждений'
lpr.info;lpr.!err -/var/log/lpr/info
# Протоколирование демонов: сообщения всех уровней, кроме 'инфо'
daemon.=debug;daemon.!=info -/var/log/daemons
# Критические сообщения - всем тревога
*.emerg *
# Сохранять ошибки почты и новостей в отдельном файле
uucp,news.crit -/var/log/spooler
# Загрузочные сообщения
lоса17.* -/var/log/boot.log
9.3.2. Сетевое протоколирование
Протоколы — это история жизни системы; они необходимы администратору для выявления и устранения неполадок, но они необходимы и злоумышленнику — для поиска уязвимости или для того, чтобы скрыть следы своего вторжения. Поэтому иногда бывает полезно вести журнал на другом, более безопасном, компьютере.
Протоколирование в сети — это перенаправление сообщений демону syslogd, запущенному на другой машине локальной сети, где они будут записаны в локальный файл. Таким образом, один демон syslogd, передающий сообщения, выступает в роли клиента, а другой такой же, но принимающий и сохраняющий их, — в роли сервера.
Сообщения передаются по протоколу UDP. Он не обеспечивает ни гарантированной доставки пакетов, ни секретности, но работает несколько быстрее, чем TCP. Следующая строка должна присутствовать (в незакомментированном виде!) в файлах /etc/services обоих компьютеров:
syslog 514/udp
Затем необходимо внести некоторые коррективы в файл конфигурации. На клиентской машине определите объекты протоколирования (селекторы), как и раньше, а в качестве действия укажите @имя_узла, где имя_узла — имя компьютера, на который будут перенаправлены сообщения. Это имя желательно указать в файле /etc/hosts, так как демон syslogd может быть запущен до сервера доменных имен или сервер DNS окажется недоступным.
На сервере протоколирования может быть необходимо перезапустить syslogd с другим набором ключей. В Red Hat-совместимых системах syslogd по умолчанию игнорирует сообщения из сети; для того, чтобы он начал их принимать, он должен быть запущен с ключом -r (это верно для пакета sysklogd версии 1.3 и новее. Ранние версии вели себя в точности наоборот).
Каждое сообщение в журнальном файле маркируется полным именем узла, с которого оно поступило (с указанием домена). Чтобы syslogd на сервере записывал только краткие имена узлов, нужно запустить его с ключом -l <список_узлов> или -s <список_доменов>. Узлы и домены в списках нужно разделять двоеточиями.
9.3.3. Протоколирование ядра. Демон klogd и команда dmesg
Демон klogd предназначен для перехвата и протоколирования сообщений ядра Linux. Ядро, в отличие от пользовательского процесса, не может выводить сообщения, пользуясь стандартной функцией syslog(): библиотека, содержащая эту функцию, доступна только
