Ansicht von 8 Antwort-Themen
  • Autor
    Beiträge
    • #15623
      Bernhard Bergmann
      Teilnehmer

        Moin,

        ich versuche gerade eine Docker-Installation zu realisieren, die Kerberos nutzt, um sich an einem AD zu authentifizieren.

        Die Installation soll allerdings ausschließlich intern genutzt werden und das auch von nicht Domänen-Mitgliedern, daher ist reines HTTP gewünscht.

        Ich habe daher die ENV-Vorlage HTTPS_Kerberos gewählt und in der CUSTOM_NGINX den Redirect entfernt. Das scheint aber leider keinerlei Auswirkungen zu haben, es wird immer noch von HTTP auf HTTPs umgeleitet.

        Wie kann ich wohl in der Konfiguration den Redirect korrekt deaktivieren ?

        Gruß und Danke

      • #15625
        marcel-graf
        Teilnehmer

          Hallo Bernhard Bergmann,

          nach der Anleitung sollte alles laufen. Punkt 4 kann dabei übersprungen werden

          https://doc.otobo.de/manual/installation/10.1/de/content/installation-docker.html

          Schau mal in den folgenden Post, da habe ich eine Install Anleitung verfasst.

          https://otobo.io/de/forums/topic/docker-installation-nicht-moeglich/#post-15125 da ist eine

          Die AD Authentifizierung für Agenten bzw. Customer, wurde auch bereits im Forum beschrieben.

          Gruß Marcel

        • #15626
          Bernhard Bergmann
          Teilnehmer

            Hallo Marcel,

            erstmal vielen Dank für die schnelle Antwort.

            Die Anleitung habe ich für die erste Installation genutzt, lief auch einwandfrei, nur HTTP.

            Dann wollte ich die AD Anbindung machen, die Anleitung dazu habe ich auch gefunden (https://doc.otobo.de/manual/installation/10.1/de/content/sso-kerberos.html), nur da scheint dann HTTPs die Grundlage zu sein, es findet sich ja auch keine ENV-Vorlage für HTTP und Kerberos. Und damit kam dann der Redirect von HTTP auf HTTPs ins Spiel.

             

          • #15627
            marcel-graf
            Teilnehmer

              Per LDAP, da intern, ist keine Lösung?

              Gruß Marcel

            • #15628
              marcel-graf
              Teilnehmer

                In der Anleitung oder Hier mal nach LDAP bzw Agenten-Authentifizierungs-Backend suchen.

                Agenten-Authentifizierungs-Backend
                Die Tabelle users enthält standardmäßig Ihre Agentendaten. Sie können einen Verzeichnis-Server (LDAP/Active Directory) zur Authentifizierung an Ihre Installation anhängen. Um dies zu erreichen, kopieren Sie den folgenden Block aus der Defaults.pm und fügen ihn in die Config.pm ein.

                Um dies zu erreichen per SSH (putty) auf dem Server einloggen und die Datei editieren.

                sudo docker exec -it otobo_web_1 bash

                cd /opt/otobo/Kernel

                mit dem Editor vi oder nano die Datei Config.pm bearbeiten

                Gruß Marcel

              • #15639
                Bernhard Bergmann
                Teilnehmer

                  Hallo Marcel,

                  vielen Dank für Deinen Input. Kerberos legen wir zu den Akten, ich habe es heute mal mit der LDAP-Variante versucht. Funktioniert leider auch nicht so auf Anhieb.

                  ich bekomme ständig im Log des Web-Containers einen „AcceptSecurityContext error, data 52e“ und habe bereits in der Config.pm diverse Schreibweisen des Benutzernamens ausprobiert.

                  Auch wird nach der Anpassung der Config.pm die lokale Anmeldung unterbunden, dazu habe ich auf die Schnelle aber leider auch nichts gefunden, um das parallel zu ermöglichen.

                  • #15647
                    Stefan Abel
                    Moderator

                      Hallo,

                      bei 52e klingelt bei mir „First bind failed“, was eigentlich immer bedeutet, dass der SearchUser fehlt, oder Benutzername/Passwort falsch ist.

                      Viele Grüße
                      Stefan

                  • #15640
                    marcel-graf
                    Teilnehmer

                      Hallo Bernhard,

                      hier mal meine Testdatei. Haben aber aktuell kein Ldap angebunden.

                       

                      ###############################################################################################
                      # LDAP Anbindung Anfang #
                      ###############################################################################################

                      ###########################################
                      # Customer User LDAP Backend and Settings #
                      ###########################################

                      $Self->{CustomerUser1} = {
                      Module => ‚Kernel::System::CustomerUser::LDAP‘,
                      Params => {
                      #Host => ‚ldaps://ad-server.domain.local‘,
                      Host => ‚ldap://ldap-host‘,
                      BaseDN => ‚DC=standort,DC=int‘,
                      SSCOPE => ’sub‘,
                      #UserDN => ‚cn=otrs user, ou=User_Special, dc=domain, dc=local‘,
                      UserDN => ‚CN=ldap-user,OU=Service_Accounts,OU=User,OU=IT,OU=Site01,DC=standort,DC=int‘,
                      UserPw => ‚ldap-kennwort‘,
                      #AlwaysFilter => ‚(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(mail=*)(sn=*)(givenname=*)(!(givenname=\00)))‘,
                      # this option. e. g. AlwaysFilter => ‚(mail=*)‘ or AlwaysFilter => ‚(objectclass=user)‘
                      #AlwaysFilter => ‚(objectclass=user)(mail=*)‘,
                      AlwaysFilter => ‚(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(mail=*)(sn=*)(givenname=*)(!(givenname=\00)))‘
                      SourceCharset => ‚utf-8‘,
                      DestCharset => ‚utf-8‘,
                      Params => {
                      # sslversion => ‚tlsv1_2′,
                      #},
                      port => 389,
                      timeout => 120,
                      async => 0,
                      version => 3,
                      },
                      },
                      CustomerKey => ’sAMAccountName‘,
                      CustomerID => ‚mail‘,
                      CustomerUserListFields => [‚cn‘, ‚mail‘],
                      CustomerUserSearchFields => [’sAMAccountName‘, ‚cn‘, ‚mail‘, ’sn‘, ‚mobile‘, ‚telephonenumber‘],
                      CustomerUserPostMasterSearchFields => [‚mail‘],
                      CustomerUserNameFields => [‚givenname‘, ’sn‘],
                      # CacheTTL => 1200,
                      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‘ ],
                      [ ‚UserMobile‘, ‚Mobile‘, ‚mobile‘, 1, 0, ‚var‘ ],
                      [ ‚UserAddress‘, ‚Address‘, ‚postaladdress‘, 1, 0, ‚var‘ ],
                      ],
                      };

                      #################################################################################################
                      # —————————————————- #
                      # LDAP AUTH #
                      # —————————————————- #

                      # LDAP Backend
                      $Self->{AuthModule} = ‚Kernel::System::Auth::LDAP‘;
                      $Self->{‚AuthModule::LDAP::Host‘} = ‚ldap://ldap-host‘;
                      $Self->{‚AuthModule::LDAP::BaseDN‘} = ‚DC=standort,DC=int‘;
                      $Self->{‚AuthModule::LDAP::UID‘} = ’samaccountname‘;

                      # Check if the user is allowed to auth in a posixGroup
                      $Self->{‚AuthModule::LDAP::GroupDN‘} = ‚CN=OtoboHelpdeskAgents,OU=FU_Groups,OU=Groups,OU=IT,OU=Site01,DC=standort,DC=int‘;
                      $Self->{‚AuthModule::LDAP::AccessAttr‘} = ‚member‘;
                      $Self->{‚AuthModule::LDAP::UserAttr‘} = ‚DN‘;
                      $Self->{‚AuthModule::LDAP::SearchUserDN‘} = ‚CN=ldap-user,OU=Service_Accounts,OU=User,OU=IT,OU=Site01,DC=standort,DC=int‘;
                      $Self->{‚AuthModule::LDAP::SearchUserPw‘} = ‚ldap-kennwort‘;

                      # ————————————————— #
                      # Authentication sync settings #
                      # (enable agent data sync. after succsessful #
                      # authentication) #
                      # ————————————————— #
                      # (take care that Net::LDAP is installed!)
                      $Self->{AuthSyncModule} = ‚Kernel::System::Auth::Sync::LDAP‘;
                      $Self->{‚AuthSyncModule::LDAP::Host‘} = ‚ldap://ldap-host‘;
                      $Self->{‚AuthSyncModule::LDAP::BaseDN‘} = ‚DC=standort,DC=int‘;
                      $Self->{‚AuthSyncModule::LDAP::UID‘} = ’samaccountname‘;
                      $Self->{‚AuthSyncModule::LDAP::SearchUserDN‘} = ‚CN=ldap-user,OU=Service_Accounts,OU=User,OU=IT,OU=Site01,DC=standort,DC=int‘;
                      $Self->{‚AuthSyncModule::LDAP::SearchUserPw‘} = ‚ldap-kennwort‘;
                      $Self->{‚AuthSyncModule::LDAP::UserSyncMap‘} = {
                      # DB -> LDAP
                      UserFirstname => ‚givenName‘,
                      UserLastname => ’sn‘,
                      UserEmail => ‚mail‘,
                      UserLogin => ’sAMAccountName‘
                      };

                      # Net::LDAP new params
                      $Self->{‚AuthSyncModule::LDAP::Params‘} = {
                      port => 389,
                      timeout => 120,
                      async => 0,
                      version => 3,
                      };

                      $Self->{‚AuthSyncModule::LDAP::AccessAttr‘} = ‚member‘;
                      $Self->{‚AuthSyncModule::LDAP::UserAttr‘} = ‚DN‘;

                      # Sync LDAP groups to OTOBO groups
                      $Self->{‚AuthSyncModule::LDAP::UserSyncGroupsDefinition‘} = {
                      # ldap group
                      ‚CN=OtoboHelpdeskAgents,OU=FU_Groups,OU=Groups,OU=IT,OU=Site01,DC=standort,DC=int‘ => {
                      # otrs group
                      ‚admin‘ => {
                      # permission
                      rw => 1,
                      ro => 1,
                      },
                      ‚faq‘ => {
                      rw => 0,
                      ro => 1,
                      },
                      },
                      ‚CN=OtoboHelpdeskCustomers,OU=FU_Groups,OU=Groups,OU=IT,OU=Site01,DC=standort,DC=int‘ => {
                      ‚users‘ => {
                      rw => 1,
                      ro => 1,
                      },
                      }
                      };

                      ####################################
                      # Customer authentication settings #
                      ####################################

                      $Self->{‚Customer::AuthModule‘} = ‚Kernel::System::CustomerAuth::LDAP‘;
                      $Self->{‚Customer::AuthModule::LDAP::Host‘} = ‚ldap://ldap-host‘;
                      $Self->{‚Customer::AuthModule::LDAP::BaseDN‘} = ‚DC=standort,DC=int‘;
                      $Self->{‚Customer::AuthModule::LDAP::UID‘} = ’samaccountname‘;

                      # Check if the user is allowed to auth in a posixGroup
                      $Self->{‚Customer::AuthModule::LDAP::GroupDN‘} = ‚CN=OtoboHelpdeskCustomers,OU=FU_Groups,OU=Groups,OU=IT,OU=Site01,DC=standort,DC=int‘;
                      $Self->{‚Customer::AuthModule::LDAP::AccessAttr‘} = ‚member‘;

                      $Self->{‚Customer::AuthModule::LDAP::SearchUserDN‘} = ‚CN=ldap-user,OU=Service_Accounts,OU=User,OU=IT,OU=Site01,DC=standort,DC=int‘;
                      $Self->{‚Customer::AuthModule::LDAP::SearchUserPw‘} = ‚ldap-kennwort‘;
                      $Self->{‚Customer::AuthModule::LDAP::Params‘} = {
                      port => 389,
                      timeout => 120,
                      async => 0,
                      version => 3,
                      };

                      $Self->{CustomerUser} = {
                      Name => ‚LDAP Backend‘,
                      Module => ‚Kernel::System::CustomerUser::LDAP‘,
                      Params => {
                      Host => ‚ldap://ldap-host‘,
                      BaseDN => ‚DC=standort,DC=int‘,
                      SSCOPE => ’sub‘,
                      UserDN => ‚CN=ldap-user,OU=Service_Accounts,OU=User,OU=IT,OU=Site01,DC=standort,DC=int‘,
                      UserPw => ‚ldap-kennwort‘,
                      AlwaysFilter => “,
                      },

                      CustomerKey => ’sAMAccountName‘,
                      CustomerID => ‚mail‘,
                      CustomerUserListFields => [’sAMAccountName‘, ‚cn‘, ‚mail‘],
                      CustomerUserSearchFields => [’sAMAccountName‘, ‚cn‘, ‚mail‘],
                      CustomerUserPostMasterSearchFields => [‚mail‘],
                      CustomerUserNameFields => [‚givenname‘, ’sn‘],
                      CustomerUserSearchListLimit => 1000,

                      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‘ ],
                      ],
                      };

                       

                      # UserTable
                      $Self->{DatabaseUserTable} = ‚users‘;
                      $Self->{DatabaseUserTableUserID} = ‚id‘;
                      $Self->{DatabaseUserTableUserPW} = ‚pw‘;
                      $Self->{DatabaseUserTableUser} = ‚login‘;

                      # —————————————————- #
                      # End LDAP Auth #
                      # —————————————————- #

                      #################################################################################################
                      # LDAP Anbindung Ende
                      #################################################################################################

                      Gruß Marcel

                    • #15657
                      Bernhard Bergmann
                      Teilnehmer

                        Vielen vielen Dank für die ganzen Hinweise und Hilfestellungen. Hab das System nochmal komplett neu aufgesetzt und alles von vorne konfiguriert.

                        Inzwischen kann ich mich mit einem AD-Benutzer als Agent anmelden.

                        Bei der CustomerUser-LDAP (AD) – Anbindung habe ich aber jetzt noch ein Mapping-Problem, wo ich keine Lösung finde. Ich habe einen Kunden angelegt mit KdNr 10000 und einen Benutzer zu diesem Kunden erstellt.

                        der Login scheint auch zu funktionieren, denn ich bekomme die Meldung, dass die Authentifizierung erfolgreich war, aber kein Benutzer in der Datenbank gefunden wurde. Ich vermute hier also ein Mapping-Problem zum manuell erstellten Kunden-Benutzer.

                        Wie bekomme ich es hin, dass die authentifizierten Benutzer aus der LDAP/AD-Anbindung immer dem Kunden 10000 zugeordnet werden ?

                        # customer unique id
                        CustomerKey => ’sAMAccountname‘,
                        # customer #
                        CustomerID => ‚mail‘, #habe hier auch mal 10000 versucht, ändert leider nichts
                        CustomerUserListFields => [’sAMAccountname‘, ‚cn‘, ‚mail‘],
                        CustomerUserSearchFields => [’sAMAccountname‘, ‚cn‘, ‚mail‘],
                        CustomerUserSearchPrefix => “,
                        CustomerUserSearchSuffix => ‚*‘,
                        CustomerUserSearchListLimit => 250,
                        CustomerUserPostMasterSearchFields => [‚mail‘],
                        CustomerUserNameFields => [‚givenname‘, ’sn‘],
                        # Configures the character for joining customer user name parts. Join single space if it is not defined.
                        CustomerUserNameFieldsJoin => “,
                        # show customer user and customer tickets in the external interface
                        CustomerUserExcludePrimaryCustomerID => 0,
                        # add a ldap filter for valid users (expert setting)
                        # # CustomerUserValidFilter => ‚(!(description=gesperrt))‘,
                        # admin can’t change customer preferences
                        AdminSetPreferences => 0,
                        # cache time to live in sec. – cache any ldap queries
                        # CacheTTL => 0,
                        CustomerCompanySupport => 1,
                        Map => [
                        # note: Login, Email and CustomerID needed!
                        # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target, link class(es)
                        [ ‚UserTitle‘, Translatable(‚Title or salutation‘), ‚title‘, 1, 0, ‚var‘, “, 1, undef, undef ],
                        [ ‚UserFirstname‘, Translatable(‚Firstname‘), ‚givenname‘, 1, 1, ‚var‘, “, 1, undef, undef ],
                        [ ‚UserLastname‘, Translatable(‚Lastname‘), ’sn‘, 1, 1, ‚var‘, “, 1, undef, undef ],
                        [ ‚UserLogin‘, Translatable(‚Username‘), ’sAMAccountname‘, 1, 1, ‚var‘, “, 1, undef, undef ],
                        [ ‚UserEmail‘, Translatable(‚Email‘), ‚mail‘, 1, 1, ‚var‘, “, 1, undef, undef ],
                        [ ‚UserCustomerID‘, Translatable(‚CustomerID‘), ‚mail‘, 0, 1, ‚var‘, “, 1, undef, undef ],
                        # [ ‚UserCustomerIDs‘, Translatable(‚CustomerIDs‘), ’second_customer_ids‘, 1, 0, ‚var‘, “, 1, undef, undef ],
                        [ ‚UserPhone‘, Translatable(‚Phone‘), ‚telephonenumber‘, 1, 0, ‚var‘, “, 1, undef, undef ],
                        [ ‚UserAddress‘, Translatable(‚Address‘), ‚postaladdress‘, 1, 0, ‚var‘, “, 1, undef, undef ],
                        [ ‚UserComment‘, Translatable(‚Comment‘), ‚description‘, 1, 0, ‚var‘, “, 1, undef, undef ],

                        # this is needed, if „SMIME::FetchFromCustomer“ is active
                        # [ ‚UserSMIMECertificate‘, ‚SMIMECertificate‘, ‚userSMIMECertificate‘, 0, 1, ‚var‘, “, 1, undef, undef ],

                        # Dynamic field example
                        # [ ‚DynamicField_Name_X‘, undef, ‚Name_X‘, 0, 0, ‚dynamic_field‘, undef, 0, undef, undef ],
                        ],
                        };

                      • #15658
                        marcel-graf
                        Teilnehmer

                          Hallo Berhard,

                          hast du mal Probiert, bei dem Abschnitt „Map => [“ auch mal anstatt mail die deine Kundennummer „10000“ zu setzten.

                          Gruß Marcel

                      Ansicht von 8 Antwort-Themen
                      • Du musst angemeldet sein, um auf dieses Thema antworten zu können.