【发布时间】:2012-03-05 02:43:19
【问题描述】:
我正在尝试为 suPHP 设置 PHP 会话(请参阅 here)。我需要让用户拥有我的 php 验证文件,这样当 suPHP 启动时,它会为正确的用户执行此操作。但是,我也不希望用户有权访问该文件,o.w。他们可以对其进行编辑以仅返回 true 而不是实际检查数据库。
我的第一次尝试是这样的(Apache 以用户 www-data 运行)
/etc/validate
├── [drwx------ www-data ] user1
│ └── [-rwx------ user1 ] validate.php
/var/www/
└── [drwx------ user1 ] user1
└── [-rwx------ user1 ] index.html
然后让网页重定向到验证页面,验证页面将验证,然后返回/var/www/user1/index.html
RewriteCond %{REQUEST_URI} !^/xyz
RewriteRule ^(.*) /etc/validate/user1/validate.php?uri=$1
但是 suPHP 抱怨说我正在访问我的 docroot (/var/www/user1) 之外的东西。我不想将 docroot 设置为 / 并更新 suphp.conf 文件以使 check_vhost_docroot=false 无法修复(而且我不是要修复此问题)。因此,我只是将/etc/validate 移动到/var/www 中(我知道这有点乱)
/var/www/
└── [drwx------ user1 ] user1
├── [-rwx------ user1 ] index.html
└── [dr-x------ www-data ] validate
└── [-rwx------ user1 ] validate.php
所以现在验证文件是
- 在文档根目录中
- 由用户 1 拥有
- user1 不可编辑
但是现在如果我尝试加载页面,我会收到以下错误
Directory /var/www/user1/validate is not owned by user1
此时我正在失去耐心,所以我只是在其中粘贴了另一个虚拟文件夹,因此文件结构看起来像这样
/var/www/
└── [drwx------ user1 ] user1
├── [-rwx------ user1 ] index.html
└── [dr-x------ www-data ] validate
└── [drwx------ user1 ] dummy
└── [-rwx------ user1 ] validate.php
现在,当我尝试加载页面时,Apache 告诉我“您无权访问此服务器上的 xyz。”其中xyz 是我的域名之后的任何内容。我不知道为什么 Apache 会告诉我,因为我 不 试图以文件/文件夹的形式访问尾随值。我认为,重定向失败了,Apache 只是假设它是失败的硬链接。
谁能告诉我我做错了什么或提供一种替代方法来阻止用户编辑他们的文件。它无法进入目录dummy,因为它的权限是rwx------,只有user1 可以cd 进入它。当我将权限从0700 更改为0755 时,它又回到了suPHP 错误。所以现在的问题变成了:当 suPHP 的一个后台目录被其他人拥有时,我如何让 suPHP 执行脚本?
编辑:我现在明白为什么 Apache 抱怨了。进不去
【问题讨论】: