2012-05-02 6 views
5

시나리오 : SVNSERVE (Apache 없음)를 사용하는 Subversion 저장소를 호스팅하는 AD 도메인의 Windows 서버이며 이 아니고 VisualSVN입니다.* * 누구든지 Windows SVNServe가 SASL/GSSAPI를 통해 AD/Kerberos를 인증합니까?

목표 : GSSAPI를 통한 SASL을 통해 Kerberos를 통해 Windows 도메인에 사용자를 Subversion 저장소에 인증합니다.

여러 사이트에서 자주 게시하는 사용자는 "SASL 메커니즘 목록을 가져올 수 없습니다."와 함께이 구성에서 막 다른 골목을 자주 지나치게 나타냅니다. 실제로 실행중인 인스턴스를 보지 못했습니다. 누구든지이 실행을합니까?

2011 년에 Gentoo 포럼에 게시 한 결과로이 시나리오에 속한 누군가가 관련 소스 tarball을 검토 한 결과, 한 번에 그러한 구성이 작동하는 반면, 파일이 필요하다고 결론을 냈습니다 그것은 더 이상 근원이 아니기 때문입니다. 이제

GEntoo forum discussion where poster claims svnserve+gssapi+sasl worked at one time, but no longer does.

, 나는 정확 그 주장을 주장하지 않습니다,하지만 난 정확히 같은 지점에 붙어 알고, 나는 아직 "승리"를 주장 어떤 게시물을 본 적이 없다 이러한 설정을 통해. 가지고 있다면 자세한 내용을 알려주십시오!

미리 감사드립니다.

답변

3

답변이 답변되지 않은 질문에 대한 "텀블 위드"배지를 얻고 나 자신에 대한 상당한 추가 연구를 한 결과, Windows 기반 Subversion의 주제 조합이 사실 현재 코드에서 불가능하다는 결론에 도달했습니다 베이스. 나는 SASL 인증 계층의 어떤 것이 여기에서 문제가된다고 생각한다. 어떤 소스가 제거되었거나 현저하게 "깨뜨린"것으로 변경되어 한 지점에서 작동한다고 나는 믿는다.

내 해결책은 mod_auth_sspi와 함께 아파치를 추가하는 것이고, 저장소가 느려지는 동안 인증은 완벽하게 작동한다. 이것은 인증 요구 사항의 "수정 사항"인 것 같습니다.

3

SASL + LDAP가 있지만 SASL + GSSAPI가 아닌 AD에 대한 인증을 수행했으며 작은주의 사항이 있습니다. Windows에서 Cygwin의 svnserve를 사용해야 만합니다.

1) svnserve가 Linux의 SASL + LDAP/AD를 통해 사용자를 인증하는 것은 매우 쉬웠습니다. (Windows의 svnserve에 대한 질문이지만 나와 관련이 있습니다.) LDAP/AD에 대해 작동하는 인증을 얻는 중요한 부분은 saslauthd이며 testsaslauthd를 사용하여 인증을 테스트하십시오. 그 대신하여 인증을 수행하는 saslauthd를 사용하는

pwcheck_method: saslauthd 
mech_list: PLAIN 

/etc/sasl2/svn.conf

1A)이 알려줍니다 전복/또는 svnserve를 : 예를 들어 우분투를 사용

.

ldap_servers: ldap://yourADserver.dept.org 
ldap_search_base: DC=dept,DC=org 
ldap_bind_dn: cn=bindaccount,dc=dept,dc=org 
ldap_bind_pw: passwordOfbindaccount 

ldap_deref: never 
ldap_restart: yes 
ldap_scope: sub 
ldap_use_sasl: no 
ldap_start_tls: no 
ldap_version: 3 
ldap_auth_method: bind 
ldap_filter: sAMAccountName=%u 
ldap_password_attr: userPassword 
ldap_timeout: 10 
ldap_cache_ttl: 5 
ldap_cache_mem: 32768 

1C /etc/saslauthd.conf

1B))는 testsaslauthd

testsaslauthd -u myusername -p mypassword 

1D) 성공하면, 다음 saslauthd를 실행 또는 svnserve를 시작 통해 테스트를 수행합니다. 그리고 svn 클라이언트를 사용하여 인증을 테스트하십시오.

2) 문제는 Windows에 Cyrus의 saslauthd의 기본 포트가 없기 때문입니다. 답은 svnserve, testsaslauthd 및 saslauthd가있는 Cygwin을 사용하는 것입니다.

위 단계 만 반복하면되지만 svn.conf의 위치는 다를 수 있습니다.

+0

