Authorisierung mit LDAP
-
- Znuny newbie
- Posts: 6
- Joined: 26 Apr 2021, 09:19
- Znuny Version: 6.0.34
- Real Name: Udo Schleucher
- Company: Bundespatentgericht
Authorisierung mit LDAP
Hallo zusammen,
ich habe auf einem Testsystem zu znuny-OTRS erfolgreich Single-Sign-On über Apache gssapi konfiguriert - die Anmeldung klappt auch bestens. Was nicht funktioniert, ist die Authorisierung gegen AD-Gruppen basierend auf Config.pm, was dazu führt, dass grundsätzlich jeder AD-User über index.pl reingelassen wird und nicht bei fehlender AD-Gruppen-Zugehörigkeit abgewiesen wird.
Das Problem liegt in unseren CommonNames aus dem Active Directoy: CN=schul15\, test,OU=Benutzer,DC=DOMÄNE,DC=TLD
Dort ist voreingestellt, dass der CN aus Nachname, Vorname erstellt wird, wobei das "," dann mit einem "\" maskiert wird. Ich möchte ungern das bestehende AD hier in der Konfiguration des DisplayName / CN ändern, weil ich nicht sicher bin, ob das nicht wiederum Seiteneffekte auf weitere Anwendungen hat, die ebenfalls auf das AD zugreifen.
An sich ist das bis hierher auch noch kein Problem, znuny-OTRS macht daraus aber leider noch eine weitere Umwandlung der Strings, so dass aus dem AD-CN "CN=schul15\, test,OU=Benutzer,DC=DOMÄNE,DC=TLD" innerhalb von znuny-OTRS ein "CN=schul15\5c, test,OU=Benutzer,DC=DOMÄNE,DC=TLD" wird, was einen Match gegen AD-Gruppen zum Scheitern verurteilt.
Zusätzlich haben wir auch Namen mit Umlauten, die ebenfalls von znuny-OTRS bearbeitet werden - so wird ein ö zu "ö.
Kann man das znung-OTRS irgendwie abgewöhnen - meinetwegen auch in einer der Quelldateien?
Oder für die Suche im AD statt des CN bspw. den userPrincipalName oder sAMAccountName des Users heranziehen?
Wir setzen OTRS-Version 6.0.34 ein.
Vielen Dank im Voraus.
Viele Grüße,
Udo
ich habe auf einem Testsystem zu znuny-OTRS erfolgreich Single-Sign-On über Apache gssapi konfiguriert - die Anmeldung klappt auch bestens. Was nicht funktioniert, ist die Authorisierung gegen AD-Gruppen basierend auf Config.pm, was dazu führt, dass grundsätzlich jeder AD-User über index.pl reingelassen wird und nicht bei fehlender AD-Gruppen-Zugehörigkeit abgewiesen wird.
Das Problem liegt in unseren CommonNames aus dem Active Directoy: CN=schul15\, test,OU=Benutzer,DC=DOMÄNE,DC=TLD
Dort ist voreingestellt, dass der CN aus Nachname, Vorname erstellt wird, wobei das "," dann mit einem "\" maskiert wird. Ich möchte ungern das bestehende AD hier in der Konfiguration des DisplayName / CN ändern, weil ich nicht sicher bin, ob das nicht wiederum Seiteneffekte auf weitere Anwendungen hat, die ebenfalls auf das AD zugreifen.
An sich ist das bis hierher auch noch kein Problem, znuny-OTRS macht daraus aber leider noch eine weitere Umwandlung der Strings, so dass aus dem AD-CN "CN=schul15\, test,OU=Benutzer,DC=DOMÄNE,DC=TLD" innerhalb von znuny-OTRS ein "CN=schul15\5c, test,OU=Benutzer,DC=DOMÄNE,DC=TLD" wird, was einen Match gegen AD-Gruppen zum Scheitern verurteilt.
Zusätzlich haben wir auch Namen mit Umlauten, die ebenfalls von znuny-OTRS bearbeitet werden - so wird ein ö zu "ö.
Kann man das znung-OTRS irgendwie abgewöhnen - meinetwegen auch in einer der Quelldateien?
Oder für die Suche im AD statt des CN bspw. den userPrincipalName oder sAMAccountName des Users heranziehen?
Wir setzen OTRS-Version 6.0.34 ein.
Vielen Dank im Voraus.
Viele Grüße,
Udo
-
- Znuny guru
- Posts: 5018
- Joined: 13 Mar 2011, 09:54
- Znuny Version: 6.0.x
- Real Name: Renée Bäcker
- Company: Perl-Services.de
- Contact:
Re: Authorisierung mit LDAP
Kannst Du die Config dazu zeigen (Zugangsdaten etc. bitte anonymisieren)? Ist der Charset richtig eingestellt?
Perl / Znuny development: http://perl-services.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
Free Znuny add ons from the community: http://opar.perl-services.de
Commercial add ons: http://feature-addons.de
-
- Znuny newbie
- Posts: 6
- Joined: 26 Apr 2021, 09:19
- Znuny Version: 6.0.34
- Real Name: Udo Schleucher
- Company: Bundespatentgericht
Re: Authorisierung mit LDAP
Hier meine Konfig (Charset ist eingetragen - allerdings nur für Customer - wo wäre denn die richtige Stelle für Agents?):
Wie schon beschrieben, die Authentizierung funktioniert einwandfrei ...
Ich korrigiere: Ich habe gerade noch einmal einen Testuser ("Nüßlein, Rösi")mit mehreren Umlauten angelegt - znuny-OTRS kann den User schon gar nicht anlegen(auch nicht "Kundenbenutzer"):
Code: Select all
package Kernel::Config;
use strict;
use warnings;
use utf8;
sub Load {
my $Self = shift;
# ---------------------------------------------------- #
# database settings #
# ---------------------------------------------------- #
# The database host
$Self->{'DatabaseHost'} = '[DB-SERVER]';
# The database name
$Self->{'Database'} = "znuny-test";
# The database user
$Self->{'DatabaseUser'} = "[Name]";
# The password of database user. You also can use bin/otrs.Console.pl Maint::Database::PasswordCrypt
# for crypted passwords
$Self->{'DatabasePw'} = '[Pwd]';
# The database DSN for MySQL ==> more: "perldoc DBD::mysql"
$Self->{'DatabaseDSN'} = "DBI:mysql:database=$Self->{Database};host=$Self->{DatabaseHost}";
# The database DSN for PostgreSQL ==> more: "perldoc DBD::Pg"
# if you want to use a local socket connection
# $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};";
# if you want to use a TCP/IP connection
# $Self->{DatabaseDSN} = "DBI:Pg:dbname=$Self->{Database};host=$Self->{DatabaseHost};";
# The database DSN for Microsoft SQL Server - only supported if OTRS is
# installed on Windows as well
# $Self->{DatabaseDSN} = "DBI:ODBC:driver={SQL Server};Database=$Self->{Database};Server=$Self->{DatabaseHost},1433";
# The database DSN for Oracle ==> more: "perldoc DBD::oracle"
# $Self->{DatabaseDSN} = "DBI:Oracle://$Self->{DatabaseHost}:1521/$Self->{Database}";
#
# $ENV{ORACLE_HOME} = '/path/to/your/oracle';
# $ENV{NLS_DATE_FORMAT} = 'YYYY-MM-DD HH24:MI:SS';
# $ENV{NLS_LANG} = 'AMERICAN_AMERICA.AL32UTF8';
# ---------------------------------------------------- #
# fs root directory
# ---------------------------------------------------- #
$Self->{Home} = '/opt/otrs';
# ---------------------------------------------------- #
# insert your own config settings "here" #
# config settings taken from Kernel/Config/Defaults.pm #
# ---------------------------------------------------- #
# $Self->{SessionUseCookie} = 0;
# $Self->{CheckMXRecord} = 0;
############## SingleSignOn SSO ###########################
$Self->{'AuthModule'} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} ='@BPATG.INT';
############## SingleSignOn SSO - ENDE ####################
############## Agenten-Login ##############################
$Self->{'AuthModule::LDAP::GroupDN'} = 'CN=[ADGruppe],OU=[Groups],DC=[DOM],DC=[TLD]';
#for ldap posixGroups objectclass (just uid)
# $Self->{'AuthModule::LDAP::UserAttr'} = 'UID';
# for non ldap posixGroups objectclass (with full user dn)
$Self->{'AuthModule::LDAP::UserAttr'} = 'DN';
# $Self->{'AuthModule::LDAP::UserAttr'} = 'sAMAccountName';
# The following is valid but would only be necessary if the
# anonymous user do NOT have permission to read from the LDAP tree
$Self->{'AuthModule::LDAP::SearchUserDN'} = '[Benutzer]@[DOM]';
$Self->{'AuthModule::LDAP::SearchUserPw'} = '[Pwd]';
# in case you want to add always one filter to each ldap query, use
# this option. e. g. AlwaysFilter => '(mail=*)' or AlwaysFilter => '(objectclass=user)'
$Self->{'AuthModule::LDAP::AlwaysFilter'} = '(&(mail=*)(objectclass=user))';
##$Self->{'AuthModule::LDAP::AlwaysFilter'} = '((objectclass=user))';
# in case you want to add a suffix to each login name, then
# you can use this option. e. g. user just want to use user but
# in your ldap directory exists user@domain.
# $Self->{'AuthModule::LDAP::UserSuffix'} = '@[Dom]';
# Net::LDAP new params (if needed - for more info see perldoc Net::LDAP)
$Self->{'AuthModule::LDAP::Params'} = {
port => 389,
timeout => 120,
async => 0,
version => 3,
};
# agent data sync against ldap
$Self->{'AuthSyncModule'} = 'Kernel::System::Auth::Sync::LDAP';
$Self->{'AuthSyncModule::LDAP::Host'} = '[SERVER]';
$Self->{'AuthSyncModule::LDAP::BaseDN'} = '[BaseDN]';
$Self->{'AuthSyncModule::LDAP::UID'} = 'sAMAccountName';
$Self->{'AuthSyncModule::LDAP::SearchUserDN'} = '[User]';
$Self->{'AuthSyncModule::LDAP::SearchUserPw'} = '[Pwd]';
$Self->{'AuthSyncModule::LDAP::UserSyncMap'} = {
# DB -> LDAP
UserFirstname => 'givenName',
UserLastname => 'sn',
UserEmail => 'mail',
};
# AuthSyncModule::LDAP::UserSyncInitialGroups
# (sync following group with rw permission after initial create of first agent
# login)
$Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [
'users',
];
# Zuweisen von OTRS-Rollen auf Basis der LDAP-Gruppen
# AuthSyncModule::LDAP::UserSyncRolesDefinition
# (If "LDAP" was selected for AuthModule and you want to sync LDAP
# groups to otrs roles, define the following.)
$Self->{'AuthSyncModule::LDAP::UserSyncRolesDefinition'} = {
# ldap group
'CN=ACN=[ADGruppe1],OU=[Groups],DC=[DOM],DC=[TLD]' => {
# otrs role
'Anwenderbetreuer' => 1,
},
'CN=CN=[ADGruppe2],OU=[Groups],DC=[DOM],DC=[TLD]' => {
'admin' => 1,
}
};
# alternatives Anmeldemodul: Datenbank! (dann aber nur mit den in der DB enthaltenen Einträgen)
$Self->{'AuthModule2'} = 'Kernel::System::Auth::DB';
$Self->{'AuthModule::DB::CryptType2'} = 'crypt';
$Self->{LoginURL} = 'https://SERVER/otrs/public.pl';
$Self->{LogoutURL} = 'https://SERVER.bpatg.int/otrs/index.pl';
################# /Agenten #############################
################## Customers ############################
# CustomerUser
# (customer user ldap backend and settings)
$Self->{CustomerUser} = {
Name => 'ActiveDirectory',
Module => 'Kernel::System::CustomerUser::LDAP',
Params => {
# ldap host
Host => '[Server]',
# ldap base dn
BaseDN => '[BaseDN]',
# 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 => '[Benutzer]',
UserPw => '[Pwd]',
# 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 => '',
# 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 => 'utf-8',
# Net::LDAP new params (if needed - for more info see perldoc Net::LDAP)
Params => {
port => 389,
timeout => 120,
async => 0,
version => 3,
},
},
# ustomer uniq id
CustomerKey => 'sAMAccountName',
# customer #
CustomerID => 'mail',
CustomerUserListFields => ['givenname', 'sn', 'mail'],
CustomerUserSearchFields => ['sn', 'cn', 'mail', 'givenname'],
CustomerUserSearchPrefix => '*',
CustomerUserSearchSuffix => '*',
CustomerUserSearchListLimit => 400,
CustomerUserPostMasterSearchFields => ['mail'],
CustomerUserNameFields => ['givenname', 'sn'],
# show not own tickets in customer panel, CompanyTickets
CustomerUserExcludePrimaryCustomerID => 0,
# add a ldap filter for valid users (expert setting)
CustomerUserValidFilter => '(&(mail=*)(objectclass=person))',
# admin can't change customer preferences
AdminSetPreferences => 0,
# # cache time to life in sec. - cache any database queris
# CacheTTL => 0,
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', '', 0 ],
[ 'UserFirstname', 'Firstname', 'givenname', 1, 1, 'var', '', 0 ],
[ 'UserLastname', 'Lastname', 'sn', 1, 1, 'var', '', 0 ],
[ 'UserLogin', 'Username', 'sAMAccountName', 1, 1, 'var', '', 0 ],
[ 'UserEmail', 'Email', 'mail', 1, 1, 'var', '', 0 ],
[ 'UserCustomerID', 'CustomerID', 'mail', 0, 1, 'var', '', 0 ],
# [ 'UserCustomerIDs', 'CustomerIDs', 'second_customer_ids', 1, 0, 'var', '', 0 ],
[ 'UserPhone', 'Phone', 'telephonenumber', 1, 0, 'var', '', 0 ],
[ 'UserAddress', 'Address', 'postaladdress', 1, 0, 'var', '', 0 ],
[ 'UserComment', 'Comment', 'description', 1, 0, 'var', '', 0 ],
[ 'UserRoom', 'Raum-Nummer', 'roomnumber', 1, 0, 'var', '', 0 ],
],
};
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::HTTPBasicAuth';
$Self->{'Customer::AuthModule::HTTPBasicAuth::ReplaceRegExp'} ='@[DOM]';
$Self->{CustomerPanelLoginURL} = 'https://SERVER.bpatg.int/otrs/public.pl';
$Self->{CustomerPanelLogoutURL} = 'https://SERVER.bpatg.int/otrs/customer.pl';
################# /Customers ###########################
############### Proxy #########################
$Self->{'WebUserAgent::Proxy'} = '[Proxy]:[Port]';
################# /Proxy ########################
# ---------------------------------------------------- #
# ---------------------------------------------------- #
# data inserted by installer #
# ---------------------------------------------------- #
# $DIBI$
# ---------------------------------------------------- #
# ---------------------------------------------------- #
# #
# end of your own config options!!! #
# #
# ---------------------------------------------------- #
# ---------------------------------------------------- #
return 1;
}
# ---------------------------------------------------- #
# needed system stuff (don't edit this) #
# ---------------------------------------------------- #
use Kernel::Config::Defaults; # import Translatable()
use parent qw(Kernel::Config::Defaults);
# -----------------------------------------------------#
1;
Ich korrigiere: Ich habe gerade noch einmal einen Testuser ("Nüßlein, Rösi")mit mehreren Umlauten angelegt - znuny-OTRS kann den User schon gar nicht anlegen(auch nicht "Kundenbenutzer"):
Code: Select all
Can't create user 'nuesslein' (CN=NüÃlein\, Rösi,OU=Testuser,OU=[UserOU],DC=[DOM],DC=[TLD]) in RDBMS!
-
- Administrator
- Posts: 3968
- Joined: 18 Dec 2007, 12:23
- Znuny Version: Znuny and Znuny LTS
- Real Name: Roy Kaldung
- Company: Znuny
- Contact:
Re: Authorisierung mit LDAP
Hi,USchleucher wrote: ↑29 Nov 2021, 09:42
Ich korrigiere: Ich habe gerade noch einmal einen Testuser ("Nüßlein, Rösi")mit mehreren Umlauten angelegt - znuny-OTRS kann den User schon gar nicht anlegen(auch nicht "Kundenbenutzer"):
Code: Select all
Can't create user 'nuesslein' (CN=NüÃlein\, Rösi,OU=Testuser,OU=[UserOU],DC=[DOM],DC=[TLD]) in RDBMS!
hat denn Testuser auch Werte in den Attribute Vorname, Nachname, Login und E-Mail?
- Roy
Znuny and Znuny LTS running on CentOS / RHEL / Debian / SLES / MySQL / PostgreSQL / Oracle / OpenLDAP / Active Directory / SSO
Use a test system - always.
Do you need professional services? Check out https://www.znuny.com/
Do you want to contribute or want to know where it goes ?
Use a test system - always.
Do you need professional services? Check out https://www.znuny.com/
Do you want to contribute or want to know where it goes ?
-
- Znuny newbie
- Posts: 6
- Joined: 26 Apr 2021, 09:19
- Znuny Version: 6.0.34
- Real Name: Udo Schleucher
- Company: Bundespatentgericht
Re: Authorisierung mit LDAP
.... ja, klar .... nehme meine "Korrektur" wieder zurück .... natürlich hat die Mailadresse zum Testuser gefehlt ....
es bleibt damit beim Authorisierungs-Problem der Agent-Seite index.pl
es bleibt damit beim Authorisierungs-Problem der Agent-Seite index.pl
Code: Select all
User: nuesslein not in GroupDN='CN=[ADGruppe1],OU=[Groups],DC=[DOM],DC=[TLD]', Filter='(memberUid=CN=NüÃlein\5c, Rösi,OU=Testuser,OU=[UserOU],DC=[DOM],DC=[TLD])'! (REMOTE_ADDR: [IP]).
Mon Nov 29 13:24:40 2021 (Europe/Berlin) notice OTRS-CGI-38 User: nuesslein not in GroupDN='CN=[ADGruppe2],OU=[Groups],DC=[DOM],DC=[TLD]', Filter='(memberUid=CN=NüÃlein\5c, Rösi,OU=Testuser,OU=[UserOU],DC=[DOM],DC=[TLD])'! (REMOTE_ADDR: [IP).
Mon Nov 29 13:24:40 2021 (Europe/Berlin) notice OTRS-CGI-38 Initial data for 'nuesslein' (CN=NüÃlein\, Rösi,OU=Testuser,OU=[UserOU],DC=[DOM],DC=[TLD]) created in RDBMS.
-
- Administrator
- Posts: 3968
- Joined: 18 Dec 2007, 12:23
- Znuny Version: Znuny and Znuny LTS
- Real Name: Roy Kaldung
- Company: Znuny
- Contact:
Re: Authorisierung mit LDAP
Hi,
dann stellt sich mir die nächste Frage: woher kommt das memberUid in dem Filter? Ich vermute aus der Default-Einstellung.
Schreibe doch mal in Deine Config.pm, also bei den anderen AuthSyncModule Einstellungen
- Roy
dann stellt sich mir die nächste Frage: woher kommt das memberUid in dem Filter? Ich vermute aus der Default-Einstellung.
Schreibe doch mal in Deine Config.pm, also bei den anderen AuthSyncModule Einstellungen
Code: Select all
$Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member:1.2.840.113556.1.4.1941:';
$Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN';
Znuny and Znuny LTS running on CentOS / RHEL / Debian / SLES / MySQL / PostgreSQL / Oracle / OpenLDAP / Active Directory / SSO
Use a test system - always.
Do you need professional services? Check out https://www.znuny.com/
Do you want to contribute or want to know where it goes ?
Use a test system - always.
Do you need professional services? Check out https://www.znuny.com/
Do you want to contribute or want to know where it goes ?
-
- Znuny newbie
- Posts: 6
- Joined: 26 Apr 2021, 09:19
- Znuny Version: 6.0.34
- Real Name: Udo Schleucher
- Company: Bundespatentgericht
Re: Authorisierung mit LDAP
Herzlichen Dank!!!!
Super! Das war's .... wenn ich noch blöd fragen darf: Was bewirkt $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member:1.2.840.113556.1.4.1941:';?
Super! Das war's .... wenn ich noch blöd fragen darf: Was bewirkt $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member:1.2.840.113556.1.4.1941:';?
-
- Administrator
- Posts: 3968
- Joined: 18 Dec 2007, 12:23
- Znuny Version: Znuny and Znuny LTS
- Real Name: Roy Kaldung
- Company: Znuny
- Contact:
Re: Authorisierung mit LDAP
Hi,USchleucher wrote: ↑29 Nov 2021, 16:34 Herzlichen Dank!!!!
Super! Das war's .... wenn ich noch blöd fragen darf: Was bewirkt $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member:1.2.840.113556.1.4.1941:';?
member würde ausreichen, der Zusatz bewirkt das der Domain Controller auch rekursiv sucht, sprich verschachtelte Gruppen.
- Roy
Znuny and Znuny LTS running on CentOS / RHEL / Debian / SLES / MySQL / PostgreSQL / Oracle / OpenLDAP / Active Directory / SSO
Use a test system - always.
Do you need professional services? Check out https://www.znuny.com/
Do you want to contribute or want to know where it goes ?
Use a test system - always.
Do you need professional services? Check out https://www.znuny.com/
Do you want to contribute or want to know where it goes ?
-
- Znuny newbie
- Posts: 6
- Joined: 26 Apr 2021, 09:19
- Znuny Version: 6.0.34
- Real Name: Udo Schleucher
- Company: Bundespatentgericht
Re: Authorisierung mit LDAP
Danke für den Hinweis.
Dennoch ein seltsames Verhalten, da beide Gruppen nicht nested sind - die Benutzer sind direkt Mitglied - aber egal: Es funktioniert!
Dennoch ein seltsames Verhalten, da beide Gruppen nicht nested sind - die Benutzer sind direkt Mitglied - aber egal: Es funktioniert!
-
- Administrator
- Posts: 3968
- Joined: 18 Dec 2007, 12:23
- Znuny Version: Znuny and Znuny LTS
- Real Name: Roy Kaldung
- Company: Znuny
- Contact:
Re: Authorisierung mit LDAP
Das ist nicht seltsam. Vorher war es memberUid und das ist eher für OpenLDAP gedacht. Bei einem Active Directory braucht's member, optional mit dem Zusatz den ich verwendet habe.USchleucher wrote: ↑29 Nov 2021, 16:41 Danke für den Hinweis.
Dennoch ein seltsames Verhalten, da beide Gruppen nicht nested sind - die Benutzer sind direkt Mitglied - aber egal: Es funktioniert!
- Roy
Znuny and Znuny LTS running on CentOS / RHEL / Debian / SLES / MySQL / PostgreSQL / Oracle / OpenLDAP / Active Directory / SSO
Use a test system - always.
Do you need professional services? Check out https://www.znuny.com/
Do you want to contribute or want to know where it goes ?
Use a test system - always.
Do you need professional services? Check out https://www.znuny.com/
Do you want to contribute or want to know where it goes ?
-
- Znuny newbie
- Posts: 6
- Joined: 26 Apr 2021, 09:19
- Znuny Version: 6.0.34
- Real Name: Udo Schleucher
- Company: Bundespatentgericht
Re: Authorisierung mit LDAP
Danke, jetzt hab ich's kapiert.