www-data 访问日志文件

www-data 访问日志文件

我有一个 perl 脚本,可以与 sudo 配合使用,并解析 Ubuntu 14 中 /var/log/ 上的一些日志文件。我想在网页上显示程序输出。我的网页代码非常简单:

<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-data 放在根组中以便它可以读取日志似乎不正确。

也许我可以用 sudo 调用一个脚本,在这样的脚本中调用

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

并将之前的脚本添加到 visudo 中,以便 www-data 可以使用 sudo 运行它而无需身份验证。同样,这似乎不是“好的”或“正确的”做法...

有什么建议吗?

答案1

为什么不每天早上运行一个 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 - 在 chown 上使用适当的 apache 所有者),然后在浏览器中执行第二部分

这会更加安全(无需从浏览器执行脚本 - 从命令行执行脚本就更少了),速度更快 - 它可以在非高峰时段而不是实时预处理数据,而且更简单。

答案2

好的开始是查看日志文件的所有者和组 ( ls -l /var/log/mail/mail.log)。让它们公开可读通常不是一个好主意。然后检查在哪个组www-data中:groups www-data应该会告诉你。

您可以

  • 调整文件的权限以便用户访问(可能不太清楚)
  • 调整访问这些文件的用户组(该文件的现有组)

在脚本中使用无密码sudo不是一个好主意。

相关内容