Брандмауэры и специальное программное обеспечение 8 Часть 4 - страница 92

^ Как работает система протоколирования
Работая с syslogd, вы должны понимать, что происходит, когда syslogd начинает работу. Демон syslogd начинает работу на самых ранних стадиях загрузки системы. Это происходит потому, что механизм syslog должен как можно раньше приступить к протоколированию происходящих в системе событий.

Прежде всего syslog читает содержимое файла /etc/syslog.conf (информация, содержащаяся в этом файле, описывается в предыдущей главе). После этого syslog создает сокет (по умолчанию /dev/log), через который будет осуществляться запись, после чего сокет соединяется со всеми файлами журналов, упоминаемыми в файле /etc/syslog.conf (или в другом конфигурационном файле, указанном в командной строке).

Когда syslogd готов приступить к записи сообщений, он читает содержимое кольцевого буфера ядра. Благодаря этому в журнал попадают все те сообщения, которые отображаются на экране в процессе загрузки системы и рассказывают о том, что было обнаружено системой. Демон syslogd не может начать работу до того, как загрузка ядра будет полностью завершена, поэтому до начала работы syslogd ядро сохраняет сообщения в буфере. Сообщения заносятся в буфер до тех пор, пока буфер не заполнится, после этого для того, чтобы занести в буфер новое сообщение, ядро стирает наиболее старое хранящееся в буфере сообщение.

Чтобы снизить вероятность взлома или какого-либо нарушения работы системы, вы можете запустить syslogd от лица непривилегированного пользователя. Однако прежде чем сделать это, вы должны учесть, что если syslogd работает на более низком, чем root, уровне привилегий, этот демон не сможет связать стандартный порт syslog с номером 514. Однако это вовсе не значит, что в этом случае вы не сможете использовать syslogd в качестве центрального протоколирующего сервера. Чтобы обеспечить прием протоколируемых сообщений через сеть, вы должны связать с syslogd порт с номером выше 1024, а затем перенаправить все UDP-паке-ты, поступающие через порт 514, в тот новый порт с непривилегированным номером. Для этого необходимо изменить определение службы syslog в файле /etc/ services и использовать редиректор (например, ipchains или что-либо подобное) для перенаправления UDP-порта 514 в новый непривилегированный порт syslog. Если вы приказали демону syslogd открыть новый нестандартный порт (с использованием ключа -r) и он не может этого сделать, syslogd завершит работу, выдав сообщение об ошибке.

Изменив уровень привилегий, на котором работает syslogd, вы также должны убедиться в том, что все файлы каталога /var/log, запись в которые разрешена только пользователю root, доступны для записи пользователю, от имени которого работает демон syslogd. По умолчанию запись в подкаталоги и файлы /var/log разрешена только пользователю root. Вы должны изменить права на владение файлами журналов, в противном случае syslogd не сможет осуществить запись в эти файлы. После того как syslogd начал работу, файлы журналов постоянно находятся в активном состоянии. Иными словами, они постоянно открыты. В этом можно убедиться, воспользовавшись командой lsof, которая отображает список открытых файлов. В листинге 23.3 показаны выдержки из вывода команды lsof. Здесь вы видите записи, имеющие отношение к протоколированию, то есть содержащие в себе буквосочетание Log.


Листинг 23.3. Фрагмент вывода команды Isof, показывающий только записи, имеющие отношение к syslog и klog

^ COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

syslogd 1040 root cwd DIR 3,1 1024 2 /

syslogd 1040 root rtd DIR 3,1 1024 2 /

syslogd 1040 root txt REG 3,1 27772 184444 /usr/sbin/syslogd

syslogd 1040 root Ou unix Oxc7fecccO 118 22643 /dev/log

syslogd 1040 root 1u unix Oxc21d7000 118 22645 /home/dns/dev/log

syslogd 1040 root 2u unix Oxc5166360 118 65006 /dev/log

syslogd 1040 root 4w CHR 4,0 123 388 /dev/tty0

syslogd 1040 root 5w REG 3,11 524040 75780 /var/log/messages

syslogd 1040 root 6u unix Oxc2577960 52739 52 /dev/log

syslogd 1040 root 7u unix Oxc68bbOOO 118 19313 /dev/log

syslogd 1040 root 8u inet 612 UDP * :syslog

syslogd 1040 root 9u unix Oxc21d7960 61 5 /dev/log

syslogd 1040 root 10u unix Oxc214d680 65 1 /dev/log

syslogd 1040 root 11u unix Oxc214dccO 66 3 /dev/log

syslogd 1040 root 12u unix Oxc2c7a680 56748 55 /home/dns/dev/log

syslogd 1040 root 13u unix Oxc2577640 19 81 /dev/log

syslogd 1040 root 14w REG 3,1 333293 75968 /var/log/secure

syslogd 1040 root 15w REG 3,1 191389 75781 /var/log/mail

syslogd 1040 root 16w REG 3,1 0 75970 /var/log/news.all

syslogd 1040 root 17w REG 3,1 0 75971 /var/log/spooler

klogd 1043 root cwd DIR 3,1 1024 2 /

klogd 1043 root rtd DIR 3,1 1024 2 /

klogd 1043 root txt REG 3,1 19932 184443 /usr/sbin/klogd

klogd 1043 root 0r REG 0,2 0 5 /proc/kmsg

klogd 1043 root 1u unix Oxc21d76 40 614 socket

Проанализировав самую правую колонку, можно обратить внимание, что несколько процессов подключены через сокет /dev/log. Используется также сокет /home/dns/dev/log, который мы с вами создали в главе 14, об этом сокете я не буду рассказывать подробно. Запись *:syslog показывает, что syslogd связывает порт syslog для приема сообщений от других серверов. Этот порт можно легко заметить в разделе UDP вывода команды netstat -an.

В листинге 23.3 можно легко заметить записи, относящиеся к каждому из файлов журналов. В частности, показаны файлы messages, mail, news.all, secure и spooler.

Демон syslogd находится в постоянном контакте с этими файлами, поэтому их нельзя просто так переместить, переименовать или стереть. Если активный файл журнала перемещается или переименуется, перемещенный или переименованный файл продолжает принимать сообщения. Иными словами, если вы переименовываете файл messages в файл messages.0, а затем выполняете команду touch messages, файл messages.O будет продолжать увеличиваться в размерах. Иначе говоря, в момент запуска syslogd между этим демоном и файлом messages создается канал передачи данных, в момент переименования файла канал между демоном и этим файлом сохраняется. Файл можно редактировать, однако канал передачи данных все равно соединен с этим файлом до тех пор, пока syslogd не будет перезапущен.

2267671912023848.html
2267792340033989.html
2267884944744338.html
2268002984136840.html
2268134480793827.html