Назад | Перейти на главную страницу

Чтение файлов журнала из веб-приложения

Я хочу написать небольшое приложение PHP для мониторинга журналов на сервере Debian, включая журналы системного журнала и сообщения Apache / PHP. Проблема здесь в том, что пользователь Apache (www-data) не имеет доступа к каталогу / var / log. Как лучше всего предоставить доступ к журналам для PHP-приложения? Предположим, что файлы журналов могут быть действительно большими, например, до сотен мегабайт.

Есть идеи:

Может у кого есть решение получше?

Что ж, хотя исходному посту уже несколько месяцев, я хотел бы поделиться с вами своим подходом:

В моем случае я просто хочу отслеживать /var/log/mail.log. Поэтому я добавляю в / etc / sudoers следующую строку:

www-data  ALL=(:adm) NOPASSWD:/bin/cat /var/log/mail.log 

Это позволяет www-data запускать команду /bin/cat /var/log/mail.log как участник группы адм.

В PHP я просто вызываю

$output = shell_exec('sudo -g adm cat /var/log/mail.log |/pipe/anywhere');

Надеюсь, этот подход будет кому-то полезен ...

Если вы считаете, что я упустил некоторые проблемы с безопасностью, оставьте комментарий

Я бы рекомендовал использовать rsyslogd для входа непосредственно в базу данных mysql, к которой можно получить доступ через php. Это поддерживаемая конфигурация rsyslog. Я считаю, что lenny + для debian rsyslog является системным журналом по умолчанию, поэтому ему нужно просто установить mysql, если его еще нет, настроить безопасность, настроить таблицы и настроить rsyslog.

http://www.rsyslog.com/doc/rsyslog_mysql.html

пример:

*.*       :ommysql:database-server,database-name,database-userid,database-password

Надеюсь, это поможет вам.

Как намекает Пабло - файлы журнала не нужно записывать в / var / log. Их не нужно записывать на локальный компьютер - эти параметры можно настроить прямо из коробки. Проблема с использованием MySQL заключается в том, что ваша система ведения журнала внезапно становится очень сложной - и что происходит с записями журнала, вызываемыми, когда dbms не работает?

Вы можете сделать файлы доступными для чтения «другим» (а каталоги должны быть исполняемыми для других). Взгляните на страницу руководства для logrotate, чтобы узнать, как контролировать разрешения для файлов журнала.

Но процесс, который читает журналы, не обязательно должен запускаться с помощью apache uid. В самом деле, я бы порекомендовал запустить задание cron - или, предпочтительно, демон - как другой пользователь, чтобы читать журналы - и извлекать необходимую информацию в общий репозиторий.

С.