Python을 사용하여 Webdav/Apache에 대한 액세스 제어
문제
Apache를 사용하여 사용자에게 WebDAV에 액세스 할 수 있도록하고 싶지만 먼저 자동화하고 각 사용자가 특정 폴더에 액세스 할 수 있도록하고 싶습니다. 모든 인증은 Django 기반 데이터베이스에 대해 수행해야합니다. Django-Authentication을 직접 작동시킬 수 있지만 각 사용자를 인증하고 전용 WebDAV 사용자 별 영역을 제공하는 부분에 도움이 필요합니다.
힌트가 있습니까?
해결책
아파치를 찾을 수 있습니다 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 서버로 옮기는 것을 고려하십시오. Django는 사용자 정의 인증 백엔드 (Django에 대한 기존 LDAP 구현이 있습니다)를 사용하면 LDAP를 행복하게 사용하고 Apache의 LDAP Auth/Auth 지원은 매우 강력합니다.
다른 팁
먼저, 다른 독자들에게, 나의 인증은 django에 대해 WSGI 인증 스크립트.
그런 다음 질문의 고기가 있으며, 각 Django 사용자,이 경우 다른 사용자와 분리 된 자체 Webdav Dir를 제공합니다. Apache 가상 사이트 구성에서 다음 Webdav 설정을 가정합니다 (관습 적으로 /etc/apache2/sitees-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는 이러한 유형의 로그인 처리에 대한 Catch-22를 피합니다.
지침: mod_rewrite를 활성화해야하며 사용자 이름은 수정없이 DIR 이름으로 유효해야합니다. 또한 사용자 DIRS는 이러한 명령에 의해 자동으로 생성되지 않으므로 다른 방식으로 그 존재를 보장해야합니다.
나는이 질문이 오래되었다는 것을 알고 있지만 추가 된 것과 마찬가지로 ... mod_python을 사용하는 경우에도 관심이있을 수 있습니다. "Apache의 Django의 사용자 데이터베이스에 대한 인증"장고 문서의 섹션.