2013-09-16 3 views
1

Мы используем berkeley-db для авторизации svn-access.Apache игнорирует 'require user'

Мы его настроены так:

<Location /svn> 
    AuthType basic 
    AuthName "svn Authentication" 

    AuthBasicProvider dbm 
    AuthDBMUserFile /****/userDatabase.db 
    AuthDBMType db 
    AuthDBMGroupFile /****/userDatabase.db 
    AuthzDBMType db 

    SSLRequireSSL 
</Location> 

Пока здесь все работает отлично, и люди получают доступ в соответствии с их соответствующими группами. Нет, я хотел/должен был добавить некоторых конкретных пользователей для доступа (только для чтения) к одному хранилищу без изменения их групп. Я попытался следующие

<Location /svn/administration> 
    DAV svn 
    SVNPath /data/svn/administration 

    SVNPathAuthz off 

    <LimitExcept GET PROPFIND OPTIONS REPORT> 
     Require group svn-admin-readwrite 
    </LimitExcept> 

    <Limit GET PROPFIND OPTIONS REPORT> 
     Require group svn-admin-read 
     Require user testUser testUser2 
    </Limit> 
</Location> 

этих модулей authn_dbm 'и 'authz_user' включены. Что-нибудь (очевидно), мне здесь не хватает? Любая помощь приветствуется!

ответ

1

Что-нибудь (очевидное) Я учусь здесь?

Чтение (и понимание) некоторые части SVN книги, по крайней мере "Per-directory access control" (возможно полная глава "httpd, the Apache HTTP Server") и "Path-Based Authorization"

Я вижу, по крайней мере, две слабости в текущей конфигурации

  • Без DAV svn + SVNParentPath в контейнере <Location /svn> вы должны иметь для N репозиториев N + 1 Location контейнеры и добавлять | удалять местоположение для каждого добавленного | удаленного хранилища. Subversion-путь, чтобы иметь одном месте для родительского репозитория директорий

Например, если вы знаете, что вы будете создавать несколько хранилищ Subversion в каталоге/вар/СВН, которые будут доступны через URL-адресов такие как http://my.server.com/svn/repos1, http://my.server.com/svn/repos2, и так далее, вы можете использовать синтаксис конфигурации httpd.conf в следующем примере:

<Location /svn> 
    DAV svn 

    # Automatically map any "/svn/foo" URL to repository /var/svn/foo 
    SVNParentPath /var/svn 
</Location> 

с помощью этого синтаксис, Apache делегирует обработку всех URL-адресов, чьи части пути начинаются с/svn/с провайдером Subversion DAV, который затем предполагает, что любые элементы в каталоге, указанные директивой SVNParentPath, фактически являются репозиториями Subversion. Это особенно удобный синтаксис в том, что, в отличие от использования директивы SVNPath, вам не нужно перезапускать Apache для добавления или удаления размещенных репозиториев.

  • Path на основе списков ACL для Subversion в Apache реализована (и используются в 99% случаях) с authz_svn_module и файлом AuthzSVNAccessFile, в котором пользователь и права доступа группы (для любого хранилища в дереве или части репо-дереве) а также членство в группе, что делает AuthDBMGroupFile устаревшим (и Location без LimitExcept & Limit - более компактным и удобочитаемым)
Смежные вопросы