0

我正在尝试/etc/ipsec.conf从 PHP 代码访问文件。该代码首先在 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,但我仍然收到相同的错误。

4

2 回答 2

0

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

要从您的 php 脚本中获取访问权限,您应该将chown文件的组(参见 参考资料)更改为 apache/php 正在运行的同一组,并通过chmod. 为了安全起见,apache 只能访问/etc.

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

当然,还要清理您的输入,防止路径遍历,并保持偏执。

编辑 2

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

所以你真的应该确保,在安全模式打开的情况下,wwwrun用户在拥有的同一组中/etc(在这里放弃关于安全问题的危险信号)。否则,您只需将其应用于要读写的 conf 文件。

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

suEXEC 功能使 Apache 用户能够在不同于调用 Web 服务器的用户 ID 的用户 ID 下运行 CGI 和 SSI 程序。通常,当 CGI 或 SSI 程序执行时,它以运行 Web 服务器的同一用户身份运行。

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

于 2012-08-28T10:30:24.333 回答
0

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

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

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

于 2012-08-28T19:18:40.583 回答