FAQ:Arktur4/LDAPtool

Aus Arktur
Wechseln zu: Navigation, Suche

Ein kleines LDAP-Tool

Frage:

Ich möchte den Umgang mit LDAP lernen. Was kann ich tun?


Antwort:

Hier ein nützliches keines Script:

 Name:			l_tool.sh
 Liegt im Pfad: 	/usr/local/bin/
 Rechte:               -rwxr--r--    root:root

Der Inhalt (Kommentare unterdrückt):

Capella:~ # cat /usr/local/bin/l_tool.sh|grep -v ^#

  my_conf="/etc/ldap.conf"
  my_sec="/etc/ldap.secret"

  [ -f "$my_conf" ] || [ -f "$my_sec" ] || ( echo \
  "LDAP ist nicht konfiguriert." ; echo \
  "Steige aus." ; exit 1 )

  if ! [ "`cat $my_sec|wc -c`" = "`/usr/bin/stat -c %s $my_sec`" ]; then
  echo -n "`cat $my_sec`" > $my_sec
  fi

  ldap_base=$(grep ^base $my_conf | awk '{ print $2 }')
  ldap_bind=$(grep rootbinddn $my_conf | awk '{ print $2 }')

  ldapsearch -x -LLL -D $ldap_bind -y /etc/ldap.secret "$@"

  Capella:~ #   

Erklärung: Das Script macht nicht viel. Das aber gut. Es vereinfacht den "ldapsearch" Aufruf. Das Script funtioniert mit allen openldap Servern, vorausgesetzt, sie benutzen wie Arktur 4 eine Plaintext Anmeldung (-x), rootdn Kennung und Passworte werden direkt aus den Dateien gelesen.

Eine Eingabe ist nicht erforderlich. Da die "/etc/ldap.secret" dem Nutzer "root" gehört, funktioniert das Script nur, wenn "root" es auch startet. Der Parameter "-LLL" verkürzt die Ausgabe (also LDIFF Kommentare werden entfernt).

Nun ein paar praktische Beispiele.



Ausgabe des GANZEN LDAP-Baums (wenig sinnvoll, es sei denn Mensch braucht ein unvollstaendiges Backup. Nur Nutzdaten, keine internen Attribute)


l_tool.sh

Ergebnis: Zig Seiten im ldiff Format.



Ausgabe aller Maschienenaccounts:

l_tool.sh  ou=ARBEITSSTATIONEN

Ergebnis:

dn: ou=ARBEITSSTATIONEN,o=SCHULE,dc=europaschuledortmund,c=de
ou: ARBEITSSTATIONEN
objectClass: organizationalUnit
description: Container der Samba-Maschinen-Accounts




Auf diesem Arktur4rc1 Server befindet sich die Maschinen-Accounts unterhalb von ou=ARBEITSSTATIONEN,o=SCHULE,dc=europaschuledortmund,c=de


Jetzt kommt die eigentliche Suche (Alles auf eine Zeile):

l_tool.sh -b ou=ARBEITSSTATIONEN,o=SCHULE,dc=europaschuledortmund,c=de -s sub objectclass=* 

Erklärungen:

-b 		gibt die Suchbasis im Baum an
-s sub 		finde alle Eintraege unterhalb von (-b), auch verschachtelte
objectclass=*	Ein LDAP-Filter. Dieser findet einfach alles!

Das Ergebnis (Passwoerter entfernt):

dn: uid=admin$,ou=ARBEITSSTATIONEN,o=SCHULE,dc=europaschuledortmund,c=de
cn: admin
objectClass: account
objectClass: posixAccount
objectClass: sambaSamAccount
uid: admin$
uidNumber: 11000
gidNumber: 97
homeDirectory: /dev/null
gecos: Windows-Maschinenaccount admin
description: Windows-Maschinenaccount admin
loginShell: /bin/false
sambaSID: S-1-5-21-2668716448-1598664822-178526104-23000
sambaPrimaryGroupSID: S-1-5-21-2668716448-1598664822-178526104-1195
displayName: Windows-Maschinenaccount admin
sambaPwdCanChange: 1157442896
sambaPwdMustChange: 2147483647
sambaPwdLastSet: 1157442896
sambaAcctFlags: [W          ]

dn: uid=blaq$,ou=ARBEITSSTATIONEN,o=SCHULE,dc=europaschuledortmund,c=de
cn: blaq
objectClass: account
objectClass: posixAccount
objectClass: sambaSamAccount
uid: blaq$
uidNumber: 11001
gidNumber: 97
homeDirectory: /dev/null
gecos: Windows-Maschinenaccount blaq
description: Windows-Maschinenaccount blaq
loginShell: /bin/false
sambaSID: S-1-5-21-2668716448-1598664822-178526104-23002
sambaPrimaryGroupSID: S-1-5-21-2668716448-1598664822-178526104-1195
displayName: Windows-Maschinenaccount blaq
sambaPwdCanChange: 1157631948
sambaPwdMustChange: 2147483647
sambaLMPassword: #secretsecretsecretsecretsecret#
sambaNTPassword: #secretsecretsecretsecretsecret#
sambaPwdLastSet: 1157631948
sambaAcctFlags: [W          ]

