Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:apache_tomcat_6_-_ldap-authentifizierung_jndirealm

Apache Tomcat 6 - LDAP-Authentifizierung JNDIRealm

Apache Tomcat stellt eine Umgebung zur Ausführung von Java-Code für Web-Server bereit. Es handelt sich um einen Servlet-Container, der mithilfe des JSP-Compilers Jasper JavaServer Pages in Servlets übersetzen und ausführt. Zusätzlich ist ein kompletter HTTP-Server integriert.

Die Nutzung einer Datei zur Authentifizierung von Benutzer, welche standardmäßig

  • /etc/tomcat6/tomcat-users.xml

ist, soll hier deaktiviert werden, um gegen einen

  • LDAP-Server

zu authentifizieren.

Konfiguration: Tomcat

Nachfolgende Stellen innerhalb der Konfigurationsdatei des Apache Tomcat 6-Application Servers müssen daher auskommentiert bzw. ergänzt werden.

/etc/tomcat6/server.xml

Nachfolgende Stellen in der Konfigurationsdatei sollten nur auskommentiert werden, wie nachfolgend dargestellt (nur relevante Ausschnitte):

...
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <!-- Tachtler - DISABLED - -->
    <!-- <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
    -->
  </GlobalNamingResources>
...

und

...
      <!-- This Realm uses the UserDatabase configured in the global JNDI
           resources under the key "UserDatabase".  Any edits
           that are performed against this UserDatabase are immediately
           available for use by the Realm.  -->
      <!-- Tachtler - DISABLED - -->
      <!-- <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      -->
...

/etc/tomcat6/context.xml

Hier die komplette Konfigurationsdatei:

<?xml version='1.0' encoding='utf-8'?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
 
      http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>
 
    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
 
    <!-- Tachtler -->
    <!-- Enable LDAP authentication -->
    <Realm className="org.apache.catalina.realm.JNDIRealm" 
        connectionName="cn=Ersatzauthentifizierer,dc=tachtler,dc=net"
    connectionPassword="geheim"
         connectionURL="ldap://ldap.dmz.tachtler.net:389"
           userPattern="uid={0},ou=People,dc=tachtler,dc=net"
              roleBase="ou=TomcatRoles,dc=tachtler,dc=net"
              roleName="cn"
            roleSearch="(uniqueMember={0})"
    />
 
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
 
    <!-- Uncomment this to enable Comet connection tacking (provides events
         on session expiration as well as webapp lifecycle) -->
    <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
    -->
 
</Context>

Konfiguration: LDAP-Server

Wie ein entsprechender LDAP-Server eingerichtet werden kann, kann unter folgendem Link innerhalb dieses DokuWiki's nachgelesen werden:

Gruppe hinzufügren

:!: WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd-Daemon/Dienst gestoppt wird !!!

Zuerst sollte eine Datei mit nachfolgend genannten Namen in nachfolgend genannten Verzeichnis erstellt werden:

  • /etc/openldap/ldif/TomcatRoles.ldif

Der Inhalt der Datei könnte folgendermaßen aussehen, wobei hier folgende Anforderungen erfüllt werden:

  • Anlegen einer Gruppe mit dem Namen TomcatRoles
  • Anlegen einer „admin“ Rolle mit dem Mitglied root
  • Anlegen einer „login“ Rolle mit dem Mitglied klaus
  • Anlegen einer „manager“ Rolle mit den Mitgliedern root und klaus
dn: ou=TomcatRoles,dc=tachtler,dc=net
objectClass: organizationalUnit
objectClass: top
ou: TomcatRoles
 
dn: cn=admin,ou=TomcatRoles,dc=tachtler,dc=net
objectClass: groupOfUniqueNames
objectClass: top
uniqueMember: uid=root,ou=People,dc=tachtler,dc=net
 
dn: cn=login,ou=TomcatRoles,dc=tachtler,dc=net
objectClass: groupOfUniqueNames
objectClass: top
uniqueMember: uid=klaus,ou=People,dc=tachtler,dc=net
 
dn: cn=manager,ou=TomcatRoles,dc=tachtler,dc=net
objectClass: groupOfUniqueNames
objectClass: top
uniqueMember: uid=root,ou=People,dc=tachtler,dc=net
uniqueMember: uid=klaus,ou=People,dc=tachtler,dc=net

Dies kann mit folgendem Befehl durchgeführt werden:

# service slapd stop
Stopping slapd:                                            [  OK  ]

