# Hallo Admins, # bei mir hat es ziemlich lange gedauert bis ich eine LDAP Anbindung hinbekommen habe. # Es hat mich viele Stunden Recherche und bestimmt einige Jahre meines Lebens gekostet:-) # Das versuche ich euch hiermit zu ersparen. # einen ähnlichen Beitrag hab ich zwar schonmal ins Forum geschrieben aber der war noch ein bißchen...fehlerhafter:-) # Das alles hab ich im OTRS- Forum (http://forums.otrs.org/) und er Mailing- Liste (http://www.otrs.org/lists/) gelernt und versuch es hier mal etwas zusammen zu raffen. # Um LDAP erstmal grundlegend zu verstehen hat mir diese Seiten hier sehr geholfen. # Lest euch das mal durch... das spart sehr viel Zeit und viele Fehlversuche. # http://www.selfadsi.de/ldap-path.htm#DNs # http://www.selfadsi.de/bind.htm # http://www.selfadsi.de/search.htm # ladet euch einem LDAP- Browser runter z.B. hier http://www.ldapadministrator.com/ # damit wird es wesentlich einfacher # und vielleicht einen anständigen Editor, ich hab Notepad++, hilft auch viele Tippfehler (vergessene ' usw.) zu vermeiden. # In diesem Sinne hier eine Beispielconfig die euch hoffentlich bei der LDAP Anbindung hilft. # Ich werd Sie mit Kommentaren vollmüllen damit die einzelnen Punkte klarer werden, zumindest hat es da bei mir gehakt... # Diese Config ist bestimmt nicht perfekt und kann sicherlich noch verbessert werden, aber sie funtioniert:-) ################################################################################################################################ #----------------------------------------------------------# # # # LDAP Authentifizierung Agenten und Customer # # # #----------------------------------------------------------# #Agenten Authentifizierung DB # Backend DB fuer Agenten #$Self->{'AuthModule10'} = 'Kernel::System::Auth::DB'; #$Self->{'AuthModule::DB::CryptType10'} = 'crypt'; # hab ich deaktiviert weil sich unsere Agents auch gegen das LDAP Authentifizieren sollen # nach meinem Wissenstand müssen die Agenten aber trotzdem in der Datenbank stehen. ################################################################################################################################ ################################################################################################################################ #------------------------------------------------------------------------------------------------------------------------------# # LDAP Anbindung Firma # #------------------------------------------------------------------------------------------------------------------------------# #------------------------------------------------------------------------------------------------------------------------------# # Authentifizierung Agenten via LDAP (AD) Firma # #------------------------------------------------------------------------------------------------------------------------------# # Hier steht überall 1 hinter (AuthModule1, Host1, ...) # habe ich drin gelassen weil ich mehrere ADs abfrage und auch mehrere Firmen im OTRS habe # wenn ihr nur eine habt kann die 1 überall weg. Ansonsten müsst ihr den ganzen Block halt pro Firma anlegen und einfach durchnummerieren # Aber hier steht ein wichtiger Beitrag von jojo # http://forums.otrs.org/viewtopic.php?f=17&t=7423 # da bin ich auch drauf reingefallen bezüglich der Nummerierung, muss man halt erst mal wissen:-) $Self->{'AuthModule1'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host1'} = 'IP-Domänencontroller';# hier kann auch ein DNS Eintrag rein $Self->{'AuthModule::LDAP::BaseDN1'} = 'dc=Firma,dc=local'; # lest euch die Seiten die ich oben verlinkt habe durch, # dann wird DN,OU, DC usw. alles klar:-) $Self->{'AuthModule::LDAP::UID1'} = 'samaccountname'; $Self->{'AuthModule::LDAP::GroupDN1'} = 'CN=otrsagents,OU=Gruppen,DC=Firma,DC=local'; # nur Mitlieder dieser Gruppe dürfen sich einloggen $Self->{'AuthModule::LDAP::AccessAttr1'} = 'member'; # bei 2008er Domänen ist es 'member' bei 2003er ist es 'memberUID'* $Self->{'AuthModule::LDAP::UserAttr1'} = 'DN'; $Self->{'AuthModule::LDAP::SearchUserDN1'} = 'CN=otrsldap,CN=Users,DC=COMPASS,DC=local'; #hier geht es auch mit dem user Principal Name, # oder eben die DN des Bindusers, war bei mir ne böse Falle weil ich es nicht wörtlich genug genommen habe. Die SearchUserDN ist nicht die DN # in der der User liegt sondern die eindeutige des Users, das gleiche gilt für die GroupDNs # der Search User muss Mitglied in "Domänen-Benutzer" und in "Windows-Authentifizierungszugriffgruppe" sein $Self->{'AuthModule::LDAP::SearchUserPw1'} = 'Passwort'; $Self->{'UserSyncLDAPMap1'} = { 'UserEmail' => 'mail', 'UserFirstname' => 'givenName', 'UserLastname' => 'sn', 'UserLogin' => 'sAMAccountName' }; ################################################################################################################################ #------------------------------------------------------------------------------------------------------------------------------# # Customer # #------------------------------------------------------------------------------------------------------------------------------# $Self->{'Customer::AuthModule1'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host1'} = 'IP-Domänencontroller'; $Self->{'Customer::AuthModule::LDAP::BaseDN1'} ='OU=Users,DC=Firma,DC=local'; # hier die DN # in der eure User liegen, kommt halt drauf an wie eurer AD strukturiert ist $Self->{'Customer::AuthModule::LDAP::UID1'} = 'sAMAccountName'; $Self->{'Customer::AuthModule::LDAP::GroupDN1'} = 'CN=otrscustomer,CN=Users,DC=Firma,DC=local'; # das gleiche wie bei den Agents # nur wer in der Gruppe 'otrscustomer' ist darf sich einloggen $Self->{'Customer::AuthModule::LDAP::AccessAttr1'} = 'member'; #s.o. $Self->{'Customer::AuthModule::LDAP::SearchUserDN1'} = 'otrsldap@Firma.local'; #s.o. das hier wäre dann der userPrincipalName #ob es irgenwelche Nachteile hat wenn man den userPrincipalName anstatt der DN nimmt weiss ich nicht... $Self->{'Customer::AuthModule::LDAP::SearchUserPw1'} = 'Passwort'; $Self->{'Customer::AuthModule::LDAP::Params1'} = { port => 389, timeout => 120, async => 0, version => 3, }; #------------------------------------------------------------------------------------------------------------------------------# # LDAP System Users # #------------------------------------------------------------------------------------------------------------------------------# $Self->{'AuthModule1'} = 'Kernel::System::Auth::LDAP'; $Self->{'AuthModule::LDAP::Host1'} = 'IP-Domänencontroller'; $Self->{'AuthModule::LDAP::BaseDN1'} = 'DC=Firma,DC=local'; $Self->{'AuthModule::LDAP::UID1'} = 'sAMAccountName'; $Self->{'AuthModule::LDAP::SearchUserDN1'} = 'otrsldap@Firma.local'; $Self->{'AuthModule::LDAP::SearchUserPw1'} = 'Passwort'; $Self->{'AuthModule::LDAP::Params1'} = { 'async' => '0', 'timeout' => '120', 'version' => '3', 'port' => '389' }; $Self->{'AuthModule::LDAP::Die1'} = 1; #------------------------------------------------------------------------------------------------------------------------------# # UserSyncLDAPMap # #------------------------------------------------------------------------------------------------------------------------------# $Self->{'UserSyncLDAPMap1'} = { 'UserEmail' => 'mail', 'UserFirstname' => 'givenName', 'UserLastname' => 'sn', 'UserLogin' => 'sAMAccountName' }; $Self->{CustomerUser1} = { Name => 'Firma Customer', Module => 'Kernel::System::CustomerUser::LDAP', Params => { Host => 'IP-Domänencontroller', BaseDN => 'DC=Firma,DC=local', SSCOPE => 'sub', UserDN => 'otrsldap@Firma.local', # wieder DN oder UserPrincipalName UserPw => 'Passwort', AlwaysFilter => '(&(objectclass=user)(mail=*.*@Firma.de))', # falls ihr was ausschliessen wollt: # AlwaysFilter => '(&(objectclass=user)(mail=*.*@Firma.de)(!((was auch immer)))', }, CustomerKey => 'sAMAccountName', CustomerID => 'mail', CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['givenname', 'sn'], CustomerUserSearchListLimit => 1000, # die Anzahl der User die in euerer Kundenübersicht maximal angezeit werden. # die Zeile muss nicht rein, macht aber bei uns hier Sinn. Map => [ [ 'UserSalutation', 'Title', 'title', 1, 0, 'var' ], [ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var' ], [ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var' ], [ 'UserLogin', 'Login', 'sAMAccountName', 1, 1, 'var' ], [ 'UserEmail', 'Email', 'mail', 1, 1, 'var' ], [ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var' ], [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ], ], }; #------------------------------------------------------------------------------------------------------------------------------# # Firma Ende # #------------------------------------------------------------------------------------------------------------------------------# ################################################################################################################################ # jetzt solltet ihr eine LDAP Anbindung haben. # Falls ihr mehr als 200 Kunden habt und denen Gruppen zuweisen wollt gukct mal hier: # http://forums.otrs.org/viewtopic.php?f=17&t=7516 # das hat mich auch fast in den Wahnsinn getrieben, aber ist wie man sieht eigentlich ganz einfach:-) # so ich hoffe das hilft dem ein oder anderen es schneller hinzubekommen und zu verstehen als ich # kommetare hab ich da eingefügt wo ich die meisten Verständnisprobleme hatte. # An alle die es besser wissen als ich: # Ihr dürft mich gerne korrigieren oder das Script hier anpassen, ich bin für jede konstruktive Kritik dankbar.