![Apache 错误日志 - 当通常只有 root 访问权限时如何以网页形式查看(针对内部内联网服务器)?](https://linux22.com/image/533639/Apache%20%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97%20-%20%E5%BD%93%E9%80%9A%E5%B8%B8%E5%8F%AA%E6%9C%89%20root%20%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%E6%97%B6%E5%A6%82%E4%BD%95%E4%BB%A5%E7%BD%91%E9%A1%B5%E5%BD%A2%E5%BC%8F%E6%9F%A5%E7%9C%8B%EF%BC%88%E9%92%88%E5%AF%B9%E5%86%85%E9%83%A8%E5%86%85%E8%81%94%E7%BD%91%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%89%EF%BC%9F.png)
我希望能够将 error_log 显示为网页,以便同事(无需 root 权限)可以查看该网页,以解决其 PHP 开发问题。
在我的 CentOS 5.x 机器上,错误日志位于:/var/log/httpd/error_log,并且该目录只有 root 权限才能访问。
我本来想编写一个 CGI 脚本来显示日志,但由于该脚本在 apache 进程中运行,因此它不是 root,因此无法访问日志文件。(试过了)。令我困惑的是,即使包含目录是 root 访问权限,apache 也能以某种方式写入它来记录错误。
我该如何实现我的目标?或者你能建议一个替代方案吗?
答案1
实际上,在某些情况下我可能不会使用我的其他答案,但我会将其保留在那里以供参考。
如果您的同事拥有自己的 VirtualHost,我会将该虚拟主机设置为将其日志输出到不同的目录,这样他们只会看到其系统的错误:
<VirtualHost *:80>
ServerName colleagues.vhost.com
DocumentRoot ...
...
ErrorLog /home/user/errorlog-colleagues.vhost.com
</VirtualHost>
或者,如果启用了 .htaccess 文件,让它们简单地将 php 错误日志输出到它们想要的位置,例如:
/路径/到/webroot/.htaccess:
php_value error_log /home/user/phperrorlog-colleagues.vhost.com
答案2
您可以更改文件的权限...如果不行,您可以有一个每分钟运行一次的 cron 作业,从 apache 日志文件执行 rsync 到另一个文件(您可以在其中设置读取权限),然后将其显示在网页上。
您还可以通过其他方式来更改 apache 的日志记录机制,这取决于您更改配置的能力。
答案3
我将更改 /var/log/httpd 目录的权限以解决从控制台访问文件的问题。
添加新组并将用户添加到其中:
groupadd apache-logs
usermod -a -G apache-logs user
chgrp apache-logs /var/log/httpd
chmod g+rx /var/log/httpd
或者如果您愿意让系统上的任何用户查看日志,只需:
chmod go+rx /var/log/httpd
不管你怎么做,如果你升级 httpd,它都会重置为原始权限。否则它不应该改变。
此外,apache 能够以默认权限写入日志的原因是日志文件由 apache 在以 root 身份运行时打开。一旦 apache 完全加载,它将更改其用户为 apache,但将继续打开日志文件。