Also: Auf diesem Server gibt es zwei Maschinen-Accounts: admin$ und blaq$

Admin$ wurde durch das Migrationsscript angelegt. Vielleicht gab es ihn auch schon in der alten smbpasswd. Dieser Host hat KEIN Passwort. Der Eintrag funktioniert also NICHT! blaq$ wurde vom Migrationsscript bei der Migration einer Artur 3.0o auf 4rc1 übernommen. Dieser Eintrag funktioniert. Ist eine windows2000 Maschine.



Diesmal was kürzeres:

l_tool.sh o=SCHULE

Ergebnis:

dn: o=SCHULE,dc=europaschuledortmund,c=de
o: SCHULE
objectClass: organization
objectClass: top

Also: Wie der Mensch sehen kann, werden die internen Attribute der LDAP-Datenbank nicht ausgegeben. Wer die auch haben möchte, hängt einfach ein "*" "+" an die Abfrage:


l_tool.sh o=SCHULE "*" "+"

Ergebnis:

dn: o=SCHULE,dc=europaschuledortmund,c=de
o: SCHULE
objectClass: organization
objectClass: top
structuralObjectClass: organization
entryUUID: 1eb77e24-cfdd-102a-83a5-b3d381ce8f09
creatorsName: cn=admin,dc=europaschuledortmund,c=de
createTimestamp: 20060903211550Z
entryCSN: 20060903211550Z#000004#00#000000
modifiersName: cn=admin,dc=europaschuledortmund,c=de
modifyTimestamp: 20060903211550Z
entryDN: o=SCHULE,dc=europaschuledortmund,c=de
subschemaSubentry: cn=Subschema
hasSubordinates: TRUE

Das letzte Attribut "hasSubordinates" ist besonders interessant. Wenn das Attribut wahr (TRUE) ist, dann hat dieser Eintrag im LDAP-Baum Blätter (Kinder). Also lasst uns danach suchen. Der Mensch kann diese Verzweigungen gut als Suchbasis (mit Parameter -b) benutzen.

l_tool.sh "(&(objectClass=*)(hasSubordinates=TRUE))" dn hasSubordinates
dn: dc=europaschuledortmund,c=de
hasSubordinates: TRUE

Ergebnis:

dn: o=SYSTEM,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: o=DHCP,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=sysusers,o=SYSTEM,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=sysgroups,o=SYSTEM,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=ARBEITSSTATIONEN,o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=GRUPPEN,o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=LEHRER,o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=SCHUELER,o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=PROJEKTE,o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=KLAUSUR,o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=PAdmins,ou=PROJEKTE,o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: ou=PGruppen,ou=PROJEKTE,o=SCHULE,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: cn=DHCP Service Config,o=DHCP,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: cn=192.168.0.0,cn=DHCP Service Config,o=DHCP,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

dn: cn=mygroup,cn=192.168.0.0,cn=DHCP Service 
Config,o=DHCP,dc=europaschuledortmund,c=de
hasSubordinates: TRUE

Und schon hat man eine komplette Übersicht der Struktur des LDAP-Baumes von Arktur 4rc1.


Der generelle Aufruf sieht so aus:

 ldapsearch (viele Parameter) "Filter" Attribute die angezeigt werden sollen

oder

 l_tool.sh "Filter" Attribute die angezeigt werden sollen

Wichtig sind also Filter.

Beispiele:

Einfache Filter:

  • cn=root
  • uid=root
  • o=schule

Ungenaue Filter:

  • l_tool.sh sn=*meier* sn
dn: uid=hansm,ou=LEHRER,o=SCHULE,dc=europaschuledortmund,c=de
sn: Hans Mittermeier

dn: uid=mmar,ou=SCHUELER,o=SCHULE,dc=europaschuledortmund,c=de
sn: Maria Meier

dn: uid=manna,ou=SCHUELER,o=SCHULE,dc=europaschuledortmund,c=de
sn: Anna Meier
  • Und Filter: &
 "(&(objectClass=*)(hasSubordinates=TRUE))"
  • Oder Filter: |
 "(|(objectClass=*)(hasSubordinates=TRUE))"

Das Und & bzw das Oder | werden voran gestellt. Das Ganze muss dann in Klammern eingefasst werden. Und damit die Bash die Klammern nicht mit interpretiert, kommt alles zusammen nochmals in Hochkommata "".

Wer alles etwas über Filter wissen will, tut sich dieses fürchterliche Dokument an: http://www.faqs.org/rfcs/rfc2254.html


-- aus einer Mail von Harry J.



zurück | Hauptseite
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Navigation
Dokumentation
Entwicklung
Werkzeuge