从PHP访问/etc/ipsec.conf文件

时间:2012-08-28 10:09:57

标签: php linux apache

我正在尝试从PHP代码访问文件/etc/ipsec.conf。代码首先在Windows服务器上进行了测试,此时我已经访问了c:\abc\ipsec.conf。 访问是使用此

在wamp的httpd.conf中给出的
<Directory "c:/abc/">
Allow from all
Deny from none
Order allow,deny
</Directory>

现在,当我尝试在Suse Linux中测试代码时,我收到此错误

**Warning: fopen(/etc/ipsec.conf) [function.fopen]: failed to open stream: Permission denied in /srv/www/htdocs/nsg/_ipsec.php on line 6**

我已向/etc目录和文件授予了777权限。目录/etc也会添加到httpd.conf,但我仍然收到同样的错误。

2 个答案:

答案 0 :(得分:0)

正如一些评论所指出的那样,向/etc提供777是一个坏主意。

要从您的php脚本中获取访问权限,您应该将该文件的组(请参阅chown)更改为正在运行的同一组apache / php,并通过chmod提供适当的组权限。对于安全性问题,apache只能访问/etc中的该文件。

编辑如果您使用的是SEliunx或类似的东西,这可能无效。我只是想指出一般的方法(不是777个文件)。

当然,要消毒你的输入,防止路径遍历,并且偏执。

编辑2

  

注意:启用安全模式后,PHP会检查目录中是否存在   脚本正在运行的脚本与脚本具有相同的UID(所有者)   正在执行。

所以你应该确保在安全模式开启的情况下,wwwrun用户属于拥有/etc的同一群组(在这里放弃关于安全问题的红旗)。否则,您只需将其应用于要读写的conf文件即可。

但是,为了满足安全性和权限,Apache2 suEXEC可能是您的解决方案。

  

suEXEC功能为Apache用户提供了运行CGI和SSI程序的能力   用户ID与调用Web服务器的用户ID不同。通常,当CGI或SSI时   程序执行时,它作为运行Web服务器的同一用户运行。

你只是创建一个独立用户。

答案 1 :(得分:0)

我建议你编写一个SUID帮助程序可执行文件,根据PHP脚本的要求更改/etc/ipsec.conf。然后,您的PHP脚本可以执行您的SUID可执行文件以发出所需的命令。

此解决方案非常安全。您的SUID可执行文件可确保仅对ipsec.conf进行授权更改,这会在您的网络服务器和关键文件之间添加另一层。

如果您小心,可以在PHP中编写帮助程序可执行文件。在这种情况下,您必须使用sudo(并相应地配置/etc/sudoers),因为脚本不能直接制作SUID。