Ключевые слова:linux, cvs, subversion, apache, kerberos, ldap, auth, windows, samba, (найти похожие документы)
From: dan1005 <dan1005@mail.ru.>
Newsgroups: email
Date: Mon, 5 Jun 2007 14:31:37 +0000 (UTC)
Subject: Доступ к Subversion репозитрию для пользователей Windows AD
Subversion + Apache2.2 + LDAP + Kerberos (AD)
Web-сервер Apache и хранилище Subversion базируются на Debian.
Обращение к репозитарию происходит из домена MS.
Цель - сделать прозрачный доступ к хранилищу пользователям из домена, с
учётом разграничения прав доступа.
ПО:
* Debian 4.1.1-21
* Apache/2.2.3
* Subversion 1.4.4
* libsasl2-gssapi-mit - пакет, устанавливаемый на Debian
* kftgt - пакет, устанавливаемый на Debian.
Apache 2.2 модули:
* dav_svn.load
* libapache2-mod-auth-kerb
* authnz_ldap.load
* ldap.load
На Windows платформе:
* Windows Services for UNIX
* ADSI Scriptomatic 2.5
* TortoiseSVN 1.4.4
Модули Apache устанавливаются по умолчанию. При использовании Debian это
достаточно просто. Например, для dav_svn.load:
debian::/# apt-cache search dav_svn
libapache2-svn - Subversion server modules for Apache
debian::/# aptitude install libapache2-svn
Windows Services for UNIX (SFU) устанавливается на контроллере домена.
ADSI используется для получения более развёрнутой информации об AD.
TortoiseSVN - Клиент Subversion для Windows
Для подключения установленных модулей к Apache, при необходимости, нужно
сделать символические ссылки:
debian:/etc/apache2/mods-enabled# ls -l
auth_kerb.load -> ../mods-available/auth_kerb.load
ldap.load -> /etc/apache2/mods-available/ldap.load
authnz_ldap.load -> /etc/apache2/mods-available/authnz_ldap.load
dav.load -> ../mods-available/dav.load
dav_svn.conf -> ../mods-available/dav_svn.conf
dav_svn.load -> ../mods-available/dav_svn.load
Настройка Kerberos
Для корректной работы аутентификации через Kerberos необходимо настроить
синхронизацию времени web-сервера и контроллера домена (например,
используя cron).
Настройка клиента Kerberos вполне стандартна (/etc/krb5.conf).
Предположим, что имя контроллера домена AD - dc.example.com:
[libdefaults]
default_realm = EXAMPLE.COM
default_keytab_name = FILE:/etc/krb5.keytab
default_tgs_enctypes = des-cbc-crc des-cbc-md5
default_tkt_enctypes = des-cbc-crc des-cbc-md5
[realms]
EXAMPLE.COM = {
kdc = dc.example.com
admin_server = dc.example.com
}
[domain_realm]
example.com = EXAMPLE.COM
.example.com = EXAMPLE.COM
Проверить настройки можно попыткой авторизации доменного пользователя:
debian:/# kinit user
Password for [email protected]:
debian:/# klist #просмотр выданного билета
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]
Valid starting Expires Service principal
06/22/07 15:12:36 06/23/07 01:13:38 krbtgt/[email protected]
renew until 06/23/07 15:12:36
Регистрация WEB-сервера в домене
Создание и проверка файлов krb5.keytab и apache.keytab.
Для работы необходимо зарегистрировать web-сервер в домене и получить
для него два ключа: host/[email protected] и
HTTP/[email protected]. Первый ключ нужен для авторизации
компьютера по ldap, а второй - для авторизации сервиса HTTP.
И хосту и сервису должен быть сопоставлен какой-либо пользователь.
Права - минимально-достаточные, для авторизации в домене.
Причём, учётную запись авторизующую хост, желательно делать в виде
компьютера (контейнер Computers). Например: host_debian, http_debian.
На контроллере домена нужно создать ключи, и зарегистрировать сервис
HTTP/debian.example.com:
C:\>
ktpass -princ host/[email protected] -mapuser [email protected] \
-crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass qwerty -out c:\host_debian.keytab
ktpass -princ HTTP/[email protected] -mapuser [email protected] \
-crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass qwerty -out c:\http_debian.keytab
setspn.exe -A HTTP/debian.example.com http_debian
Далее необходимо полученные файлы передать на web-сервер, и
воспользоваться утилитой ktutil:
ktutil: rkt host_debian.keytab
ktutil: wkt krb5.keytab
ktutil: rkt http_debian.keytab
ktutil: wkt apache.keytab
Проверить запись можно при помощи команды klist:
debian:/# klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
------ 11 host/[email protected]
После чего желательно убедиться, что ключи работоспособны:
kinit -t krb5.keytab -k host/[email protected]
kinit -t apache.keytab -k HTTP/[email protected]
Обе команды должны отработать тихо и бесшумно. Без вывода каких-либо
ошибок на экран.
Файлам необходимо дать права на чтение для Apache:
chown www-data:www-data /etc/apache.keytab
chown www-data:www-data /etc/krb5.keytab
Настройка LDAP
Настройка Ldap сводится к установке соответствующего модуля и правки
конфига /etc/ldap/ldap.conf:
BASE DC=EXAMPLE,DC=COM
URI ldap://dc.example.com
REFERRALS off
searchmode:OS
ldapservers:dc.example.com
binddn:CN=host_debian,CN=Users,DC=EXAMPLE,DC=COM
#bindpwd:qwerty # при использовании Kerberos, здесь указывать пароль не потребуется
userbasedn:CN=Users,DC=EXAMPLE,DC=COM
Конфигурирование Apache
Теперь осталось корректно сконфигурировать /etc/apache2/httpd.conf.
При условии интеграции Kerberos и LDAP, и работы с хранилищем
Subversion, конфиг будет выглядеть следующим образом:
<LocationMatch ^/svn/.*>
KrbAuthoritative Off
# после успешной проверки по Kerberos'у, продолжить проверку на других модулях.
AuthType Kerberos
# задаём тип авторитизации
Krb5Keytab "/etc/apache.keytab"
KrbSaveCredentials On
KrbDelegateBasic On # разрешаем делегировать данные авторизации
KrbMethodNegotiate On # метод аутенфикации, обеспечивающий прозрачный вход из домена
KrbServiceName "HTTP/[email protected]"
AuthBasicProvider ldap
AuthName "Subversion repository"
AuthLDAPURL "ldap://DC.EXAMPLE.COM:389/DC=EXAMPLE,DC=COM?userPrincipalName?sub?(objectClass=*)" NONE
# поиск аккаунта в хранилище AD, по данным, переданным из Kerberos'a
AuthLDAPBindDN "CN=http_debian,CN=Users,DC=EXAMPLE,DC=COM"
AuthLDAPBindPassword qwerty
# учётные данные, под которыми Apache может биндиться к контроллеру домена
<Limit PROPPATCH DELETE MERGE PUT POST MKCOL MKACTIVITY COPY MOVE LOCK UNLOCK>
Require ldap-group cn=SVN-WRITE,CN=Users,DC=EXAMPLE,DC=COM
</Limit>
# разграничение прав доступа с учётом групп безопасности из AD
<Limit GET PROPFIND>
Require ldap-group cn=SVN-READ,CN=Users,DC=EXAMPLE,DC=COM
</Limit>
</LocationMatch>
<Location /svn>
DAV svn
SVNPath /home/repository
# место положение хранилища Subversion
SVNPathAuthz on
AuthzSVNAnonymous Off
# запрет доступа анонимным пользователям
</Location>
Дополнительную информацию о параметрах и функциях подключенных модулей
Apache, можно получить используя mod_info.so.
После подключения модуля, необходимо добавить в /etc/apache2/httpd.conf
следующие строки:
<Location /info>
SetHandler server-info
</Location>
Доступ к странице возможен по ссылке http://debian.example.com/info