Mit folgenden Befehlen werden nun die Daten aus der Datei

  • /etc/openldap/ldif/TomcatRoles.ldif und

in den DIT Directory Information Tree eingestellt:

# slapadd -v -l /etc/openldap/ldif/TomcatRoles.ldif 
added: "ou=TomcatRoles,dc=tachtler,dc=net" (0000000c)
added: "cn=admin,ou=TomcatRoles,dc=tachtler,dc=net" (0000000d)
added: "cn=login,ou=TomcatRoles,dc=tachtler,dc=net" (0000000e)
added: "cn=manager,ou=TomcatRoles,dc=tachtler,dc=net" (0000000f)
_#################### 100.00% eta   none elapsed            none fast!         
Closing DB...

:!: WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd-Daemon/Dienst wieder gestartet wird !!!

Dies kann mit folgendem Befehl durchgeführt werden:

# service slapd start
Starting slapd:                                            [  OK  ]

Zur Überprüfung ob das Anlegen der Gruppe korrekt funktioniert hat, kann folgender Befehl verwendet werden, welche die nachfolgende Ausgabe erzeugen sollte:

# ldapsearch -x -LLL -H ldap://ldap.dmz.tachtler.net -b "ou=TomcatRoles,dc=tachtler,dc=net" -W -D "cn=Ersatzauthentifizierer,dc=tachtler,dc=net"
Enter LDAP Password: 
dn: ou=TomcatRoles,dc=tachtler,dc=net
objectClass: organizationalUnit
objectClass: top
ou: TomcatRoles
 
dn: cn=admin,ou=TomcatRoles,dc=tachtler,dc=net
objectClass: groupOfUniqueNames
objectClass: top
uniqueMember: uid=root,ou=People,dc=tachtler,dc=net
cn: admin
 
dn: cn=login,ou=TomcatRoles,dc=tachtler,dc=net
objectClass: groupOfUniqueNames
objectClass: top
uniqueMember: uid=klaus,ou=People,dc=tachtler,dc=net
cn: login
 
dn: cn=manager,ou=TomcatRoles,dc=tachtler,dc=net
objectClass: groupOfUniqueNames
objectClass: top
uniqueMember: uid=root,ou=People,dc=tachtler,dc=net
uniqueMember: uid=klaus,ou=People,dc=tachtler,dc=net
cn: manager

Zugriffsrechte beschränken

Durch nachfolgende Abfrage, kann aufgelistet werden, welche Zugriffsrechte für die einzelnen im DIT Directory Information Tree enthaltenen Benutzerstrukturen bereits existieren, um diese Informationen als Grundlage für Anpassungen verwenden zu können:

# ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <olcDatabase={-1}frontend,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# {-1}frontend, config
dn: olcDatabase={-1}frontend,cn=config
olcPasswordHash: {SSHA}
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning  
 by self write  by dn="cn=Manager,dc=tachtler,dc=net" write  by dn="cn=Anonymo
 us,dc=tachtler,dc=net" read  by anonymous auth  by * none
olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net"  by self write  by * none
olcAccess: {2}to dn="cn=Ersatzauthentifizierer,dc=tachtler,dc=net"  by self wr
ite  by dn="cn=Manager,dc=tachtler,dc=net" write  by * none
olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net"  by self wr
 ite  by dn="cn=Manager,dc=tachtler,dc=net" write  by dn="cn=Ersatzauthentifiz
iere,dc=tachtler,dc=net" read  by dn.exact,expand="uid=$1,ou=People,dc=tachtle
r,dc=net" read  by * none
olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net"  by self 
 write  by dn="cn=Manager,dc=tachtler,dc=net" write  by dn="cn=Ersatzauthenti
fizieren,dc=tachtler,dc=net" read  by dn.exact,expand="uid=$1,ou=People,dc=ta
chtler,dc=net"read  by * none
olcAccess: {5}to *  by self write  by dn.base="cn=manager,dc=tachtler,dc=net" 
 write  by * read
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 0
olcReadOnly: FALSE
olcSchemaDN: cn=Subschema
olcMonitoring: FALSE
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1

Um Änderungen an diesen Zugriffsberechtigungen durchzuführen, sind zwei wesentliche Schritte notwendig:

  1. Löschen der eines Teils der aktuellen ACL-Konfiguration (Regel {5})
  2. Neuanlage der zukünftigen ACL-Konfiguration inklusive des vorher gelöschten Teils der alten ACL-Konfiguration (Regel {5})

