2

我遇到了这个问题并且我陷入了僵局,我会尝试任何我已经陷入僵局的事情。我的问题是这样的:

我在运行 apache2 的 Fedora 9 机器上安装了一个 Perl/CGI 脚本,这个脚本有一个配置文件放在同一目录中,这个配置文件有 777 权限。

脚本无法写入文件。它可以读取,但我绝对无法让它写入。该文件由运行 apache 的同一用户拥有。我写了一个小的 PHP 脚本来测试并将它放在同一个文件夹中。PHP 脚本可以读取但不能写入。

我在这里很绝望,我不知道从哪里开始解决问题,所以任何帮助我走上正确道路的帮助都将不胜感激。

编辑:我可以从命令行打开文件进行编辑;是apache无法访问

EDIT2:文件夹层次结构 /var/www/cgi-bin/script
权限是这样的
/var root 755
www root 755
cgi-bin root 755
script apache 755

编辑:问题出在 selinux 中。我禁用了它,脚本可以访问该文件感谢每个人的贡献

提前致谢

4

5 回答 5

12

apache 是否使用一些 selinux 配置文件或类似的配置文件运行,从而阻止它在该目录中写入?

于 2009-02-05T10:45:26.873 回答
3

用户 apache 可能没有对父目录之一的权限。它至少需要在所有目录中具有执行权限,包括包含您的文件的目录。

编辑:是的,考虑到这是一个编程站点,一些代码可能是有序的。

  1. 使用文件的绝对路径进行测试,而不是使用相对路径来确保您位于正确的目录中。

  2. 美元!如果是权限,应该打印出“权限被拒绝”错误,你能打印出问题吗:

    打开(文件,">/path/to/file/config.ini")|| die "无法打开:$!"; ...关闭(文件);

于 2009-02-05T10:12:56.953 回答
2

也许其他一些进程对文件有写锁?尝试lsof看看是谁在打开它。

于 2009-02-05T10:08:31.953 回答
2

该目录是否允许网络服务器在其中写入文件?

于 2009-02-05T10:13:48.667 回答
0

我知道之前的一篇文章谈到了这一点,但我认为值得重复:在讨论这种性质的问题时,包含相关代码和异常的输出是有帮助的。如果 I/O 操作失败,$! 应该包含系统错误消息,这将解释操作失败的原因。说“它没有用”并没有真正给我们任何继续下去的机会。

于 2009-02-05T21:02:05.537 回答