Fragen zu AlwaysFilter und GroupDN

Hilfe zu Znuny Problemen aller Art
Locked
r00t
Znuny newbie
Posts: 6
Joined: 15 Nov 2007, 16:36

Fragen zu AlwaysFilter und GroupDN

Post by r00t »

Hi,

ich bin gerade dabei OTRS einzurichten und stehe jetzt vor zwei Problemen, die ich trotz Durchsuchen des Forums sowie Google-Search bislang nicht lösen konnte.
Vorweg noch ein paar Infos zu dem System:
OTRS 2.2.4 auf W2K3 R2 Server, CustomerUser werden per LDAP über das AD authentifiziert.

1. AlwaysFilter
Natürlich sollen nur User per LDAP authentifiziert werden, daher habe ich in der Config.pm im Bereich der LDAP-Config den Eintrag AlwaysFilter => '(objectclass=user)' eingefügt.
Wenn ich nun in der Kunden-Benutzer Verwaltung im Admin-Bereich mir alle User anzeigen lasse (Suche nach *) werden neben den Usern auch die im AD eingetragenen Computer angezeigt (ADSERVER$, CITRIXSERVER$, EXCHANGESERVER$, ...). Wie kann ich verhindern, dass diese angezeigt werden?

2. GroupDN
Nachdem das OTRS von vier verschiedene Firmen genutzt werden soll, die auch im AD in separaten OUs eingetragen sind, wollte ich nun in der Config.pm vier LDAP-Einträge machen (derzeit nur einer, die restlichen werde ich einfügen wenn der Erste mal wie gewünscht funktioniert), wobei jeder LDAP-Eintrag auf eine OU beschränkt sein soll. Dies wollte ich über den Eintrag GroupDN => 'ou=Firma1,dc=domain,dc=local' bewerkstelligen.
Trotzdem werden mir die User aus allen OUs angezeigt.


Hier noch die aktuelle Config.pm:

Code: Select all

# --
# Kernel/Config.pm - Config file for OTRS kernel
# Copyright (C) 2001-2006 OTRS GmbH, http://otrs.org/
# --
# $Id: Config.pm.dist,v 1.18 2006/09/07 16:15:41 mh Exp $
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see http://www.gnu.org/licenses/gpl.txt.
# --
#  Note:
#
#  -->> OTRS does have a lot of config settings. For more settings
#       (Notifications, Ticket::ViewAccelerator, Ticket::NumberGenerator,
#       LDAP, PostMaster, Session, Preferences, ...) see
#       Kernel/Config/Defaults.pm and copy your wanted lines into "this"
#       config file. This file will not be changed on update!
#
# --

package Kernel::Config;

sub Load {
    my $Self = shift;
    # ---------------------------------------------------- #
    # ---------------------------------------------------- #
    #                                                      #
    #         Start of your own config options!!!          #
    #                                                      #
    # ---------------------------------------------------- #
    # ---------------------------------------------------- #

    # ---------------------------------------------------- #
    # database settings                                    #
    # ---------------------------------------------------- #
    # DatabaseHost
    # (The database host.)
    $Self->{'DatabaseHost'} = 'localhost';
    # Database
    # (The database name.)
    $Self->{'Database'} = 'otrs';
    # DatabaseUser
    # (The database user.)
    $Self->{'DatabaseUser'} = 'otrs';
    # DatabasePw
    # (The password of database user. You also can use bin/CryptPassword.pl
    # for crypted passwords.)
    $Self->{'DatabasePw'} = 'password';
    # DatabaseDSN
    # (The database DSN for MySQL ==> more: "man DBD::mysql")
    $Self->{DatabaseDSN} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost};";

    # (The database DSN for PostgreSQL ==> more: "man DBD::Pg")
    # if you want to use a local socket connection
#    $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};";
    # if you want to use a tcpip connection
