Анонимная проверка 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 должен быть.
- Получите учетные данные аутентификации.
- Оформить заказ код с аутентификацией.
- Повторно применить изменения.
- Зафиксируйте изменения.
Просто некоторые заметки:
- я никогда не видел
SVNAutoversioning
используется внутри Subversion - Чтение журнала ошибок Apache может дать более подробную информацию, чем "Ошибка 500" в случае проблем
- Я прочитал здесь, на SO, некоторые темы о проблемах с Subversion на CentOS, связанных с владельцем процесса Apache (некоторые процессы httpd имеют другого владельца, чем другой: nobody и httpd): проверьте это с помощью
ps -au | grep
- Проблемы при фиксации обычно связаны с недостаточными разрешениями: процесс Apache должен иметь права на запись для всех файлов в хранилище
- И последнее, но не менее важное: приоритет выше, чем на стр. 3-4 - в случае использования
AuthzSVNAccessFile
хотя бы одна группа пользователей | хотя бы для одного пути должна иметь права на запись... = rw
для того, чтобы совершить. Я не знаю, как написать унаследованное от AD имя пользователя в файле repos.acl
Я предлагаю использовать Visual SVN Server. Имеет поддержку Active Directory. Visual Svn Server устанавливает двоичные файлы apache и svn. Также он создает необходимый файл conf для apache.
Установите его с нужными вам функциями и проверьте созданный файл конфигурации apache. Также я предлагаю использовать / покупать его вместо поддержки вашего сервера Apache, если вы можете запустить в окне Windows.