毫无意义的文件权限(Linux、Apache)

毫无意义的文件权限(Linux、Apache)

我遇到了文件权限问题,这让我很抓狂。我有一个 Perl Web 应用程序,它会自行安装、复制一些文件、创建数据库等等。除了一些图像文件外,其他一切都运行正常。Apache 无法访问这些图像:

(13) Permission denied: access to /path/to/image.gif denied

但是,文件是 644。我尝试过 chmod 777,并将 chown 改为 Apache 用户,但没有得到积极的结果。

让我抓狂的是:如果我复制文件,然后重命名旧文件并重命名新文件,它就可以起作用了!

mv image.gif image.gif.bak
cp image.gif.bak image.gif

文件相同、大小相同、权限相同、所有者和组相同。我可以在图像查看器中看到它们。但是,如果我恢复原始文件(删除“新”文件并将“旧”文件重命名为其原始名称),我再次收到“权限被拒绝”:

rm image.gif
mv image.gif.bak image.gif

所有图像文件都会出现此问题,但文本文件(静态 html、css……)不会出现此问题。

什么原因导致了这种奇怪的行为?

我在 CentOs 5.5 下使用 Apache 2.2.3。Perl 脚本(Perl 5.8.8)使用 Suexec 运行。

答案1

我怀疑可能是 SELinux 导致了问题?禁用它,然后看看一切是否正常工作:

su -
/sbin/setenforce 0

如果禁用后一切正常,请尝试restorecon重新启用 SELinux,看看您的 SELinux 上下文是否被搞乱了。

答案2

听起来你确实有权限问题,因为

  • 使用suexec,意味着 CGI 脚本和 Apache 不能在同一个用户/组下运行
  • 我没有在你的描述中看到你检查了图像文件的路径,而不仅仅是文件本身

suexec脚本将在其所有者用户和组下执行。Apache 本身将使用 httpd.conf(或 apache[2].conf、conf.d/...)中定义的自己的用户/组继续加载文件。

  • 执行ls -d路径目录直至图像文件,以确保 Apache 至少具有--x访问权限(无视图,但可以访问命名文件)。
  • 您可以通过将组更改为 Apache 组(Group在配置文件中搜索)chgrp apache-group directory并添加x对同一目录的访问权限,从而授予 Apache 访问目录的权限chmod g+x directory

答案3

您在 apache 设置中为图像文件设置了 mime 类型吗?您可以在查看的目录中执行命令 ls -l 并将输出粘贴到这里吗?

相关内容