#    $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};host=$Self->{DatabaseHost};";

    # ---------------------------------------------------- #
    # fs root directory
    # ---------------------------------------------------- #
    $Self->{Home} = 'C:/OTRS/otrs';

    # ---------------------------------------------------- #
    # insert your own config settings "here"               #
    # config settings taken from Kernel/Config/Defaults.pm #
    # ---------------------------------------------------- #
    # $Self->{SessionUseCookie} = 0;
    # $Self->{'CheckMXRecord'} = 1;

    # ---------------------------------------------------- #

    # ---------------------------------------------------- #
    # data inserted by installer                           #
    # ---------------------------------------------------- #
    $Self->{'LogModule'} = 'Kernel::System::Log::File';
    $Self->{'LogModule::LogFile'} = 'C:/OTRS/otrs/var/log/otrs.log';
    # $DIBI$
    $Self->{'SystemID'} = 10;
    $Self->{'SecureMode'} = 1;
    $Self->{'Organization'} = 'Firma';
    $Self->{'FQDN'} = 'otrsserver';
    $Self->{'DefaultLanguage'} = 'de';
    $Self->{'AdminEmail'} = 'xxx@yyy.zz';
    $Self->{'DefaultCharset'} = 'utf-8';
    
    
# ---------------- Own Entries --------------- #

		# ---------------------------------------------------- #
		# Entry for custom theme 												  		 #
		# ---------------------------------------------------- #

		$Self->{DefaultTheme} = 'CustomTheme';

		# ---------------------------------------------------- #
		# Entries for sending mail via a SMTP server           #
		# ---------------------------------------------------- #
		
		# SendmailModule
		$Self->{"SendmailModule"} = "Kernel::System::Email::SMTP";
		$Self->{"SendmailModule::Host"} = "mailserver";
		$Self->{"SendmailModule::AuthUser"} = "";
		$Self->{"SendmailModule::AuthPassword"} = "";




		# ---------------------------------------------------- #
		# Entries for authenticating customers via LDAP        #
		# ---------------------------------------------------- #

    $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
    $Self->{'Customer::AuthModule::LDAP::Host'} = 'adserver';
    $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=domain,dc=local';
    $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'CN=OTRS_Service,OU=EDV - Administration,DC=domain,DC=local';
    $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'password';
    $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
    $Self->{'Customer::AuthModule::LDAP::UserAttr'} = 'DN';
    $Self->{'Customer::AuthModule::LDAP::GroupDN'} = 'ou=Firma1,dc=domain,dc=local';


    # ---------------------------------------------------- #
    # customer Auth für Firma1									 #
    # ---------------------------------------------------- #
    # CustomerUser
    # (customer user ldap backend and settings)
    $Self->{CustomerUser} = {
    	  Name => 'LDAP von AD',
        Module => 'Kernel::System::CustomerUser::LDAP',
        Params => {
        # ldap host
        Host => 'adserver',
        # ldap base dn
        BaseDN => 'dc=domain,dc=local',
        GroupDN => 'ou=Firma1,dc=domain,dc=local',
        # search scope (one|sub)
        SSCOPE => 'sub',
        UserDN => 'CN=OTRS_Service,OU=EDV - Administration,DC=mediengruppe,DC=local',
        UserPw => 'password',
        AlwaysFilter => '(objectclass=user)',
        SourceCharset => 'utf-8',
				DestCharset => 'iso-8859-1',
    },
    # customer uniq id
    CustomerKey => 'sAMAccountName',
    # customer #
    CustomerID => 'mail',
    CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchPrefix => '',
    CustomerUserSearchSuffix => '*',
    CustomerUserSearchListLimit => 250,
    CustomerUserPostMasterSearchFields => ['mail'],
    CustomerUserNameFields => ['givenname', 'sn'],
    Map => [
        # note: Login, Email and CustomerID needed!
        # var, frontend, storage, shown, required, storage-type
        #[ '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', 'sAMAccountName', 'mail', 0, 1, 'var' ],
        [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
        #[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
        #[ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
        ],
    };


    # ---------------------------------------------------- #
    # ---------------------------------------------------- #
    #                                                      #
    #           End of your own config options!!!          #
    #                                                      #
    # ---------------------------------------------------- #
    # ---------------------------------------------------- #
}

