2011-11-07 9 views
7

¿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.

+0

Estoy bastante seguro de que mi pregunta no tiene solución http://stackoverflow.com/a/9561335/654789 – puk

Respuesta

2

¿Ha considerado implementar la autenticación de usuario utilizando mod_auth? Si decide probarlo, hay un guide que puede serle útil.

Apache 2.2 equivalentes:

Tenga en cuenta que el navegador almacena las credenciales, y los envía en la cabecera de cada petición que hagas.

+0

No estoy muy seguro de si esto es lo que estoy buscando, en cualquier caso, parece que se ha descontinuado "Compatibilidad: disponible solo en versiones anteriores a 2.1" – puk

+0

Eso es solo porque fue reemplazado por módulos ligeramente más específicos, como [mod_auth_basic] (http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html). Si no es lo que estás buscando, entonces no te preocupes, solo pensé que podría ser útil. –

+0

déjame echar otro vistazo. – puk

Cuestiones relacionadas