7

我的 apache 错误日志充满了

Error opening file for reading: Permission denied
Error opening file for reading: Permission denied
Error opening file for reading: Permission denied

等等

如何确定导致此权限错误的文件或文件夹?出现的错误和 access_log 请求之间没有直接关系。

谷歌搜索建议我应该使用strace但是当我这样做时

strace apache2 

或者

strace -etrace:open apache2

响应很冗长,因为我之前没有真正成功使用过这个工具,所以我不确定要寻找什么。这是出现的痕迹。

.....
open("/lib/x86_64-linux-gnu/libnss_nis.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
apache2: bad user name ${APACHE_RUN_USER}

最后一行似乎是唯一的原因,但我的网络服务器正在处理图像,以及如果 apache 用户不够用,各种磁盘内容将成为问题。

谢谢。

4

2 回答 2

2

我对 strace 不是很了解,但我认为您需要做一些其他的事情才能让 Apache 按您的意愿运行。

如果您只是运行 apache2 二进制文件,您的程序将停止(如您所述)并使用错误的用户名,因为通常 apache 用户名/组被设置为配置的一部分(在我的 Ubuntu 12.04 安装中的 /etc/apache2/envvars 中) .

我发现最简单的是在我的机器上找到 apachectl 脚本,然后搜索“start)”。您会发现如下所示的一行:

$HTTPD ${APACHE_ARGUMENTS} -k $ARGV

您可以在此处添加您的 strace,使其看起来像:

strace -etrace:open -f $HTTPD ${APACHE_ARGUMENETS} -k $ARGV

您需要包含 -f 选项,因为 apache 将产生许多进程,并且您最有可能希望跟踪它们,至少这对我有用:)

于 2012-10-08T20:29:55.800 回答
0

您需要查找open()导致返回值 -1、errno == EACCES 的调用。

我不得不在 ubuntu 上调整以下 strace 命令行(在 /usr/sbin/apachectl 中):

strace -o /tmp/strace.log -e trace=open -f $HTTPD ${APACHE_ARGUMENTS} -k $ARGV

-o输出存储在文件中。如果您担心在每个人都可读的区域中泄漏文件名,请使用适当的目标目录。

我自己正在使用在 apache mod wsgi 中运行的 python 程序来追逐一个类似的错误。我在找这些...

3556  open("/proc/self/auxv", O_RDONLY) = -1 EACCES (Permission denied)

我认为我的错误与 wsgi 工作进程将权限从 root 降低到运行应用程序的普通用户的事实有关,但在权限降低后,/proc/self/auxv常规进程仍然无法读取。 - 也许。

于 2017-01-31T11:15:54.040 回答