# ---------------------------------------------------- #
# needed system stuff (don't edit this)                #
# ---------------------------------------------------- #
use strict;
use vars qw(@ISA $VERSION);
use Kernel::Config::Defaults;
push (@ISA, 'Kernel::Config::Defaults');
$VERSION = '$Revision: 1.18 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
# -----------------------------------------------------#

1;
Ich hoffe, ihr habt Ideen bzw Lösungsansätze für meine Probleme, ich bin dankbar für jeden Hinweis.

greetz,
r00t
OTRS 2.2.6 auf
Windows 2K3 Server R2 32bit
jojo
Znuny guru
Posts: 15020
Joined: 26 Jan 2007, 14:50
Znuny Version: Git Master
Contact:

Fragen zu AlwaysFilter und GroupDN

Post by jojo »

1) schau Dir mal mit einem LDAP Browser die Einträge an, die sollten leider ebenfalls von der objectclass user sein :-( (Frag bei M$ nach wie man auf so ne Idee kommt...)
2) De Group DN ist für das Anmelden da, nicht für das Filtern der angezeigen User, die sind abhängig von der BaseDN und ob Du in der Ebene bleibst oder auch untergeordnete Zweige ausliest
"Production": OTRS™ 8, OTRS™ 7, STORM powered by OTRS
"Testing": ((OTRS Community Edition)) and git Master

Never change Defaults.pm! :: Blog
Professional Services:: http://www.otrs.com :: enjoy@otrs.com
r00t
Znuny newbie
Posts: 6
Joined: 15 Nov 2007, 16:36

Fragen zu AlwaysFilter und GroupDN

Post by r00t »

Vielen Dank für die schnelle Antwort. 8)

zu 1)
Tatsächlich, M$ ist so lustig und verpasst Computer-Objekten im AD auch die objectclass user...
Aber egal, nachdem die Computerobjekte in anderen OUs als die User liegen und ich die LDAP Abfrage nun soweit eingeschränkt habe, dass nur noch die relevanten OUs abgefragt werden, werden sie sowieso nicht mehr angezeigt. --> Problem gelöst

zu 2)
Danke für den Hinweis. Laut Doku bin ich davon ausgegangen, dass die GroupDN und BaseDN genau andersrum funktionieren.
Habe jetzt die Einträge so umgeschrieben wie es gehört und die restlichen LDAP-Einträge für die anderen Firmen ergänzt.
Bei einem Eintrag hab ich jedoch noch das Problem, dass im Namen der OU Umlaute vorkommen und deshalb die Abfrage für diese Firma nicht funktioniert. Im Log von OTRS habe ich dann immer folgende Fehlermeldung:

Code: Select all

[Fri Nov 16 13:52:06 2007][Error][Kernel::System::CustomerUser::LDAP::CustomerUserDataGet][494] 0000208D: NameErr: DSID-031001CD, problem 2001 (NO_OBJECT), data 0, best match of:
	'DC=domain,DC=local'
Natürlich habe ich auch beim LDAP Eintrag für diese Firma die Eigenschaften SourceCharset => 'utf-8', und DestCharset => 'iso-8859-1', gesetzt, dennoch wills nicht funktionieren.
Hat jemand eine Idee, wie ich diese Abfrage zum Funktionieren bringen kann? Mit anderen Source- / DestCharsets probieren? Die Umlaute bzw den gesamten BaseDN irgendwie anders angeben?

Danke auf jeden Fall an jeden, der seine grauen Zellen für dieses Problem anstrengt.

