我的apache错误日志已满
Error opening file for reading: Permission denied
Error opening file for reading: Permission denied
Error opening file for reading: Permission denied
等
如何确定导致此权限错误的文件的文件或文件夹?出现的错误与access_log请求之间没有直接关系。
Googling suggests我应该使用 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用户不够用的各种磁盘问题。
感谢。
答案 0 :(得分:2)
我对strace不是很了解,但我认为你需要做一些其他的事情来让Apache按你的意愿运行。
如果您只运行apache2二进制文件,您的程序将停止(如您所知)用户名错误,因为通常将apache用户名/组设置为配置的一部分(在我的Ubuntu上的/ etc / apache2 / envvars中) 12.04安装)。
我发现最容易的是在我的机器上找到apachectl脚本,并搜索“start”。你会发现一行如下:
$HTTPD ${APACHE_ARGUMENTS} -k $ARGV
你可以在这里添加你的strace,看起来像:
strace -etrace:open -f $HTTPD ${APACHE_ARGUMENETS} -k $ARGV
你需要包含-f选项,因为apache会产生许多进程,你想最有可能追踪它们,至少这对我有用:)
答案 1 :(得分:0)
您需要查找open()
的调用,这会导致返回值-1,错误= = 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程序中追逐类似的bug。我找到了这些......
3556 open("/proc/self/auxv", O_RDONLY) = -1 EACCES (Permission denied)
我认为我的错误与wsgi工作进程将权限从root权限下降到运行应用程序的常规用户这一事实有关,但在权限下降后,/proc/self/auxv
仍然无法读取常规进程。 - 也许。