我正在尝试从PHP代码访问文件/etc/ipsec.conf
。代码首先在Windows服务器上进行了测试,此时我已经访问了c:\abc\ipsec.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
,但我仍然收到同样的错误。
答案 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。