greetz,
r00t
OTRS 2.2.6 auf
Windows 2K3 Server R2 32bit
haertie
Znuny newbie
Posts: 19
Joined: 22 May 2007, 15:13

Fragen zu AlwaysFilter und GroupDN

Post by haertie »

zu 1) würde mich deine Lösung sehr interessieren.
r00t
Znuny newbie
Posts: 6
Joined: 15 Nov 2007, 16:36

Fragen zu AlwaysFilter und GroupDN

Post by r00t »

Habe einfach mehrere LDAP-Einträge in der Config.pm angelegt, welche nun direkt auf die jeweiligen OUs im AD zeigen.

Hier nochmal der Code dazu aus der Config.pm

Code: Select all

    $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::LDAP';
    $Self->{'Customer::AuthModule::LDAP::Host'} = 'adserver';
    $Self->{'Customer::AuthModule::LDAP::BaseDN'} = 'dc=firma,dc=local';
    $Self->{'Customer::AuthModule::LDAP::SearchUserDN'} = 'CN=OTRS_Service,OU=EDV - Administration,DC=firma,DC=local';
    $Self->{'Customer::AuthModule::LDAP::SearchUserPw'} = 'password';
    $Self->{'Customer::AuthModule::LDAP::UID'} = 'sAMAccountName';
    $Self->{'Customer::AuthModule::LDAP::UserAttr'} = 'DN';
    $Self->{'Customer::AuthModule::LDAP::GroupDN'} = 'dc=firma,dc=local';


    # ---------------------------------------------------- #
    # customer Auth für Firma1										 #
    # ---------------------------------------------------- #
    # CustomerUser
    # (customer user ldap backend and settings)
    $Self->{CustomerUser1} = {
    	  Name => 'Firma 1',
        Module => 'Kernel::System::CustomerUser::LDAP',
        Params => {
        # ldap host
        Host => 'adserver',
        # ldap base dn
        BaseDN => 'ou=Firma1,dc=firma,dc=local',
        GroupDN => 'dc=firma,dc=local',
        # search scope (one|sub)
        SSCOPE => 'sub',
        UserDN => 'CN=OTRS_Service,OU=EDV - Administration,DC=firma,DC=local',
        UserPw => 'password',
        AlwaysFilter => '(objectclass=user)',
        SourceCharset => 'utf-8',
				DestCharset => 'iso-8859-1',
    },
    # customer uniq id
    CustomerKey => 'sAMAccountName',
    # customer #
    CustomerID => 'mail',
    CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchPrefix => '',
    CustomerUserSearchSuffix => '*',
    CustomerUserSearchListLimit => 250,
    CustomerUserPostMasterSearchFields => ['mail'],
    CustomerUserNameFields => ['givenname', 'sn'],
    Map => [
        # note: Login, Email and CustomerID needed!
        # var, frontend, storage, shown, required, storage-type
        #[ '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', 'sAMAccountName', 'mail', 0, 1, 'var' ],
        [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
        #[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
        #[ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
        ],
    };


    # ---------------------------------------------------- #
    # customer Auth für Firma2										 #
    # ---------------------------------------------------- #
    # CustomerUser
    # (customer user ldap backend and settings)
    $Self->{CustomerUser2} = {
    	  Name => 'Firma 2',
        Module => 'Kernel::System::CustomerUser::LDAP',
        Params => {
        # ldap host
        Host => 'adserver',
        # ldap base dn
        BaseDN => 'ou=Firma2,dc=firma,dc=local',
        GroupDN => 'dc=firma,dc=local',
        # search scope (one|sub)
        SSCOPE => 'sub',
        UserDN => 'CN=OTRS_Service,OU=EDV - Administration,DC=firma,DC=local',
        UserPw => 'password',
        AlwaysFilter => '(objectclass=user)',
        SourceCharset => 'utf-8',
				DestCharset => 'iso-8859-1',
    },
    # customer uniq id
    CustomerKey => 'sAMAccountName',
    # customer #
    CustomerID => 'mail',
    CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchPrefix => '',
    CustomerUserSearchSuffix => '*',
    CustomerUserSearchListLimit => 250,
    CustomerUserPostMasterSearchFields => ['mail'],
    CustomerUserNameFields => ['givenname', 'sn'],
    Map => [
        # note: Login, Email and CustomerID needed!
        # var, frontend, storage, shown, required, storage-type
        #[ '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', 'sAMAccountName', 'mail', 0, 1, 'var' ],
        [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
        #[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
        #[ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
        ],
    };

    # ---------------------------------------------------- #
    # customer Auth für Firma3				 #
    # ---------------------------------------------------- #
    # CustomerUser
    # (customer user ldap backend and settings)
    $Self->{CustomerUser3} = {
    	  Name => 'Firma 3',
        Module => 'Kernel::System::CustomerUser::LDAP',
        Params => {
        # ldap host
        Host => 'adserver',
        # ldap base dn
        BaseDN => 'ou=Firma3,dc=firma,dc=local',
        GroupDN => 'dc=firma,dc=local',
        # search scope (one|sub)
        SSCOPE => 'sub',
        UserDN => 'CN=OTRS_Service,OU=EDV - Administration,DC=firma,DC=local',
        UserPw => 'password',
        AlwaysFilter => '(objectclass=user)',
        SourceCharset => 'utf-8',
				DestCharset => 'iso-8859-1',
    },
    # customer uniq id
    CustomerKey => 'sAMAccountName',
    # customer #
    CustomerID => 'mail',
    CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'],
    CustomerUserSearchPrefix => '',
    CustomerUserSearchSuffix => '*',
    CustomerUserSearchListLimit => 250,
    CustomerUserPostMasterSearchFields => ['mail'],
    CustomerUserNameFields => ['givenname', 'sn'],
    Map => [
        # note: Login, Email and CustomerID needed!
        # var, frontend, storage, shown, required, storage-type
        #[ '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', 'sAMAccountName', 'mail', 0, 1, 'var' ],
        [ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var' ],
        #[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var' ],
        #[ 'UserComment', 'Comment', 'description', 1, 0, 'var' ],
        ],
    };
hth,
r00t
OTRS 2.2.6 auf
Windows 2K3 Server R2 32bit
haertie
Znuny newbie
Posts: 19
Joined: 22 May 2007, 15:13

Fragen zu AlwaysFilter und GroupDN

Post by haertie »

das funktioniert schon sehr gut bei mir. die frage ist jetzt immer noch, wie man die blöden maschinen-accounts da raus bekommt ?

Rechner1$
Rechner2$
.....
haertie
Znuny newbie
Posts: 19
Joined: 22 May 2007, 15:13

Fragen zu AlwaysFilter und GroupDN

Post by haertie »

Ich hab es selbst gefunden.

MS legt für User und Computer folgende objectClass an:

objectClass: top; person; organizationalPerson; user; <<< User
objectClass: top; person; organizationalPerson; user; computer <<< Computer

Es gibt die Unterscheidung aber in der "objectCategory" wo sich die CN= in "Person"
und "Computer" unterscheiden. Ich hab jetzt in die OTRS-LDAP-Abfrage einen
Filter gesetzt : AlwaysFilter => '(objectCategory=Person)',

Zumindest ist es bei uns so.
lokalhorst
Znuny newbie
Posts: 32
Joined: 22 Feb 2008, 12:29
Znuny Version: 2.4.x

Fragen zu AlwaysFilter und GroupDN

Post by lokalhorst »

Mann kann auch einfach beide Parameter verwenden:
AlwaysFilter => '(&(objectCategory=person)(objectClass=user))',
Prod1: OTRS 2.4.x, Ubuntu 8.04
Prod2: OTRS 3.1.x, Ubuntu 12.04
Locked