我正在尝试为 suPHP 设置 PHP 会话(请参见此处)。我需要让用户拥有我的 php 验证文件,这样当 suPHP 启动时,它会为正确的用户执行此操作。但是,我也不希望用户访问该文件,因为他们可以编辑它以仅返回 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
所以现在验证文件是
- 在 docroot 内
- 由用户 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 抱怨了。进不去