У меня есть репозиторий SVN, хранящийся на сервере Apache.
Аутентификация была выполнена через SSPI, и я пытаюсь перенести это на более простые вещи (имея локальный список пользователей / паролей).
Мой httpd.conf:
LoadModule sspi_auth_module modules/mod_auth_sspi.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_alias_module modules/mod_authn_alias.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_user_module modules/mod_authz_user.so
...
<Location /svn_toto>
DAV svn
SVNParentPath D:\web_server\svn_repositories_test
AuthzSVNAccessFile D:\web_server\svn_repositories_test\svnaccessfile.txt
#Satisfy Any
Require valid-user
AuthType Basic
AuthName "Subversion Repository toto"
AuthUserFile D:\web_server\svn_repositories_test\users.txt
SVNIndexXSLT "/svnindex.xsl"
</Location>
Мой users.txt:
[users]
super = super
jean = jean
Мой svnaccessfile.txt:
[groups]
admin = super
[/]
@admin = rw
[cloisonnement:/]
jean = rw
super = rw
[cloisonnement:/trunk]
jean = rw
super = rw
Теперь с клиентской машины я пытаюсь:
svn ls https://servername/svn_toto/cloisonnement/trunk --username super --password super
И это не удается и спрашивает пароль:
Authentication realm: <https://servername:443> Subversion Repository toto
Username: super
Password for 'super': *****
Authentication realm: <https://servername:443> Subversion Repository toto
Username: super
Password for 'super': *****
svn: E215004: Unable to connect to a repository at URL 'https://servername/svn_toto/cloisonnement/trunk'
svn: E215004: No more credentials or we tried too many times.
Authentication failed
Что я делаю не так?
Главная проблема:
AuthUserFile для базовой аутентификации Apache должно быть не текстовый файл в формате user = password
, но в специальной форме, подготовленной htpasswd.
Ваш текущий users.txt
можно использовать только для репозиториев на основе svnserve, svn://
протокол, а не http (s): //. В результате Apache не смог найти пользователя super
(любой пользователь действительно) и аутентифицировать его
Незначительный глюк:
Права доступа в AuthzSVNAccessFile
наследуются от родительского узла к потомкам, таким образом: если у вас есть
[/]
@admin = rw
ты жестяная банка не клонируйте это правило для одного репозитория ниже корневого узла и для пути внутри указанного репозитория