¿Cómo se puede diseñar un inicio de sesión como característica para usar los permisos de archivo de suPHP? Por ejemplo, si tengo un sitio web en www.example.com
y los siguientes dos usuarios con sus propios directorios personales, cada uno con un script php test.php
, y un script validateUser.php
que pertenece a otro usuario (root, www-data, apache ...) en el directorio /home
.Implementación de inicio de sesión junto con suPHP
/home/ ├── validateUser.php ├── user1 │ └── test.php └── user2 └── test.php
user1
puede acceder user2's
guión visitando www.example.com/user2/test.php
, y viceversa. En cambio, lo que quiero es canalizar todas las solicitudes entrantes, usando algo como mod_rewrite, a validateUser.php
. Sin embargo, hacerlo tendrá la consecuencia de ejecutar todos los scripts como el propietario de validateUser.php
, no el script de destino test.php
.
De todos modos hay que llamar a un script php antes de que suPHP entre, y luego permitir que suPHP continúe, o cancelar por completo.
EDITAR Esta es la segunda recompensa Estoy poniendo. El primero que le di a Gustav b/c le dio un buen partial answer. Mencionaré lo que he intentado hasta ahora y por qué ninguno de ellos funciona para mí.
1) He intentado usar mod_rewrite para redirigir la URL a validateUser.php
para iniciar sesión en el usuario o llamar a la secuencia de comandos que desea llamar. El problema es que he configurado mis hosts virtuales de manera que cada usuario tenga su propio sitio virtual (es decir, www.user1.example.com
, www.user2.example.com
... si este es un mal enfoque de diseño, no dude en señalarlo bruscamente). Por lo tanto, aunque el sistema operativo ve la estructura de archivos como el anterior, en línea, los directorios raíz se ha constituido como tal
VirtualHost = www.user1.example.com
├── validateUser.php
└── test.php
VirtualHost = www.user2.example.com
├── validateUser.php
└── test.php
Naturalmente me acabo de mudar una copia de validateUser.php
en el directorio de cada usuario. El problema es que ahora el usuario puede eliminar ese archivo y poner lo que quiera allí, como no requerir un inicio de sesión. Una forma de evitar esto es hacer que la carpeta principal sea pegajosa (algo que no recomendaría hacer en una carpeta de inicio) y hacer que validateUser.php
sea propiedad de root. Pero ahora ejecutará AS root ya que esto es suPHP. Ahí es donde me rendí.
2) Podría usar la sugerencia de Gustav mod_auth
, pero no me gusta que exija la contraseña por adelantado (como los sitios web de la vieja escuela).
3) He considerado una variante de 1) si pudiera redirigir entre hosts virtuales. Por ejemplo, la reestructuración de los hosts virtuales como así
VirtualHost = www.user1.example.com
└── test.php
VirtualHost = www.user2.example.com
└── test.php
VirtualHost = www.admin.example.com
└── validateUser.php
A continuación, utilice mod_rewrite para redirigir todo el tráfico de los usuarios a www.admin.example.com/validateUser.php
, y si el usuario está conectado (o si la conexión es exitosa) el usuario es redirigido de nuevo a la sitio en el que inicialmente intentaron iniciar sesión. El beneficio de esto, si es que es posible, es que suPHP no entrará en funcionamiento hasta que el usuario sea redirigido a su propio host virtual.
Estoy bastante seguro de que mi pregunta no tiene solución http://stackoverflow.com/a/9561335/654789 – puk