2013-10-24 32 views
0

我有一个网页尝试读取文件,但获取权限被拒绝错误。我写了一个非常简单的页面来重现问题。Apache/PHP没有读取文件的权限

<?php 
echo exec('whoami'); 
echo "<br>"; 
echo exec('cat /var/svn/aaa/format 2>&1'); 
?> 

作为一个测试,我已经试过在SVN目录和下面的一切的荒谬777设置权限,所有权变更到Apache和尝试添加Apache用户到不同的组。我已经确认它是以apache用户身份运行的(即上面的whoami呼叫是什么)。如果我尝试在命令行中运行上面的命令,阿帕奇然后正常工作,如

sudo -u apache cat /var/svn/aaa/format 2>&1 

这是为什么没有做什么,我期待?我期望给予文件777会给'其他'完整的权限,我希望改变所有者到Apache也将解决问题。我希望做的sudo作为apache用户会失败,如果它从php失败。

顺便说一句,只是为了完整,这是我运行WebSVN的问题,但它似乎是一个Apache问题,而不是WebSVN问题。

+0

is safe_mode enabled on your server? (检查ini_get('safe_mode'))...可能会导致问题。 – Kurt

+0

如果我回声ini_get('safe_mode')我什么也没有,但看在/etc/php.ini我看到“safe_mode =关” – MikeKulls

回答

0

得到它固定。我尝试了一个不同的盒子,但没有做任何事情,它先运行了。我有我试图访问的文件,由root拥有,并没有设置任何权限。寻找什么是不同的,结果是SELinux。我不知道那是什么,但禁用它来解决问题。我猜这是某种安全“功能”?调用getenforce告诉我,它已经开始,我可以使用setenforce来使其放宽。

[email protected]# getenforce 
Enforcing 

[email protected]# setenforce Permissive 

另一种方法是在配置文件/ etc/sysconfig/selinux中禁用它。我猜测之后需要重新启动一些东西。

SELINUX=disabled 

谢谢大家的回复。

+0

顺便说一句,如果有人写出更好的解释,我会将它标记为正确答案,因为我不想回答自己的问题。 – MikeKulls

0
which cat 

使用的完整路径猫在你的exec

+0

感谢您的答复,但只是将错误更改为“/ bin/cat:/ var/svn/aaa/format:Permission denied“ – MikeKulls