:!: WICHTIG - Die Konfigurationsdatei im und unterhalb des Verzeichnisses sollten NICHT direkt editiert werden !!!

Um Änderungen durchzuführen, soll eine Änderungsdatei im *.LDIF-Format erstellt werden.

Dazu soll im ersten Schritt ein Verzeichnis mit dem Name

  • /etc/openldap/ldif

erstellt werden (falls dieses nicht bereits vorhanden ist), was mit nachfolgendem Befehl durchgeführt werden kann:

# mkdir /etc/openldap/ldif

Die Besitzrechte sollten mit nachfolgenden Befehl angepasst werden:

# chown -R ldap.ldap /etc/openldap/ldif/

ebenfalls die Dateirechte, mit nachfolgendem Befehl:

# chmod -R 700 /etc/openldap/ldif/

Der Name der Konfigurationsdateien im *.LDIF-Format sollen hier

  • /etc/openldap/ldif/frontend_acl_add_TomcatRoles.ldif

lauten und nachfolgende Inhalte haben

dn: olcDatabase={-1}frontend,cn=config 
delete: olcAccess
olcAccess: {5}
 
dn: olcDatabase={-1}frontend,cn=config
add: olcAccess
olcAccess: {5}to dn.regex="ou=TomcatRoles,dc=tachtler,dc=net"  by self write  by dn="cn=Manager,dc=tachtler,dc=net" write  by dn="cn=Ersatzauthentifizierer,dc=tachtler,dc=net" read  by * none
olcAccess: {6}to *  by self write  by dn.base="cn=manager,dc=tachtler,dc=net" write  by * read

Durch nachfolgenden Befehl, wird die Konfigurationsdatei im *.LDIF-Format –>

  • /etc/openldap/ldif/frontend_acl_add_TomcatRoles.ldif und

von der bestehenden OpenLDAP-Server bzw. slapd-Daemon/Dienst-Konfiguration gelöscht bzw. zu der bestehenden OpenLDAP-Server bzw. slapd-Daemon/Dienst-Konfiguration hinzugefügt:

# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/frontend_acl_add_TomcatRoles.ldif 
Enter LDAP Password: 
modifying entry "olcDatabase={-1}frontend,cn=config "

Eine Überprüfung, ob das Löschen und das Hinzufügen der zusätzlichen Konfigurationen erfolgreich war, kann mit nachfolgendem Befehl durchgeführt werden und sollte eine Ausgabe wie nachfolgend dargestellt, ausgeben:

# ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <olcDatabase={-1}frontend,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
 
# {-1}frontend, config
dn: olcDatabase={-1}frontend,cn=config
olcPasswordHash: {SSHA}
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning  
 by self write  by dn="cn=Manager,dc=tachtler,dc=net" write  by dn="cn=Anonymo
 us,dc=tachtler,dc=net" read  by anonymous auth  by * none
olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net"  by self write  by * none
olcAccess: {2}to dn="cn=Ersatzauthentifizierer,dc=tachtler,dc=net"  by self wr
ite  by dn="cn=Manager,dc=tachtler,dc=net" write  by * none
olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net"  by self wr
 ite  by dn="cn=Manager,dc=tachtler,dc=net" write  by dn="cn=Ersatzauthentifiz
iere,dc=tachtler,dc=net" read  by dn.exact,expand="uid=$1,ou=People,dc=tachtle
r,dc=net" read  by * none
olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net"  by self 
 write  by dn="cn=Manager,dc=tachtler,dc=net" write  by dn="cn=Ersatzauthenti
fizieren,dc=tachtler,dc=net" read  by dn.exact,expand="uid=$1,ou=People,dc=ta
chtler,dc=net"read  by * none
olcAccess: {5}to dn.regex="ou=TomcatRoles,dc=tachtler,dc=net"  by self write  
 by dn="cn=Manager,dc=tachtler,dc=net" write  by dn="cn=Ersatzauthentifizierer
,dc=tachtler,dc=net" read  by * none
olcAccess: {6}to *  by self write  by dn.base="cn=manager,dc=tachtler,dc=net" 
 write  by * read
olcAddContentAcl: FALSE
olcLastMod: TRUE
olcMaxDerefDepth: 0
olcReadOnly: FALSE
olcSchemaDN: cn=Subschema
olcMonitoring: FALSE
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/apache_tomcat_6_-_ldap-authentifizierung_jndirealm.txt · Zuletzt geändert: 2012/06/11 13:27 von klaus