Pregunta ¿Cómo asignar usuarios autenticados de Apache a su propio directorio?


Estoy tratando de ofrecer a nuestros usuarios un espacio de Apache WebDav donde puedan almacenar sus archivos de calendario (.ics). Ya tengo la autenticación de Dav y LDAP en ejecución. Pero no consigo encarcelar a los usuarios a algunos subdirectorios. Después de todo, no quiero que accedan a los archivos del calendario del otro.

Ejemplo: Digamos usuario johndoe inicia sesión. Entonces me gustaría tener su "/"la ruta se asignará a / var / www / users / johndoe en el disco. Para que cada usuario tenga su propio directorio.

Lo que he intentado hasta ahora:

  1. UserDir / var / www / users / * /

    pero parece que este directorio solo establece la ruta para / ~ johndoe / pedidos, que no es lo que quiero.

  2. RewriteRule ^ / / users /% {REMOTE_USER} [R]

    Falla Y probablemente sea solo reescribir el camino que no es lo que quiero.

  3. AliasMatch ^ / / var / www / users /% {REMOTE_USER} /

    Esto debería asignar la ruta a un directorio en el disco, pero el% {REMOTE_USER} no se expande.

¿Es posible jailear usuarios registrados en algún subdirectorio? Gracias por adelantado.


5
2017-11-16 16:06


origen




Respuestas:


Si está dispuesto a usar un prefijo de directorio en lugar de "/", puede usar algo como esto:

# Let's setup WebDAV first
<Directory /var/lib/storage>
        Dav On
        Options Indexes
        AllowOverride None
</Directory>
# Now we'll set up the user area mapping
RewriteCond %{REQUEST_URI} ^/storage/
RewriteRule ^/storage/(.*?)$ /var/lib/storage/user/%{LA-U:REMOTE_USER}/$1 [L]

Además, se puede acceder a los mismos directorios de usuario de solo lectura utilizando la / sintaxis / usuario

# Public area can be accessed as https://server/~user/
RewriteCond %{REQUEST_URI} ^/~
RewriteCond %{REQUEST_METHOD} ^(GET|POST)$
RewriteRule ^/~([^/]+)/?(.*)    /var/lib/storage/user/$1/$2 [L]

YMMV


2
2017-11-16 17:36



Gracias por su respuesta. Tu solución funcionó bien y me empujó en la dirección correcta. Ahora mi solución final es: RewriteEngine On RewriteRule ^ / calendar.ics $ /var/www/users/%{LA-U:REMOTE_USER}.ics [L] RewriteRule! ^ / Calendar.ics $ - [R = 404, L ] Los usuarios pueden usar servidor / calendar.ics lo que se remonta a /var/www/users/USERNAME.ics El problema con su solución es que tuve que crear previamente todos los directorios para los usuarios. Apache no maneja eso y devuelve un 404 si el directorio no existe. Como solo necesito un archivo, esto funciona bien. Gracias de nuevo. - Signum