У меня есть Perl-скрипт, который отлично работает с sudo и анализирует некоторые лог-файлы в /var /log / в Ubuntu 14. Я хочу показать вывод программы на веб-странице. Код моей веб-страницы очень прост:

<html><body>
<h1>Under construction</h1>
<?php
exec ("perl /usr/local/bin/pflogsumm -d yesterday --smtpd_stats /var/log/mail/mail.log > parsed_mail_log.txt");
echo "<pre><p style='font-family:monospace;'>".nl2br(file_get_contents("parsed_mail_log.txt"))."</p></pre>";
?>
</body></html>

Без sudo www-data (я полагаю, это пользователь при запуске скрипта) не имеет прав доступа к /var/log/mail/mail.log и не считает то, что я хочу. Он выводит вещи, но только нули вместо чисел, которые я хотел проверить.

Мой вопрос: каким должен быть "хороший" способ сделать это?

Помещать www-данные в корневую группу, чтобы они могли читать журнал, кажется неправильным.

Может быть, я мог бы вызвать скрипт с помощью sudo, внутри такого скрипта вызывать

sudo perl /usr/local/bin/pflogsumm -d yesterday...

И добавьте предыдущий скрипт в visudo, чтобы www-data мог запускать его с помощью sudo без запроса аутентификации. Опять же, кажется, что это не "хороший" или "правильный" способ сделать это ...

Предложения?

2 ответа2

0

Хорошее начало - посмотреть, кто является владельцем и группой файлов журналов (ls -l /var/log/mail/mail.log). Публиковать их в открытом доступе обычно не очень хорошая идея Затем проверьте, в каких группах находится www-data : groups www-data должна сообщить вам.

Вы также можете

  • настроить права доступа к файлу для вашего пользователя (возможно, не слишком ясно)
  • настроить группы пользователей для доступа к этим файлам (существующая группа файла)

Использование sudo в паролях в сценариях не очень хорошая идея.

0

Почему бы не запускать задание cron (как root) каждое утро, которое выполняется

perl /usr/local/bin/pflogsumm -d yesterday --smtpd_stats /var/log/mail/mail.log > /path/to/parsed_mail_log.txt; chown www-data.www-data /path/to/parsed_mail_log.txt

(Предполагая Ubuntu - используйте соответствующий владелец apache на chown), а затем просто выполните в браузере вторую часть

Это было бы намного более безопасно (без выполнения сценариев из браузера - в меньшей степени из командной строки), быстрее - оно могло бы обрабатывать данные за ночь в непиковое время, а не в режиме реального времени и проще.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .