从Web应用程序中读取日志文件

我想写一个小的PHP应用程序来监视Debian服务器上的日志,包括syslog日志和Apache / PHP消息。 这里的问题是Apache用户(www-data)无法访问/ var / log目录。 授予PHP应用程序日志访问权限的最佳方式是什么? 我们假设日志文件可能非常大,如数百兆字节。

我有一些想法:

也许有人得到更好的解决scheme?

我会build议使用rsyslogd直接login到可以通过PHP访问的MySQL数据库。 这是rsyslog支持的configuration。 我相信lenny + debian rsyslog是默认的syslogging器,所以它应该只是安装mysql,如果它不在那里,configuration安全性,设置表和configurationrsyslog。

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

例:

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

希望这对你有帮助。

那么,虽然原来的post已经很安静了几个月,但我想和你分享一下我的方法:

在我的情况下,我只想监视/var/log/mail.log。 所以我把下面这行添加到/ etc / sudoers:

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

这允许www数据作为组adm的成员运行命令/bin/cat /var/log/mail.log

在PHP中,我只是打电话

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

希望这种方法对某人有用…

如果您觉得我错过了一些安全问题,请发表评论

正如pablo提示的 – 日志文件不需要写入/ var / log。 他们不需要写在本地机器上 – 这些设置可以被configuration在盒子外面。 使用MySQL的问题是,你的日志logging系统突然变得非常复杂 – 当dbmsclosures时,调用的日志条目会发生什么?

您可以将文件设置为“other”可读(并且可以由其他文件执行的目录),请查看logrotate的手册页,了解如何控制日志文件的权限。

但是读取日志的过程不一定要由apache uid运行。 事实上,我build议运行cron作业 – 或者说是一个守护进程 – 作为不同的用户来读取日志 – 并将所需的信息提取到公共存储库。

C。