Анонимная проверка SVN, но аутентификация

Я устанавливаю SVN-репозиторий с Httpd. В настоящее время мой репозиторий доступен через Httpd, но любой желающий может оформить заказ и отправить обратно. Я хочу ограничить действие коммита с использованием аутентификации Microsoft Active Directory.

Я использую следующее в моем subversion.conf,

<Location /repos>
   DAV svn

   # Directory containing all repository for this path
   SVNParentPath /srv/svn/repositories

   # List repositories colleciton
   SVNListParentPath On

   # Enable WebDAV automatic versioning
   SVNAutoversioning On

   # Repository Display Name
   SVNReposName "RepositoryName"

   # Do basic password authentication in the clear
   AuthType Basic

   # The name of the protected area or "realm"
   AuthName "RepositoryName"

   # Make LDAP the authentication mechanism
   AuthBasicProvider ldap

   # Make LDAP authentication is final
   AuthzLDAPAuthoritative off

   # Active Directory requires an authenticating DN to access records
   #AuthLDAPBindDN "ou=people,o=example,dc=com"

   # The LDAP query URL
   AuthLDAPURL "ldap://example.com:389/DC=com,DC=example,ou=people?uid(objectClass=*)" NONE

   # Read access to everyone
   Satisfy Any

   # Require a valid user
   Require valid-user

   # Authorization file
   AuthzSVNAccessFile /subversion/apache2/auth/repos.acl

   # Limit write permission to list of valid users.
   #<LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      # SSLRequireSSL

      #AuthType Basic
      #AuthName "Authorization Realm"
      #AuthUserFile /etc/httpd/conf/.htpasswd
      #Require valid-user
   #</LimitExcept>
</Location>

С вышеупомянутой конфигурацией, он запрашивает учетные данные каждый раз. Также, при наличии, хранилище недоступно. Я получаю 500 внутренних ошибок сервера после предоставления правильных учетных данных.

Я проверил файлы журналов, но там ничего не указывало на действительную причину.

5 ответов

Решение

Хорошо. Я закончил первую часть.

Со ссылкой на 6. Access control lists раздел здесь, я добавил доступ только для чтения в AuthzSVNAccessFile файл.

# Authorization file
AuthzSVNAccessFile /srv/svn/repos.acl

Содержание /srv/svn/repos.acl файл

[/]
* = r

Теперь все мои репозитории будут анонимно доступны. Теперь часть коммита остается.

Теперь я получаю следующее сообщение при фиксации.

Commit failed (details follow):
Server sent unexpected return value (500 Internal Server Error) in response to 
MKACTIVITY request for '/repos/project1/!svn/act/783d45f7-ae05-134d-acb0-f36c007af59d'

Чтобы разрешить публичное чтение / извлечение, вам необходимо раскомментировать бит между <LimitExcept> директива и комментарий отдельно Require valid-user линия над ним.

Директива <LimitExcept GET PROPFIND OPTIONS REPORT> говорит серверу, что все внутри, что не относится ни к какому GET, PROPFIND, OPTIONS или же REPORT запрос к репозиторию, который используется для проверки / чтения репо. Другими словами, если бы вы поместили этот бит кода в конфигурацию Apache, он потребовал бы только действительного пользователя для чего-либо еще, кроме упомянутых методов (например, это потребовало бы действительного пользователя, если PUT сделан запрос на коммит):

<LimitExcept GET PROPFIND OPTIONS REPORT>
    Require valid-user
</LimitExcept>

В вашем случае это, вероятно, должно выглядеть примерно так (я просто немного изменил ваш опубликованный конфиг, предполагая, что это правильно, кроме проблемы принудительного входа в систему (у меня нет сервера LDAP для его тестирования). Примечание для замены example.com в вашем AuthLDAPURL к реальному хосту сервера):

<Location /repos>
   DAV svn

   # Directory containing all repository for this path
   SVNParentPath /srv/svn/repositories

   # List repositories colleciton
   SVNListParentPath On

   # Enable WebDAV automatic versioning
   SVNAutoversioning On

   # Repository Display Name
   SVNReposName "RepositoryName"

   # Do basic password authentication in the clear
   AuthType Basic

   # The name of the protected area or "realm"
   AuthName "RepositoryName"

   # Make LDAP the authentication mechanism
   AuthBasicProvider ldap

   # Make LDAP authentication is final
   AuthzLDAPAuthoritative off

   # Active Directory requires an authenticating DN to access records
   #AuthLDAPBindDN "ou=people,o=example,dc=com"

   # The LDAP query URL
   AuthLDAPURL "ldap://example.com:389/DC=com,DC=example,ou=people?uid(objectClass=*)" NONE

   # Authorization file
   AuthzSVNAccessFile /subversion/apache2/auth/repos.acl

   # Limit write permission to list of valid users.
   <LimitExcept GET PROPFIND OPTIONS REPORT>
       SSLRequireSSL
       Require valid-user
   </LimitExcept>
</Location>

Пока вы кладете Require valid-user внутри LimitExceptвсе должно работать так, как вы хотите. Вы можете поместить остальную часть конфигурации аутентификации где-нибудь между Location директивы.

Каждый сервер Subversion, который я видел:

  • Позволяет анонимно оформить заказ без фиксации.
  • Требует проверки подлинности и позволяет совершать.

Я считаю, что процесс фиксации Subversion должен быть.

  • Получите учетные данные аутентификации.
  • Оформить заказ код с аутентификацией.
  • Повторно применить изменения.
  • Зафиксируйте изменения.

Просто некоторые заметки:

  1. я никогда не видел SVNAutoversioning используется внутри Subversion
  2. Чтение журнала ошибок Apache может дать более подробную информацию, чем "Ошибка 500" в случае проблем
  3. Я прочитал здесь, на SO, некоторые темы о проблемах с Subversion на CentOS, связанных с владельцем процесса Apache (некоторые процессы httpd имеют другого владельца, чем другой: nobody и httpd): проверьте это с помощью ps -au | grep
  4. Проблемы при фиксации обычно связаны с недостаточными разрешениями: процесс Apache должен иметь права на запись для всех файлов в хранилище
  5. И последнее, но не менее важное: приоритет выше, чем на стр. 3-4 - в случае использования AuthzSVNAccessFile хотя бы одна группа пользователей | хотя бы для одного пути должна иметь права на запись ... = rw для того, чтобы совершить. Я не знаю, как написать унаследованное от AD имя пользователя в файле repos.acl

Я предлагаю использовать Visual SVN Server. Имеет поддержку Active Directory. Visual Svn Server устанавливает двоичные файлы apache и svn. Также он создает необходимый файл conf для apache.

Установите его с нужными вам функциями и проверьте созданный файл конфигурации apache. Также я предлагаю использовать / покупать его вместо поддержки вашего сервера Apache, если вы можете запустить в окне Windows.

Другие вопросы по тегам