Описание настройки KDC не входит в задачи данного документа. Предполагается, что у вас уже есть работающий Kerberos (например, у вас работает CVS gserver или GSSAPIAuthentication в sshd).
1. Устанавливаем ports/devel/subversion с включенной поддержкой SASL2. Не забываем поставить security/cyrus-sasl2-gssapi.
2. В /usr/local/lib/sasl2/svn.conf пишем
sasldb_path: /home/svn/svn.sasldb
keytab: /home/svn/svn.keytab
mech_list: gssapi digest-md5 anonymous
Если предполагается Kerberos only окружение (аутентификация в svn с запросом логина и пароля не нужна), можно исключить упоминание о sasldb и убрать digest-md5 из списка механизмов.
Тут есть одна засада, но о ней позже, чтобы сохранялась интрига.
3. Создаем пользователя svn. Удобнее создать его с полноценным шеллом, потом пригодится для работы с svnadmin.
pw useradd svn -g svn -m -s /bin/tcsh -c 'Subversion server'
4. Создаем kerberos principal для svnserve.
su -l svn
ktutil -k /home/svn/svn.keytab get -p root/admin svn/`hostname`
ktutil -k /home/svn/svn.keytab list
5. Создаем репозиторий
su -l svn
mkdir /home/svn/repos
svnadmin create /home/svn/repos/myproject
6. В /home/svn/repos/myproject/conf/svnserve.conf раскомментируем следующие строки
[general]
anon-access = read
auth-access = write
realm = YOUR.DOMAIN.RU # тут должен быть ваш Kerberos realm
[sasl]
use-sasl = true
7. Вносим в /etc/rc.conf.local
svnserve_enable="YES"
svnserve_data="/home/svn/repos"
и запускаем сервер
/usr/local/etc/rc.d/svnserve start
8. Пробуем с клиентской машины
svn mkdir -m 'test dir ' svn://server.your.domain.ru/myproject/test44
и получаем ошибку:
svn: Authentication error from server: SASL(-1): generic failure:
GSSAPI Error: No credentials were supplied, or the credentials were
unavailable or inaccessible. (unknown mech-code 0 for mech unknown)
Очень информативно, правда?
9. Начинаем материться, читать рассылки, смотреть ktrace и приходим к выводу, что опция keytab: в /usr/local/lib/sasl2/svn.conf не работает (not implemented), и svnserve пытается искать свои ключи в системном /etc/krb5.keytab, естественно юзеру svn не хватает прав прочитать этот файл, и возникает ошибка GSSAPI. Зато есть переменная среды KRB5_KTNAME и libkrb5 в неё смотрит.
10. Начинаем думать, как задать эту переменную среды при старте svnserve. Обнаруживаем, что через login class задать не получается. Зато можно например задать ее в /etc/rc.local и потом оттуда же стартовать
su -l svn -c '/usr/local/bin/svnserve -d --listen-port=3690 --listen-host 0.0.0.0 -r /home/svn/repos'
11. Можно также положить скрипт /etc/rc.conf.d/svnserve вот с таким содержимым
KRB5_KTNAME=/home/svn/svn.keytab ; export KRB5_KTNAME
12. Вот теперь всё хорошо:
svn mkdir -m 'test dir ' svn://server.your.domain.ru/myproject/test44
Committed revision 1.
(с) 2010 Виктор Судаков
1. Устанавливаем ports/devel/subversion с включенной поддержкой SASL2. Не забываем поставить security/cyrus-sasl2-gssapi.
2. В /usr/local/lib/sasl2/svn.conf пишем
sasldb_path: /home/svn/svn.sasldb
keytab: /home/svn/svn.keytab
mech_list: gssapi digest-md5 anonymous
Если предполагается Kerberos only окружение (аутентификация в svn с запросом логина и пароля не нужна), можно исключить упоминание о sasldb и убрать digest-md5 из списка механизмов.
Тут есть одна засада, но о ней позже, чтобы сохранялась интрига.
3. Создаем пользователя svn. Удобнее создать его с полноценным шеллом, потом пригодится для работы с svnadmin.
pw useradd svn -g svn -m -s /bin/tcsh -c 'Subversion server'
4. Создаем kerberos principal для svnserve.
su -l svn
ktutil -k /home/svn/svn.keytab get -p root/admin svn/`hostname`
ktutil -k /home/svn/svn.keytab list
5. Создаем репозиторий
su -l svn
mkdir /home/svn/repos
svnadmin create /home/svn/repos/myproject
6. В /home/svn/repos/myproject/conf/svnserve.conf раскомментируем следующие строки
[general]
anon-access = read
auth-access = write
realm = YOUR.DOMAIN.RU # тут должен быть ваш Kerberos realm
[sasl]
use-sasl = true
7. Вносим в /etc/rc.conf.local
svnserve_enable="YES"
svnserve_data="/home/svn/repos"
и запускаем сервер
/usr/local/etc/rc.d/svnserve start
8. Пробуем с клиентской машины
svn mkdir -m 'test dir ' svn://server.your.domain.ru/myproject/test44
и получаем ошибку:
svn: Authentication error from server: SASL(-1): generic failure:
GSSAPI Error: No credentials were supplied, or the credentials were
unavailable or inaccessible. (unknown mech-code 0 for mech unknown)
Очень информативно, правда?
9. Начинаем материться, читать рассылки, смотреть ktrace и приходим к выводу, что опция keytab: в /usr/local/lib/sasl2/svn.conf не работает (not implemented), и svnserve пытается искать свои ключи в системном /etc/krb5.keytab, естественно юзеру svn не хватает прав прочитать этот файл, и возникает ошибка GSSAPI. Зато есть переменная среды KRB5_KTNAME и libkrb5 в неё смотрит.
10. Начинаем думать, как задать эту переменную среды при старте svnserve. Обнаруживаем, что через login class задать не получается. Зато можно например задать ее в /etc/rc.local и потом оттуда же стартовать
su -l svn -c '/usr/local/bin/svnserve -d --listen-port=3690 --listen-host 0.0.0.0 -r /home/svn/repos'
11. Можно также положить скрипт /etc/rc.conf.d/svnserve вот с таким содержимым
KRB5_KTNAME=/home/svn/svn.keytab ; export KRB5_KTNAME
12. Вот теперь всё хорошо:
svn mkdir -m 'test dir ' svn://server.your.domain.ru/myproject/test44
Committed revision 1.
(с) 2010 Виктор Судаков