【问题标题】:Using PHP to read the syslog使用 PHP 读取系统日志
【发布时间】:2010-11-06 20:55:25
【问题描述】:

我正在尝试增加我正在从事的 php 项目的管理功能。截至目前,该项目会将其所有错误记录到系统日志中。我试图让管理页面能够读取这些错误的系统日志。在终端中我可以输入:

cat /var/log/syslog | grep projectName

但是,如果我尝试使用以下命令运行此命令:

$output=shell_exec('cat /var/log/syslog | grep projectName');

或与:

$output=`cat /var/log/syslog | grep projectName`;

$output 总是显示为空。有没有办法我可以做到这一点?这甚至是最好的方法吗(IE php 是否有读取 syslog 的本机方法)?

编辑: 似乎问题是权限问题。我可以授予 www-data 访问系统日志的权限,但出于某种原因,这对我来说似乎不是一个好主意。没有原生的方式来读取日志吗?

【问题讨论】:

  • 不要认为这是显而易见的,而是使用 root 拥有的 syslog,它还包含来自系统其余部分的其他日志数据,为什么不让项目拥有自己的日志文件靠它,没有额外的噪音?
  • ^ 这正是我最终所做的。

标签: php linux syslog


【解决方案1】:

我最终创建了一个完全独立的日志文件。这解决了所有的权限问题

【讨论】:

  • 否决票的任何理由?这就是我解决问题的方法。
【解决方案2】:

你不能在 php 中打开 /var/log/syslog 自己而不是执行 shell 命令吗?

【讨论】:

  • 刚试过。现在我知道为什么它以前不起作用:警告:fopen(/var/log/syslog):无法打开流:权限被拒绝
  • 您可以 chmod syslog 以便 www 用户可以阅读它。否则,连命令行都不行。
  • 我可以很容易地做到这一点,但这样做会有任何安全问题吗?
  • 以 root 身份运行 apache 更安全。 :)
  • 我想我要做一个 cron 作业,将系统日志复制到一个安全的位置,然后让我的 php 站点解析它。
【解决方案3】:

听说过 sudo 吗?如果您关心安全性,它可能是您的最佳选择。但我认为走 sudo 路线太复杂了,只是给 web 用户一个读取权限,而不是一个写入读取权限。为了使它成为一个安全音乐会,必须有一种方法让其他人编写一个读取 syslog 文件的 php 脚本。如果您是唯一可以将 php 脚本上传到您的服务器的人,那么您根本不必担心这一点。对于共享主机,这是一个问题,因为现在任何人都可以读取服务器的系统日志。

【讨论】:

  • 我不认为 sudo 是他的解决方案。您不能 sudo 并在 php.ini 中输入密码。他将在哪里存储root密码?在 PHP 中? :)
  • 即使我确实将sudo密码存储在php文件中,www-data不在admin组中,我也无意放在那里
  • 虽然我同意 sudo 可能不是要走的路,但这并不是因为您必须输入密码。你不会只是设置 sudoers 然后不需要密码吗?
  • 您不必在 sudo 中输入密码,有一个特定的选项,基本上您可以在 /etc/sudoers 中配置它以允许特定用户(www 或任何运行 apache 的用户)执行一个特定的脚本(脚本的完整路径),同时假设 root 身份(仅此一次)并且没有密码。您可以在线查找所有 sudo 选项,其中之一是 'nopasswd'
猜你喜欢
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多