Операционные системы - статьи

         

Обработка сообщений демоном syslogd


Все сообщения, формируемые отдельными программами с помощью функции syslog, отправляются через сокет /dev/log системному демону syslogd. Надо сказать, что вообще-то в системе запускаются два демона протоколирования: syslogd и klogd, входящие в состав пакета sysklogd (). Демон klogd отвечает за протоколирование событий, происходящих в ядре системы. Ядро не может использовать стандартную функцию syslog - стандартные библиотеки предназначены для использования только обычными приложениями, а поскольку ядро тоже нуждается в аналогичных функциях, в него включены свои библиотеки, недоступные приложениям, поэтому ядро использует свой собственный механизм генерации сообщений.

Обработка сообщений демоном syslogd состоит в том, что он постоянно отслеживает появление сообщений и сравнивает каждую пришедшую запись с правилами, которые находятся в файле /etc/syslog.conf и записываются в виде строки, состоящей из двух полей. Левое поле () задает один или несколько шаблонов, по которым отбираются сообщения. Правое () определяет порядок обработки отобранных сообщений. Каждый шаблон в поле имеет вид . Значениями поля может служить одно из условных наименований категорий, несколько таких наименований или символ (все категории). Значениями поля может служить одно из условных наименований уровня, символ (все сообщения данной категории, независимо от уровня) или слово none (не записывать сообщения данной категории).

Когда обнаруживается соответствие категории и уровня полученного сообщения с одним из шаблонов поля какой-то строки, syslogd обрабатывает запись в соответствии с действием, прописанным в правом поле данной строки. В поле может стоять:

  • имя файла протокола;
  • название именованного канала (FIFO);
  • указание на терминал или консоль (как на устройство: /dev/tty1);
  • указание на удаленный хост;
  • список пользователей, на терминалы которых будет послано сообщение по данному правилу.

    В качестве устройства в поле можно указать также принтер - /dev/lp0, что целесообразно, когда речь идет об особо важных системах.
    Протоколы, которые распечатаны, не могут быть стерты или изменены хакерами, так что это неплохое применение для старого матричного принтера.

    Кроме строк с правилами в файле /etc/syslog.conf, могут содержаться пустые строки и строки комментариев. Подробнее о структуре файла /etc/syslog.conf можно прочитать на man-страничке syslog.conf.

    Если сообщение соответствует шаблонам двух или более строк, оно будет обрабатываться по каждому из этих правил. Кроме того, если в поле перечислены несколько пар , то последующие пары могут отменить действие предыдущих. Пример такой отмены дан на рис. 1 - в файл /var/log/messages записываются все сообщения, уровень которых равен или выше info, однако при этом пропускаются (не записываются) сообщения категорий mail, authpriv и cron.





    # Выдавать все сообщения от ядра на консоль. #kern.* /dev/console # Записывать в протокол все сообщения уровня info или выше, # кроме сообщений почтовой системы, содержащих конфиденциальную # информацию аутентификационных сообщений и сообщений демона cron. *.info;mail.none;authpriv.none;cron.none /var/log/messages # Записывать в отдельный файл сообщения, содержащие конфиденциальную # информацию аутентификации, независимо от их уровня. authpriv.* /var/log/secure # Все сообщения почтовой системы тоже записывать отдельно. mail.* /var/log/maillog # Протоколировать действия демона cron. cron.* /var/log/cron # Сообщения о чрезвычайных ситуациях должны немедленно # получить все пользователи системы *.emerg * # Сообщения от служб новостей уровня crit и выше записывать в отдельный файл. uucp,news.crit /var/log/spooler # Сообщения, выдаваемые на этапе загрузки, копировать в файл boot.log local7.* /var/log/boot.log

    Рис. 1. Пример файла /etc/syslog.conf для Red Hat Linux 7.1

    Из рис. 1 видно, что большинство сообщений просто записывается в различные файлы протоколов, расположенные в каталоге /var/log или его подкаталогах, причем основным файлом системного протокола в Red Hat Linux является файл /var/log/messages.В него не попадают только сообщения категорий mail, authpriv и cron (для которых выделены отдельные файлы).


    Содержание раздела