Dec. 24th, 2010

victor_sudakov: (Default)
Описание настройки 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 Виктор Судаков

Profile

victor_sudakov: (Default)
Виктор Судаков

December 2024

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 9th, 2025 01:48 pm
Powered by Dreamwidth Studios