LDAP Auth gegen 2 Domains

Hilfe zu Znuny Problemen aller Art
Locked
Indiz
Znuny newbie
Posts: 19
Joined: 10 Aug 2009, 17:10
Znuny Version: 2.3.2

LDAP Auth gegen 2 Domains

Post by Indiz »

Hallo,

ich möchte gerne OTRS (Kunden Frontend) gegen 2 Domains via LDAP und der lokalen DB authentifizieren. Hierfür habe ich folgende Eintragung in meiner Config.pm:

# This is an configuration for an LDAP auth. backend.
$Self->{'Customer::AuthName1'} = '1 LDAP Datenquelle';
$Self->{'Customer::AuthModule1'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host1'} = 'dom1.org.dir';
$Self->{'Customer::AuthModule::LDAP::BaseDN1'} = 'dc=dom1,dc=org,dc=dir';
$Self->{'Customer::AuthModule::LDAP::UID1'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN1'} = 'otrs@dom1.org.dir';
$Self->{'Customer::AuthModule::LDAP::SearchUserPW1'} = 'passwd';
$Self->{'Customer::AuthModule::LDAP::Die1'} = 1;

# This is an configuration for an LDAP auth. backend.
$Self->{'Customer::AuthName2'} = '2 LDAP Datenquelle';
$Self->{'Customer::AuthModule2'} = 'Kernel::System::CustomerAuth::LDAP';
$Self->{'Customer::AuthModule::LDAP::Host2'} = 'dom2.org.dir';
$Self->{'Customer::AuthModule::LDAP::BaseDN2'} = 'dc=dom2,dc=org,dc=dir';
$Self->{'Customer::AuthModule::LDAP::UID2'} = 'sAMAccountName';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN2'} = 'otrs@dom2.org.dir';
$Self->{'Customer::AuthModule::LDAP::SearchUserPW2'} = 'passwd';
$Self->{'Customer::AuthModule::LDAP::Die2'} = 1;

# Third backend, internal OTRS DB
$Self->{'Customer::AuthName3'} = '3 DB Datenquelle Extern';
$Self->{'Customer::AuthModule3'} = 'Kernel::System::Auth::DB';
$Self->{'Customer::AuthModule::DB::CryptType3'} = 'crypt';

Die Authentifizierung gegen jeweils eine Domain sowie der DB klappt.
Leider klappt es nicht wenn beide Domains gleichzeitig eingetragen sind.

In der o.g. Konfiguration klappt die Anmeldung an Dom1 und der DB. Eine Dom2 anmeldung liefert folgenden Error in der Syslog:

Aug 10 17:19:20 itsd OTRS-CGI-10[4072]: [Notice][Kernel::System::CustomerAuth::LDAP::Auth] CustomerUser: dom2user authentification failed, no LDAP entry found!BaseDN='dc=dom1,dc=org,dc=dir', Filter='(sAMAccountName=perscheid1)', (REMOTE_ADDR: 192.168.18.43).
Aug 10 17:19:20 itsd OTRS-CGI-10[4072]: [Error][Kernel::System::CustomerAuth::LDAP::Auth][Line:224]: Search failed! 00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece
Aug 10 17:19:20 itsd
Aug 10 17:19:20 itsd OTRS-CGI-10[4072]: [Error][Kernel::System::CustomerAuth::LDAP::Auth][Line:224]: Search failed! 00000000: LdapErr: DSID-0C090627, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece
Aug 10 17:19:20 itsd
Aug 10 17:19:20 itsd OTRS-CGI-10[4072]: [Notice][Kernel::System::Auth::DB::Auth] User: dom2user doesn't exist or is invalid!!! (REMOTE_ADDR: 198.168.18.43)

Die 1te Zeile zeigt den Versuch an Dom1 (muss ja schief gehen)
Zeile 3+5 itsd ist der Hostname des OTRS Systems
Zeile 2+4 - Die Fehler, aus denen ich nicht schlau werde, da die LDAP Anfrage gegen die Domain bei Einzelkonfiguration ja klappt (SearchUserDN+PAsswd i.O.)
Die 6te Zeile zeigt den Versuch gegen die DB (muss auch schief gehen)

OTRS System: Ubuntu 9.04
OTRS Version 2.3.2
ITSM Version 1.2.3
Domains auf Windows Server 2003

Ich hoffe, jemand kennt eine Lösung.

Vielen Dank im voraus.

Gruß,
Micha
Joyner
Znuny expert
Posts: 185
Joined: 08 Feb 2008, 14:49
Znuny Version: 2.2.8
Location: Berlin

LDAP Auth gegen 2 Domains

Post by Joyner »

Hallo Michael,

was hast du jeweils nach den AuthModule-Parametern zu stehen?
Für jedes Backend benötigst du jeweils

$Self -> {CustomerUserX} = {
Name =>
Module =>
Params => {
}
}
Entsprechendes (Abweichungen zw. DB und LDAP) siehe Doku.

Wenn du nur einmalig dieses angibst ($Self => {CustomerUser} ...) wird es nur für das erste Backend verwendet und das zweite, dritte,... Backend geht leer aus.

Auch wenn die Config dadurch massig lang wird... Kann man ja auslagern und somit die Config.pm splitten.

mfg
Sebastian
Produktiv: OTRS 2.4.7, CiCS 3.1.5, Eigenentwicklungen
β-Testing/Mirror: OTRS 2.4.7, ITSM 2.0.2, CiCS(::ITSM) 3.1.5 (2.1.6), Eigenentwicklungen OS: Win2003, XAMPP, Apache2.2/MySQL 5, Trac/SVN
Indiz
Znuny newbie
Posts: 19
Joined: 10 Aug 2009, 17:10
Znuny Version: 2.3.2

LDAP Auth gegen 2 Domains

Post by Indiz »

Hallo Sebastian,

die Kundensuche klappt bei mir bei beiden Domains. Hier der Auszug für die Kundensuche:

Code: Select all

# CustomerUser DOM1-Mitarbeiter
#    # (customer user ldap backend and settings)
#
    $Self->{CustomerUser1} = {
        Name => 'DOM1 Mitarbeiter',
        Module => 'Kernel::System::CustomerUser::LDAP',
        Params => {
            # ldap host
            Host => 'dom1.org.dir',
            # ldap base dn
            BaseDN => 'dc=dom1,dc=org,dc=dir',
            # search scope (one|sub)
            SSCOPE => 'sub',
#            # The following is valid but would only be necessary if the
#            # anonymous user does NOT have permission to read from the LDAP tree
            UserDN => 'otrs@dom1.org.dir',
            UserPw => 'passwd',
            # in case you want to add always one filter to each ldap query, use
            # this option. e. g. AlwaysFilter => '(mail=*)' or AlwaysFilter => '(objectclass=user)'
            AlwaysFilter => '(objectclass=user)',
#           AlwaysFilter => '',
            # if your frontend is e. g. iso-8859-1 and the charset of your
            # ldap server is utf-8, use this options (if not, ignore it)
            SourceCharset => 'utf-8',
            DestCharset => 'iso-8859-1',
            # Net::LDAP new params (if needed - for more info see perldoc Net::LDAP)
            Params => {
                port => 389,
                timeout => 120,
                async => 0,
                version => 3,
            },
        },
        # customer uniq id
#        CustomerKey => 'mail',
        CustomerKey => 'samaccountname',
        # customer #
        CustomerID => 'cn',
        CustomerUserListFields => ['sn', 'cn', 'mail'],
        CustomerUserSearchFields => ['uid', 'cn', 'sn', 'mail'],
        CustomerUserListFields => ['cn','sAMAccountName', 'description', 'department'],
        CustomerUserSearchPrefix => '',
        CustomerUserSearchSuffix => '*',
        CustomerUserSearchListLimit => 250,
        CustomerUserPostMasterSearchFields => ['mail'],
        CustomerUserNameFields => ['sn', 'givenname' ],
        # show now own tickets in customer panel, CompanyTickets
#        CustomerUserExcludePrimaryCustomerID => 0,
        # add a ldap filter for valid users (expert setting)
#       CustomerUserValidFilter => '(!(description=gesperrt))',
        # admin can't change customer preferences
        AdminSetPreferences => 1,
        Map => [
            # note: Login, Email and CustomerID needed!
            # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly
            [ 'UserSalutation', 'Title',      'title',           1, 0, 'var', '', 1 ],
            [ 'UserFirstname',  'Vorname',  'givenname',       1, 0, 'var', '',1 ],
            [ 'UserLastname',   'Nachname',   'sn',              1, 0, 'var', '', 1 ],
            [ 'UserLogin',      'Benutzername',   'sAMAccountname',  1, 0, 'var', '', 1 ],
           [ 'Department',      'Abteilung',   'department',             1, 0, 'var', '', 1 ],
            [ 'UserEmail',      'E-Mail',      'mail',            1, 0, 'var', '', 1 ],
            [ 'UserCustomerID', 'CustomerID', 'mail',            0, 0, 'var', '', 1 ],
#            [ 'UserCustomerIDs', 'CustomerIDs', 'second_customer_ids', 1, 0, 'var', '', 0 ],
            [ 'UserPhone',      'Telefon',      'telephonenumber', 1, 0, 'var','', 1 ],
#           [ 'UserFax',      'Fax',      'facsimileTelephonenumber', 1, 0, 'var', '', 1 ],
            [ 'UserAddress',    'Adresse',    'postaladdress',   1, 0, 'var','', 1 ],
            [ 'UserComment',    'Kommentar',    'description',     1, 0, 'var','', 1 ],
        ],
};

# CustomerUser DOM2 Mitarbeiter
#    # (customer user ldap backend and settings)
#
    $Self->{CustomerUser2} = {
        Name => 'DOM2 Mitarbeiter',
        Module => 'Kernel::System::CustomerUser::LDAP',
        Params => {
            # ldap host
            Host => 'dom2.org.dir',
            # ldap base dn
            BaseDN =>  'dc=dom2,dc=org,dc=dir',
            # search scope (one|sub)
            SSCOPE => 'sub',
#            # The following is valid but would only be necessary if the
#            # anonymous user does NOT have permission to read from the LDAP tree
            UserDN => 'otrs@dom2.org.dir',
            UserPw => 'passwd',
            # in case you want to add always one filter to each ldap query, use
            # this option. e. g. AlwaysFilter => '(mail=*)' or AlwaysFilter => '(objectclass=user)'
            AlwaysFilter => '(objectclass=user)',
#           AlwaysFilter => '',
            # if your frontend is e. g. iso-8859-1 and the charset of your
            # ldap server is utf-8, use this options (if not, ignore it)
            SourceCharset => 'utf-8',
            DestCharset => 'iso-8859-1',
            # Net::LDAP new params (if needed - for more info see perldoc Net::LDAP)
            Params => {
                port => 389,
                timeout => 120,
                async => 0,
                version => 3,
            },
        },
        # customer uniq id
#        CustomerKey => 'mail',
        CustomerKey => 'samaccountname',
        # customer #
        CustomerID => 'cn',
        CustomerUserListFields => ['sn', 'cn', 'mail'],
        CustomerUserSearchFields => ['uid', 'cn', 'sn', 'mail'],
        CustomerUserSearchPrefix => '',
        CustomerUserSearchSuffix => '*',
        CustomerUserSearchListLimit => 250,
        CustomerUserPostMasterSearchFields => ['mail'],
        CustomerUserNameFields => ['sn', 'givenname' ],
        # show now own tickets in customer panel, CompanyTickets
#        CustomerUserExcludePrimaryCustomerID => 0,
        # add a ldap filter for valid users (expert setting)
#       CustomerUserValidFilter => '(!(description=gesperrt))',
        # admin can't change customer preferences
        AdminSetPreferences => 1,

        Map => [
            # note: Login, Email and CustomerID needed!
            # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly
            [ 'UserSalutation', 'Title',      'title',           1, 0, 'var', '', 1 ],
            [ 'UserFirstname',  'Vorname',  'givenname',       1, 0, 'var', '',1 ],
            [ 'UserLastname',   'Nachname',   'sn',              1, 0, 'var', '', 1 ],
            [ 'UserLogin',      'Benutzername',   'sAMAccountname',  1, 0, 'var', '', 1 ],
           [ 'Department',      'Abteilung',   'department',             1, 0, 'var', '', 1 ],
            [ 'UserEmail',      'E-Mail',      'mail',            1, 0, 'var', '', 1 ],
            [ 'UserCustomerID', 'CustomerID', 'mail',            0, 0, 'var', '', 1 ],
#            [ 'UserCustomerIDs', 'CustomerIDs', 'second_customer_ids', 1, 0, 'var', '', 0 ],
            [ 'UserPhone',      'Telefon',      'telephonenumber', 1, 0, 'var','', 1 ],
#           [ 'UserFax',      'Fax',      'facsimileTelephonenumber', 1, 0, 'var', '', 1 ],
            [ 'UserAddress',    'Adresse',    'postaladdress',   1, 0, 'var','', 1 ],
            [ 'UserComment',    'Kommentar',    'description',     1, 0, 'var','', 1 ],
        ],
};
Gruß,
Micha
Joyner
Znuny expert
Posts: 185
Joined: 08 Feb 2008, 14:49
Znuny Version: 2.2.8
Location: Berlin

LDAP Auth gegen 2 Domains

Post by Joyner »

Hallo,

gib dein SeachUserDN mal wirklich komplett nach Format 'cn=LDAP_User,cn=xxx,ou=yyy,dc=dom1,dc=org,dc=dir' an.
Und kommentiere mal das
$Self->{'Customer::AuthModule::LDAP::Die1'} = 1;
sowie Die2 aus.

mfg
Produktiv: OTRS 2.4.7, CiCS 3.1.5, Eigenentwicklungen
β-Testing/Mirror: OTRS 2.4.7, ITSM 2.0.2, CiCS(::ITSM) 3.1.5 (2.1.6), Eigenentwicklungen OS: Win2003, XAMPP, Apache2.2/MySQL 5, Trac/SVN
Indiz
Znuny newbie
Posts: 19
Joined: 10 Aug 2009, 17:10
Znuny Version: 2.3.2

LDAP Auth gegen 2 Domains

Post by Indiz »

... leider auch ohne Erfolg.

$Self->{'Customer::AuthModule::LDAP::SearchUserDN1'} = 'CN=otrs otrs,OU=Benutzerverwaltung,DC=dom1,DC=org,DC=dir';
$Self->{'Customer::AuthModule::LDAP::SearchUserDN2'} = 'CN=orts orts,OU=Benutzerverwaltung,DC=dom2,DC=org,D C=dir';

Auch der Syslog Eintrag bleibt gleich - alsob ich gar keine Veränderung durchgeführt hätte.

Mir ist aufgefallen, dass es ja in meinem Syslog 4 Meldungen bei einem Login Versuch gibt. Ich denke mal, dass der erste Eintrag aus der ZZZAuto.pm (Dom1 in SysConfig eingetragen) kommt, der 2te und 3te mit Fehlern und der 4te (DB Abfrage) aus der Config.pm. Das heißt für mich, dass immer nur der in SysConfig konfigurierte Eintrag aktiv war. Wenn ich nun die Erweiterung ...1 und ...2 in der Config.pm entferne, so wird der letzte LDAP Eintrag genommen - hier die DOM2 Abfrage (die Abfrage klappt und das Überschreiben somit auch).

Somit muss der Fehler bei der Durchnummerierung der LDAP Abfragen sein - aber wie? Habe ich eine Syntax übersehen? :?:

Gruß,
MIcha
Indiz
Znuny newbie
Posts: 19
Joined: 10 Aug 2009, 17:10
Znuny Version: 2.3.2

LDAP Auth gegen 2 Domains

Post by Indiz »

GELÖST - aber frag nicht wie :-)

Ich frage Dom1 nun ausschließlich mit der KOnfiguration aus der SysConfig - also in ZZZAuto.pm ab.

Zusätzlich habe ich folgende Einträge in der Config.pm

Code: Select all

   # This is an configuration for an LDAP auth. backend.
   # (take care that Net::LDAP is installed!)
     $Self->{'Customer::AuthName2'} = '2 LDAP Datenquelle DOM2';
     $Self->{'Customer::AuthModule2'} =  'Kernel::System::CustomerAuth::LDAP';
     $Self->{'Customer::AuthModule::LDAP::Host2'} =  'dom2.org.dir';
     $Self->{'Customer::AuthModule::LDAP::BaseDN2'} =  'dc=dom2,dc=org,dc=dir';
     $Self->{'Customer::AuthModule::LDAP::UID2'} =  'sAMAccountName';
     $Self->{'Customer::AuthModule::LDAP::SearchUserDN2'} =  'otrs@dom2.org.dir';
     $Self->{'Customer::AuthModule::LDAP::SearchUserPw2'} =  'passwd';
     $Self->{'Customer::AuthModule::LDAP::Die2'} = '0';

    # Third backend, internal OTRS DB
     $Self->{'Customer::AuthName3'} = '3 DB Datenquelle Extern';
     $Self->{'Customer::AuthModule3'} = 'Kernel::System::Auth::DB';
     $Self->{'Customer::AuthModule::DB::CryptType3'} = 'crypt';
Bis auf die Dom1 Konfiguration, welche ja immer geklappt hat sehe ich nicht wirklich einen Unterschied zwischen den KOnfigurationen -

ABER ES KLAPPT!

Vielen Dank für eure Unterstützung.

Gruß,
MIcha
Locked