자세한 내용은 @jmsjr을 이용해 주셔서 감사합니다. 환상적인 물건, 그리고이 모든 일을 만드는 최소한 * 어떤 방법이 있음을 알게 된 것을 기쁘게합니다. 불행하게도, 원래의 질문이 진화 한 대상 환경은 Cygwin의 사용이 제재 될 것이라고 심각하게 의심하는 것입니다. (대부분 통제 할 수없는 독점적 인 관료적 인 이유는 아닙니다. –

+0

@DavidW 나는 너의 고통을 안다. Cygwin에서 실행되는 유일한 이유는 내가 작업하는 지원 및 백업 계약이 Windows에만 해당된다는 것입니다. 그럼에도 불구하고 Cygwin 환경에서 SVN 저장소의 미러 역할을하는 Linux VM에서 동일한 설정을 사용합니다. 두 광고에 대해 인증 할 필요가있는 위와 커플을 맺은 다음 두 광고에 대해 OpenLDAP을 프록시 (slap-meta 사용)로 사용해야하고 OpenLDAP 프록시에 대해 SASL + LDAP를 통해 SVN/saslauthd 인증을 받아야합니다. – jmsjr

2

나는 svnserve + SASL + GSSAPI가 작동하도록하기 위해 (머리 스크래치, 컴파일, 소스 코드가없는 디버깅 30 시간이 끝나면 괜찮은 오류 코드를 얻기 위해) 막 관리했습니다! 내 설정은 다음과 같습니다 :

  • AD 서버는 데비안 7.2 (소스에서 빌드 됨)의 Samba 4.1.0입니다.
  • Subversion 서버는 Solaris Express (SunOS 5.11 snv_151a i86pc i386 i86pc)에서 서브 버전 1.8.5입니다. 원시 (Sun) SASL을 사용하여 소스에서 x64 용으로 제작되었습니다.
  • 클라이언트는 TortoiseSVN 1.8.2 (x64 바이너리 릴리스) 및 Heimdal 1.5.1 (보안 엔드 포인트에서 x64 바이너리)을 사용하는 Windows 7 x64입니다.
  • 는 Kerberos를 포함 아무것도, 당신은 도메인 creds와 등, 시계 동기화, 앞으로이 있고 DNS가 원활하게 작동 반대로 윈도우 상자에

단계가 필요합니다

  • 는 "또는 svnserve 만들기 "Subversion 서버에 대한 사용자 계정 (컴퓨터 계정 아님).
  • "ktpass -princ svn/[email protected] -mapuser DOMAIN.LOCAL \ svnserve -crypto RC4-HMAC-NT -pass 암호 -ptype KRB5_NT_PRINCIPAL -out svnserve.keytab"을 실행하십시오. 아니요이 계정의 DES를 켜려면 Windows 7에서 인증을 거부합니다. 나는 그것을 더 일찍 시작했는데 (조리법에 따라) 그것을 작동 시켜야만 다시 작동시켜야했다. Subversion 서버에 대한

단계 :

:

  • 의 /etc/krb5/krb5.conf

    [libdefaults] 
        default_realm = DOMAIN.LOCAL 
    
    [realms] 
        DOMAIN.LOCAL = { 
         kdc = pdc.domain.local 
         admin_server = pdc.domain.local 
        } 
    
    [domain_realm] 
        .domain.local = DOMAIN.LOCAL 
        domain.local = DOMAIN.LOCAL 
    
    # Other defaults left as-is. 
    
  • 설정의 repo/conf의/svnserve.conf를 설정

    [general] 
    anon-access = none 
    authz-db = authz 
    realm = DOMAIN.LOCAL 
    
    [sasl] 
    use-sasl = true 
    min-encryption = 0 
    max-encryption = 256 
    
  • 설정 repo/conf/authz :

    [aliases] 
    
    [groups] 
    
    [/] 
    * = 
    # Still investigating whether access to the server can be controlled through an AD group. 
    # Below is for [email protected], the realm appears to get lost. 
    user = rw 
    
  • 이 /etc/sasl/svn.conf를 설정합니다

    mech_list: GSSAPI 
    
  • 는 SASL 구성 /etc/krb5/krb5.keytab과에 (키 탭에서

    드롭 svnserve.keytab는

  • 하지 않습니다 아무것도하는 것처럼 보입니다).

  • svnserve를 시작하십시오. 클라이언트에 대한

단계 :

  • TortoiseSVN을하고는 Heimdal를 설치합니다.
  • C : \ ProgramData \ Kerberos \ krb5.conf를 Subversion 서버의 /etc/krb5/krb5.conf와 비슷하게 편집하십시오.내가 거기 남겨둔 다른 기본값이 있습니다.
  • 결제를 수행하고 비밀번호가 필요하지 않습니다.

이 설정의 한 가지 문제점은 svnserve 프로세스가 /etc/krb5/krb5.keytab을 읽을 수 있어야한다는 것입니다. 따라서이 권한은 약간 뒤로 감겨 있어야합니다. svnserve는 자체 존에 들어가기 때문에 이것은 나에게 문제가되지 않습니다. 테스트 중에도 mslsa_cc.dll이 손상되었지만 모든 것이 정리되면 어떤 충돌도 보지 못했습니다.

일부 논쟁을 통해 Windows에서 svnserve에서도이 문제를 해결할 수 있습니다. Windows 클라이언트에서 MIT Kerberos를 시도했지만 시작할 때마다 충돌이 발생하여 포기했습니다. 운이 좋을지도 몰라.

업데이트 : msssa_cc.dll의 버그입니다 (https://github.com/krb5/krb5/commit/7acb524f5aa00274771dbbfac19d2dd779aad409과 유사). ANSIToUnicode가 호출되는 방식으로 nOutStringLen을 2로 나눌 필요가 있으므로 약간의 오류가 발생합니다. mslsa_cc.dll에 바이너리 패치는 다음과 같습니다 변경 FF 15 04 69 00에서 D1 EE 0F 1 층 (40)

  • 오프셋 0xB5E에 : 77 EB로 변경

    • 이 0xB46 오프셋.
  • +0

    "이 설정의 한 가지 문제는 svnserve 프로세스가 /etc/krb5/krb5.keytab을 읽을 수 있어야한다는 것입니다."- svnserve에 자체 키탭을 설정하는 구성 옵션이없는 경우이 작업을 수행 할 수 있습니다 환경 변수 KRB5_KTNAME을 설정합니다. 이것은 Unix상의 기본 Kerberos 라이브러리 (MIT 또는 Heimdal)에 의해 직접 사용됩니다. 일반적으로 시스템 키탭에있는 키는 임의의 다른 서버와 공유하지 않으려합니다. –