如何设计类似登录的功能来使用 suPHP 的文件权限。例如,如果我有一个网站www.example.com
以下两个用户有自己的主目录,每个用户都有一个 php 脚本test.php
, and a validateUser.php
属于另一个用户(root、www-data、apache...)的脚本/home
目录。
/home/
├── validateUser.php
├── user1
│ └── test.php
└── user2
└── test.php
user1
可以访问user2's
通过访问脚本www.example.com/user2/test.php
,反之亦然。相反,我想要的是使用类似的方法来引导所有传入的请求模组重写, to validateUser.php
。但是,这样做会导致以所有者身份执行所有脚本validateUser.php
,不是目标test.php
script.
无论如何,是否可以在 suPHP 启动之前调用 php 脚本,然后允许 suPHP 继续或完全中止。
EDIT这是我提供的第二笔赏金。我给 Gustav b/c 的第一个他给了一个很好的部分答案。我将提及到目前为止我所做的尝试,以及为什么它们都不适合我。
1)我尝试过使用模组重写将 URL 重定向到validateUser.php
让用户登录,或者调用他们想要调用的任何脚本。问题是我已经设置了虚拟主机,以便每个用户都有自己的虚拟站点(即www.user1.example.com
, www.user2.example.com
...如果这是一个糟糕的设计方法,请随意粗鲁地指出它)。因此,虽然操作系统看到的文件结构如上,在线上,根目录是这样设置的
VirtualHost = www.user1.example.com
├── validateUser.php
└── test.php
VirtualHost = www.user2.example.com
├── validateUser.php
└── test.php
当然我只是移动了一份副本validateUser.php
进入每个用户的目录。问题是现在用户可以删除该文件并将他们想要的任何内容放在那里,就像根本不需要登录一样。解决这个问题的方法是使主文件夹具有粘性(我不建议对主文件夹执行此操作)并使validateUser.php
归 root 所有。但现在它将执行 AS root,因为这是 suPHP。这就是我放弃的地方。
2)我可以用古斯塔夫的mod_auth
建议,但我不喜欢它要求预先输入密码(就像老式网站一样)。
3) 我考虑了 1) 的变体,如果我可以在虚拟主机之间重定向。例如,像这样重组虚拟主机
VirtualHost = www.user1.example.com
└── test.php
VirtualHost = www.user2.example.com
└── test.php
VirtualHost = www.admin.example.com
└── validateUser.php
然后使用 mod_rewrite 将所有流量从用户重定向到www.admin.example.com/validateUser.php
,如果用户已登录(或者登录成功),则用户将被重定向回他们最初尝试登录的站点。这样做的好处(如果可能的话)是,在用户被引导回他们自己的虚拟主机之前,suPHP 不会启动。