Я нахожу случаи, когда syslog-ng записывает мусор, за которым следует пустой kernel.emerg
линия в одной из наших производственных сред. Пример одного:
Dec 21 00:14:56 someserver [syslog-ng.err] Error processing log message: <Q▒b
+\c 21 00:14:56 someserver [syslog-ng.err] Error processing log message: <;E0
Dec 21 00:14:56 someserver [syslog-ng.err] Error processing log message: <▒"▒l
Dec 21 00:14:57 someserver [syslog-ng.err] Error processing log message: <▒▒▒▒e▒F
Dec 21 00:14:57 someserver [syslog-ng.err] Error processing log message: <▒▒
Dec 21 00:14:58 someserver [kernel.emerg]
В kernel.emerg
линия меня особенно беспокоит. В соответствии с man 3 syslog
:
LOG_KERN
kernel messages (these can’t be generated from user processes)
Похоже, это наводит на мысль, что средство ядра нельзя подделать. Я вижу, где сами системные вызовы могут предотвратить такую подделку, но правильно ли я полагаю, что нет ничего, что могло бы остановить процесс от записи прямо к /dev/log
и подделка объекта kernel
? Я хочу сказать, что единственное, что действительно могло бы остановить такой спуфинг, - это демон syslog, который различает, получил ли он сообщение от /proc/kmsg
по сравнению с другими источниками.
2.6.18-194.8.1.el5
. Я пока не могу контролировать эти факторы; считайте меня отруганным.syslog-ng
Пакет 3.1.4 (32-битный и работает на 64-битном ядре, но я бы не стал объяснять, что это связано).kmsg
в ядре 3.5 может создавать подобные ошибки вывода, но здесь это определенно не так.Сообщения не приходят из сети. Это единственный определенный источник:
source s_syslog {
# message generated by Syslog-NG
internal();
# standard Linux log source (this is the default place for the syslog()
# function to send logs to)
unix-stream("/dev/log");
# messages from the kernel
file("/proc/kmsg" program_override("kernel: "));
};
Согласно руководству администратора syslog-ng ( http://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.3-guides/en/syslog-ng-ose-v3.3-guide-admin-en/html-single/ index.html # kernel-messages ), средство ядра (по крайней мере, как определено по умолчанию) читает непосредственно из / proc / kmsg, что не может быть записано из пользовательского пространства.
(Это из памяти, но я почти уверен, что RHEL 5.5 не нуждается в klogd или даже ksymoops для вывода символа в адрес; тем не менее, проверьте свою документацию на это ..)
Если вас беспокоит (см. Мой комментарий выше), что какой-то мошеннический процесс добавляет буквальную строку "kernel:" к своему сообщению, вы всегда можете добавить фильтр, который удалит строку "kernel:" в начале любого сообщения, полученного на быть уверенным. Либо определите / proc / kmsg как отдельный источник с отдельным местом назначения.
РЕДАКТИРОВАТЬ: при просмотре этого раздела:
"Заметка
Если сообщение не имеет надлежащего заголовка системного журнала, syslog-ng обрабатывает сообщения, полученные из файлов, как отправленные средством kern. Используйте опции default-feature и default-priority в определении источника, чтобы при необходимости назначить другое средство ».