Контроль доступа к WebDav / Apache с использованием Python - PullRequest
1 голос
/ 31 марта 2009

Я хочу предоставить пользователям доступ к WebDav с помощью Apache, но я хочу сначала подтвердить их подлинность и дать каждому пользователю доступ к определенной папке. Вся аутентификация должна выполняться на основе базы данных Django. Я могу заставить Django-аутентификацию работать самостоятельно, но мне нужна помощь с той частью, где я аутентифицирую каждого пользователя и предоставляю им отдельную пользовательскую область webdav.

Любые намеки?

Ответы [ 3 ]

1 голос
/ 15 февраля 2011

Во-первых, для вас, другие читатели, моя аутентификация была выполнена для Django с использованием WSGI-скрипта аутентификации .

Итак, суть вопроса в том, чтобы дать каждому пользователю Django, в данном случае, свой собственный каталог WebDav, отделенный от других пользователей. Предполагая следующую настройку WebDAV в конфигурации виртуальных сайтов Apache (обычно в / etc / apache2 / sites-enabled / )

<Directory /webdav/root/on/server>
        DAV On

        # No .htaccess allowed
        AllowOverride None      

        Options Indexes

        AuthType Basic
        AuthName "Login to your webdav area"
        Require valid-user
        AuthBasicProvider wsgi
        WSGIAuthUserScript  /where/is/the/authentication-script.wsgi
   </Directory>

Обратите внимание, что публичный адрес для WebDav еще не настроен. Это и пользовательская область зафиксированы в двух строках в одном и том же файле конфигурации (поместите их после заключительного предложения):

RewriteEngine On
RewriteRule ^/webdav-url/(.*?)$ /webdav/root/on/server/%{LA-U:REMOTE_USER}/$1

Теперь доступ к webdav осуществляется по http://my -server.com / webdav-url / Пользователь получает приглашение для входа в систему и затем попадает в подкаталог к ​​корню webdav с тем же именем, что и их имя пользователя. LA-U: заставляет Apache "смотреть вперед" и позволяет пользователю войти в систему до , определяя путь монтирования, что крайне важно, поскольку этот путь зависит от имени пользователя. Без некоторого правила перезаписи не будет URL, и пользователь не получит приглашение для входа в систему. Другими словами, LA-U избегает ловушки 22 для этого типа обработки входа в систему.

Меры предосторожности : требуется включить mod_rewrite, а имена пользователей должны быть действительными в качестве имен dir без каких-либо изменений. Кроме того, пользовательские каталоги не будут создаваться автоматически этими командами, поэтому их существование должно быть гарантировано другим способом.

0 голосов
/ 08 июня 2009

Я знаю, что этот вопрос старый, но только как дополнение ... Если вы используете mod_python, вас также может заинтересовать раздел " Аутентификация базы данных пользователя Django из Apache " документации Django.

0 голосов
/ 31 марта 2009

Вы можете обнаружить, что модуль apache mod_authn_dbd дает вам то, что вы хотите. Этот модуль позволяет apache проверять базу данных SQL для аутентификации и авторизации. Вы бы использовали эту директиву в области <Location>, <Directory> (и т. Д.), Которую вы пытаетесь защитить:

<Directory /usr/www/myhost/private>
    # other config ere
    # mod_authn_dbd SQL query to authenticate a user
    AuthDBDUserPWQuery \
         "SELECT password FROM authn WHERE user = %s"
 </Directory>

Строго говоря, это означает, что вы аутентифицируетесь в базе данных Django, а не в самом приложении Django. Обратите внимание, что у вас есть полный контроль над запросом, поэтому вы МОЖЕТЕ объединить его с другими параметрами в любых таблицах, чтобы убедиться, что пользователь находится в хорошем положении, или в определенных группах, или что-то еще, прежде чем разрешить аутентификацию.

Возможно, вам придется немного суетиться, чтобы убедиться, что используемые механизмы хеширования одинаковы как в Apache, так и в Django.

Если это не подходит, рассмотрите возможность перемещения вашей аутентификации из базы данных django, скажем, на сервер LDAP. С пользовательским бэкэндом аутентификации (существуют существующие реализации LDAP для django), django с радостью будет использовать LDAP ... и поддержка аутентификации / аутентификации LDAP в Apache достаточно надежна.

...