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


Accessing /etc/ipsec.conf file from PHP

我正在尝试从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**

我已授予777对/etc目录和该文件的权限。目录/etc也被添加到httpd.conf中,但我仍然收到相同的错误。

正如一些评论所指出的,给/etc 777是个坏主意。

要从php脚本中获得访问权限,您应该将文件的组(请参阅chown)更改为apache.php正在操作的同一组,并通过chmod授予适当的组权限。出于安全考虑,apache只能访问/etc中的唯一文件。

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

当然,还要净化你的输入,防止路径遍历,并保持偏执。

编辑2

注意:当启用安全模式时,PHP会检查脚本正在操作的具有与脚本相同的UID(所有者)正在执行。

因此,您应该真正确保,在安全模式打开的情况下,wwwrun用户与拥有/etc的用户在同一组中(在此处放弃有关安全问题的红旗)。否则,您只需将其应用于要对其进行读写的conf文件。

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

suEXEC功能为Apache用户提供了在不同于主叫web服务器的用户ID的用户ID。通常,当CGI或SSI程序执行时,它以运行web服务器的同一用户身份运行。

所以你只需要创建一个独立的用户。

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

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

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