2011-06-02 123 views
3

我有一个PHP Web应用程序(在Apache/Linux上运行),除其他外,它允许浏览Web服务器上的本地文件。由于Apache作为特殊的“www”用户运行,因此PHP可以访问“www”可以访问的所有内容,无论用户登录到应用程序。根据登录用户的访问权限限制PHP的文件访问

根据登录用户的Unix文件系统权限,限制文件访问的最佳方式是什么?理想情况下,我可以产生一个新的进程,用户ID是登录用户,但我不确定这是否可能。或者,是否有标准的PHP库在某处执行权限检查和访问文件?

回答

0

你可以看看在http://httpd.apache.org/docs/2.0/suexec.html它应该做你需要什么,而不需要让用户和权限的单独lsit在aplications。

据我所知,这个扩展是在一些(如果不是全部的话)共享主机服务上实现的,以控制资源在用户之间的分配方式。

这将导致脚本没有通过www-data(但由系统用户)执行,并且PHP不作为模块运行(通过CGI/fastCGI机制)。

+0

谢谢,我认为这正是我所期待的。 – Stan 2011-06-02 18:32:15

0

这可以通过三个步骤来完成:

  1. 创建重写规则(通过的.htaccess或者Apache的配置文件),为您的“本地文件”的所有请求重定向到一个PHP脚本。
  2. 检查脚本中用户的身份验证状态。
  3. 如果用户通过身份验证,请使用该脚本加载和输出文件。
+0

第1步似乎是确保在应用程序中未创建意外访问漏洞的好方法,但第2步仍然是我不清楚的部分。如何在访问本地文件时检查用户的身份验证状态?我如何模仿不同用户的各种PHP许可检查功能(如is_writeable,is_executable等)? – Stan 2011-06-02 14:05:58

2

我不明白你的意思了,因为访问该文件的用户是PHP的用户,而不是要求你的页面(你是不是连接到用SSH服务器)

你的一般用户可能希望在您的应用程序之上实施ACL来管理此权限。

当然Zend公司,并有解决方案:http://framework.zend.com/manual/en/zend.acl.html

+0

运行Apache服务器进程的用户是一些通用的“www”用户,它有权访问所有本地文件。用户“bob”登录到应用程序,并请求查看本地文件。 Apache调用PHP脚本来检索文件,并且当运行脚本的用户是“www”时,它将文件显示为“bob”,无论“bob”是否可以访问它。那有意义吗? – Stan 2011-06-02 13:57:19

+0

是的,你仍然需要像ACL这样的东西来管理它 – dynamic 2011-06-02 14:00:45