🖥️ldap

➡️This is a iomand-line reference manual for iomands and iomand iobinations that you don’t use often enough to remember it. This cheatsheet explains the ldap iomand with important options and switches using examples.

▁ ▂ ▃ ▄ ꧁ 🔴☠ ioMANDLINE-KUNGFU WITH CHEATSHEETS ☠🔴꧂▅ ▃ ▂ ▁

#            ██╗     ██████╗  █████╗ ██████╗ 
#            ██║     ██╔══██╗██╔══██╗██╔══██╗
#            ██║     ██║  ██║███████║██████╔╝
#            ██║     ██║  ██║██╔══██║██╔═══╝ 
#            ███████╗██████╔╝██║  ██║██║     
#            ╚══════╝╚═════╝ ╚═╝  ╚═╝╚═╝     
                                            
                                            

#----------------#
|# Ldap Notizen #|
#----------------#
ldapsearch -vvv -LLL -b "CN=Tux Tuxy,OU=USR,OU=linuxserver0598,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -x -vvv -LLL -b "CN =Tux Tuxy,OU=USR,OU=linuxserver0598,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -x -vvv -LLL -b "C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -x -vvv -LLL -b "cn =config" -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -Y EXTERNAL -vvv -LLL -b "cn=config" -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -x -vvv -LLL -b "c=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io

# ldap dump erstellen
cd /tmp/
slapcat -n 1
slapcat -n 1 -l dump.ldif
less dump.ldif
scp dump.ldif srv8504101pdf.linuxserver0041.lxu.io:/root/

# ldap dump Einspielen
ls -l /var/lib/ldap/
cat /var/lib/ldap/DB_CONFIG
slapcat --help
slapcat -n 1 -l /tmp/dump.ldif

https://blog.tralios.de/2016/09/umzug-einer-ldap-datenbank-auf-einen-neuen-server/

###############################  LDAP History srv8504101pdf ###################################
cd /etc/openldap/
vi slapd.conf
vi slapd.conf.default
vi slapd.conf.YaSTsave
vi ldap.conf
cd slapd.d
vi cn\=config.ldif
cd cn\=config/
cd cn\=schema/
vi cn\=\{0\}core.ldif

zypper update
reboot; exit

less messages
grep "error" *
grep "error" * | less
cd /etc
ls -latr
grep -i ldap *
cd /var/log
ls -latr
tail -f messages
cd /tmp/

slapcat -n 1
slapcat -n 1 -l dump.ldif

less dump.ldif
scp dump.ldif srv8504101pdf.linuxserver0041.lxu.io:/root/

zypper up
zypper se bind
zypper up
cat /etc/SuSE-release
l -tr
du -shx pdf

zypper intall ccze
zypper se ccze
ldapsearch -LLL -D cn=Administrator,C=com -w admin -x -t -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -LLL -D cn=Administrator,C=com -w admin -x -t -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io | grep -i TEST
ldapsearch -LLL -D cn=Administrator,C=com -w admin -x -t -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io | grep -i Testuser.lotusnotesen
ldapsearch -LLL -D cn=Administrator,C=com -w admin -x -t -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io | grep -i Testuser.lotusnotesen -A15
ldapsearch -LLL -D cn=Administrator,C=com -w admin -x -t -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io | grep -i Testuser.lotusnotesen -B10 -A20
ldapsearch -LLL -b "CN=MAX MUSTERMAN,OU=USR,OU=linuxserver0093,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io

vi import_ad_ldif.sh

ldapsearch -LLL $OpenLDAPAccess -x -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io "(employeeNumber=DID0019431)"
ldapsearch -LLL "-D cn=Administrator,C=com -w admin" -x -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io "(employeeNumber=DID9819431)"
ldapsearch -LLL "-D cn=Administrator,C=com -w admin" -x -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io "(employeeNumber=9819431)"
ldapsearch -LLL "-D cn=Administrator,C=com -w admin" -x -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io "(uid: unixtux)"
ldapsearch -LLL "-D cn=Administrator,C=com -w admin" -x -b C=com -H ldap://srv8504101pdf.linuxserver0041.lxu.io "uid: unixtux"
ldapsearch -LLL -b "CN=Quentin unixtux,OU=USR,OU=linuxserver0534,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io uid
ldapsearch -vvv -LLL -b "CN=Quentin unixtux,OU=USR,OU=linuxserver0534,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io uid
ldapsearch -vvv -LLL -b "CN=Quentin unixtux,OU=USR,OU=linuxserver0534,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io

cat /var/tmp/ldif_ad/TUTTUXY.ldif
ldapsearch -vvv -LLL -b "CN=Tux Tuxy,OU=USR,OU=linuxserver059859,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io

vgdisplay
lvextend -r --size +5G /dev/system/var

find . -xdev -type f -size +50000k -exec ls -lh {} \; | awk "{ print $8 `: ` $5 }"
find . -xdev -type f -size +50000k -exec ls -lh {} \; | awk "{ print $8 `: ` $5 }"
find . -xdev -type f -size +50000k -exec rm {} \; | awk "{ print $8 `: ` $5 }"

crontab -r
crontab -e

ldapsearch -xLLL -b dc=LXU,dc =io
ldapsearch -xLLL -b dc=LXU,dc =com
ldapsearch -vvv -LLL -b "CN=Tux Tuxy,OU=USR,OU=linuxserver0598,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io

cat /etc/openldap/ldap.conf

ldapsearch -x -vvv -LLL -b "CN =Tux Tuxy,OU=USR,OU=linuxserver0598,O=LXU,C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -x -vvv -LLL -b "C=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -x -vvv -LLL -b "cn =config" -H ldap://srv8504101pdf.linuxserver0041.lxu.io
ldapsearch -Y EXTERNAL -vvv -LLL -b "cn=config" -H ldap://srv8504101pdf.linuxserver0041.lxu.io

/etc/init.d/ldap start & tail -f /var/log/messages

ldapsearch -x -vvv -LLL -b "c=com" -H ldap://srv8504101pdf.linuxserver0041.lxu.io

#============================= Funktionsbeschreibung /root/LDAP-README.txt =====================================#
#	  _     ____    _    ____    ____  _____    _    ____  __  __ _____ 
#	 | |   |  _ \  / \  |  _ \  |  _ \| ____|  / \  |  _ \|  \/  | ____|
#	 | |   | | | |/ _ \ | |_) | | |_) |  _|   / _ \ | | | | |\/| |  _|  
#	 | |___| |_| / ___ \|  __/  |  _ <| |___ / ___ \| |_| | |  | | |___ 
#	 |_____|____/_/   \_\_|     |_| \_\_____/_/   \_\____/|_|  |_|_____|
#
#       
# Dieses Script erstellt ein Backup des VOIP-LDAP Inhaltes und verschiebt die .ldif Datei auf den srv8041backup
#
#==============================================================================================================#

#---------------#
# LDAP Searches
#--------------------------#

# AD-Search welche User haben die Gruppe AR-NWS-Jabber-Users im AD
(&(objectCategory=person)(objectClass=user)(|(linuxserver0AccountType=Internal)(linuxserver0AccountType=External)(linuxserver0AccountType=anonymous))(memberof=CN=AR-NWS-Jabber-Users,OU=NWServices,OU=MISC,OU=SERV,DC=LXU-ds,DC=LXU,DC=io))

# Selbe AD-Search welche User haben die Gruppe AR-NWS-Jabber-Users bei verwendung von OID's
(&(objectCategory=person)(objectClass=user)(|(linuxserver0AccountType=Internal)(linuxserver0AccountType=External)(linuxserver0AccountType=anonymous))(memberof:1.2.840.113556.1.4.1941:=CN=AR-NWS-Jabber-Users,OU=NWServices,OU=MISC,OU=SERV,DC=LXU-ds,DC=LXU,DC=io))

(&(objectCategory=person)(objectClass=user)(|(linuxserver0AccountType=Internal)(linuxserver0AccountType=External)(linuxserver0AccountType=anonymous))(memberof=CN=AR-NWS-Jabber-Users,OU=NWServices,OU=MISC,OU=SERV,DC=LXU-ds,DC=LXU,DC=io))
(&(objectCategory=person)(objectClass=user)(|(linuxserver0AccountType=Internal)(linuxserver0AccountType=External)(linuxserver0AccountType=anonymous))(memberof:1.2.840.113556.1.4.1941:=CN=AR-NWS-Jabber-Users,OU=NWServices,OU=MISC,OU=SERV,DC=LXU-ds,DC=LXU,DC=io))

# fertige Search:
ldapsearch -E pr=1000/noprompt -D pdfuser -w PASSWORT -b DC=LXU-ds,DC=LXU,DC=io -LLL -x -H ldap://activedirectory.ldap.lxu.io "(&(objectCategory=person)(objectClass=user)(|(linuxserver0AccountType=Internal)(linuxserver0AccountType=External)(linuxserver0AccountType=anonymous))(memberof=CN=AR-NWS-Jabber-Users,OU=NWServices,OU=MISC,OU=SERV,DC=LXU-ds,DC=LXU,DC=io))" cn displayName | grep -i 'cn: ' | cut -d ' ' -f2
USER1
USER2

# Hinzufügen eines einzelnen .ldif Eintrages
ldapadd -vc -D cn=Administrator,C=com -w admin -x -H ldap://ldap.linuxserver0041.lxu.io -f USER.ldif

# LDAP Search nach User
ldapsearch -L -x -D '[email protected]' -w 'PASSWORD' -H ldap://activedirectory.ldap.lxu.io -E pr=1000/noprompt -b 'DC=LXU-ds,DC=LXU,DC=io' "(&(objectCategory=person)(objectClass=user)(linuxserver0ManagedBy=*)(&(memberof=CN=AR-PRX-ALLOW,OU=Proxy,OU=MISC,OU=SERV,DC=LXU-ds,DC=LXU,DC=io)))" | egrep '(distinguishedName:|linuxserver0ManagedBy:)' | sed 'N;s/^distinguishedName: CN=\([-_A-Za-z0-9]*\),.*linuxserver0ManagedBy: \([0-9\]*\)$/\1;\2/'

# LDAP Search Test 
ldapsearch -vvv -LLL -b "CN=MAX MUSTER,OU=USR,OU=linuxserver0698,O=LXU,C=DE" -H ldap://activedirldap.linuxserver0041.lxu.io

### get oldproxy user ###
# ldapsearch -LLL -x -D '[email protected]' -w 'PASSWORT' -H ldap://activedirectory.ldap.lxu.io -E pr=1000/noprompt -b 'DC=LXU-ds,DC=LXU,DC=io'  "(CN=*prx_oldproxy)" member 
ldapsearch -LLL -x -D '[email protected]' -w 'PASSWORT' -H ldap://activedirectory.ldap.lxu.io \
  -E pr=1000/noprompt -b 'DC=LXU-ds,DC=LXU,DC=io'  "(CN=*prx_proxy)" member \
  | grep -i OU=USERS \
  | sed -e 's/member: CN=\([a-Z0-9\s-]*\),OU=.*/\1/' \
  | grep -v member \
  | sort >$TMPOLDPROXYUSER

### get skype user ###
# ldapsearch -LLL -x -D '[email protected]' -w 'PASSWORT' -H ldap://activedirectory.ldap.lxu.io -E pr=1000/noprompt -b 'DC=LXU-ds,DC=LXU,DC=io'  "(CN=*prx_instantmessaging)" member
ldapsearch -LLL -x -D '[email protected]' -w 'PASSWORT' -H ldap://activedirectory.ldap.lxu.io \
  -E pr=1000/noprompt -b 'DC=LXU-ds,DC=LXU,DC=io'  "(CN=*prx_instantmessaging)" member \
# # #   | grep -i OU=USERS \
  | sed -e 's/member: CN=\([a-Z0-9\s-]*\),OU=.*/\1/' \
  | grep -v member \
  | sort >$TMPSKYPEUSER

### fetch mailaddresses from lotusnotes-LDAP
:### get whole lotusnotes-ldap data accessible via anonymous (no user neecomd)
#ok# ldapsearch  -L -x -H ldap://lotusnotesldap.linuxserver0041.lxu.io  "(mailaddress=*LXU.org)"
ldapsearch  -L -x -H ldap://lotusnotesldap.linuxserver0041.lxu.io  "(mailaddress=*LXU.org)" > $lotusnotes_TEMPFILE1 || { echo "ERROR: problem with LDAP query on lotusnotesldap.linuxserver0041.lxu.io"; exit 1; }

#ok# adldapkelb wird abgefragt und in die Variable $aduserfile geschrieben
ldapsearch -E pr=1000/noprompt -D MYUSER -w PASSWORD -b DC=LXU-ds,DC=LXU,DC=io -LLL -x -H ldap://activedirectory.ldap.lxu.io "(&(objectCategory=person)(objectClass=user)(|(linuxserver0AccountType=Internal)(linuxserver0AccountType=External))(linuxserver0AccountStatus=active))" cn displayName > $aduserfile

#ok# Sucht den displayName aus der Variablen $aduserfile und schreibt diesen in die Varaibale $aduser_mit_umlaut
ldapsearch -E pr=1000/noprompt -D MYUSER -w PASSWORD -b DC=LXU-ds,DC=LXU,DC=io -LLL -x -H ldap://activdirectory.ldap.lxu.io "(&(objectCategory=person)(objectClass=user)(|(linuxserver0MailType=internal-verified)(linuxserver0AccountType=External))(linuxserver0AccountStatus=active))" cn displayName > $aduserfile

###
ldapsearch -D cn='LDAP User',ou=usr,ou=linuxserver0041,O=LXU,C=DE -w PASSWORT "-b $lotusnotesDIDuser" -LLL -x -H ldap://$lotusnotesserver "(employeeid=$LXUDID)" cn mail postaladdress telephonenumber facsimiletelephonenumber mobile l postalcode physicaldeliveryofficename givenname sn objectclass location employeeid | sed -e "/dominoPerson/Id" -e "/mobile::/Id" -e '/telephonenumber:/ s%/%-%g' -e "/^ *$/d" >${/var/tmp/ldif_ad}/${searchpattern}.ldif



					                    ########################
						                # INFOS LPIC 3 zu LDAP #
			    ################------------------------------------------##################

#######
# 210.3 LDAP Client
#####################  
apt install ldap-utils

ldapsearch -x -W -b dc=example,dc=io -H ldap://localhost -D cn=admin,dc=example,dc=io
	-x 	keine SASL Authentifizierung sondern SimpleBind
	-W 	soll mich nach Passwort fragen
	-b 	welchen Baum will ich befragen
	-H 	Welcher Host   ldap:// oder  ldapi:// (Über locale Socketdatei) oder ldaps:// (Verschlüsselt) 
	-D 	Gibt den Benutzer an mit dem ich mich anmelden will
	-LLL 	Sorgt dafür das die Ausgabe kompakter wird
	dn		Sorgt dafür das man nur noch den Distinguished Name zurückbekommt.

# Erstellen einer .ldaprc im /home
#-----------------------------------#
Um nicht jedesmal diesen ewig langen Befehl eingeben zu müssen, kann man einer rc Datei erstellen.

vim ~/.ldaprc
#--------------------------------------
BASE dc=example,dc=io
BINDDN cn=admin,dc=example,dc=io
HOST localhost
#-------------------------------------

Nun reicht folgene ldapsuche:
ldapsearch -x -W -LLL dn

# LDAP Benutzer anlegen
#-----------------------#
Voraussetzung: nis.schema und inetorgperson.schema müssen eingebunden sein 

DOMAIN="dc=example,dc=io"
# Eine Variable in der Bash erstellen

# 1.) OrganisationsUnit anlegen
ldapadd -x -W <<LDIF
-> Anschließend hier text reinpasten:
--------------------------------------
dn: ou=people,$DOMAIN
objectclass: top
objectClass: organizationalUnit
ou: people

dn: ou=groups,$DOMAIN
objectclass: top
objectclass: organizationalUnit
ou: groups
--------------------------------------
-> Abschließend gibt man folgendes ein und ENTER:
LDIF

# 2.) Gruppe anlegen
ldapadd -x -W <<LDIF

dn: cn=ldapusers,ou=groups,$DOMAIN
objectclass: top
objectclass: posixGroup
gidNumber: 10000
cn: ldapusers

LDIF

# 2.) User anlegen
ldapadd -x -W <<LDIF

dn: uid=raspberrypi,ou=people,$DOMAIN
objectclass: top
objectclass: posixAccount
objectClass: account
cn: Raspberry Pi
uid: raspberrypi
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/pi
userPassword: pi
loginShell: /bin/bash

LDIF

# 3. LDAP USER Passwd
ldappasswd -x -W -s pi uid=raspberrypi,ou=people,dc=example,dc=io

# 4. LDAP Abfragen mit Filter
Aufgabe 1: Alle objectKlassen die zur Objektklasse organizationalUnit gehören ausgeben lassen

ldapsearch -x -W -LLL '(objectClass=organizationalUnit)'

	dn: ou=groups,dc=example,dc=io
	objectClass: top
	objectClass: organizationalUnit
	ou: groups

	dn: ou=people,dc=example,dc=io
	objectClass: top
	objectClass: organizationalUnit
	ou: people

Aufgabe 2: Zwei Abfragen miteinander verknüpfen - Selbe Abfrage - nur jetzt die Objekte bei der die ou=groups ist,
und dann nur die ou anzeigen lassen:
ldapsearch -x -W -LLL '(&(objectClass=organizationalUnit)(ou=groups))' ou

	dn: ou=groups,dc=example,dc=io
	ou: groups

	
# 5. Changetype Operationen
ldapmodify - der komplexerste LDAP Befehl

ldapmodify -f /tmp/entrymods

--> Datei /tmp/entrymods anlegen 
--> Dort stehen die Anweisungen drin, wie das Object/Attribut geändert werden soll 
--> Beispiel:

	dn: cn=Modify Me, dc=example,dc=io
	changetype: modify
	replace: mail
	mail: [email protected]
	-
	add: title
	title: Grand Poobah
	-
	add: jpegPhoto
	jpegPhoto:< file:///tmp/modme.jpeg
	-
	delete: description
	-

--> Oben steht erstmal welches Object ich verändern möchte
--> Schlüsselwort changetype  z.B. ersetzte, hinzufügen, löschen (replace,add,delete)

# 6. Löschen von Einträgen
Aufgabe 3: Lösche nun wieder den User raspberrypi aus dem LDAP

ldapdelete -x -W dn: uid=raspberrypi,ou=people,dc=example,dc=io

       loglevel <integer> [...]
              Specify the level at which debugging statements and operation statistics should be syslogged (currently logged to the syslogd(8) LOG_LOCAL4 facility).  They must  be  considered  subsystems  rather  than  increasingly
              verbose log levels.  Some messages with higher priority are logged regardless of the configured loglevel as soon as any logging is configured.  Log levels are additive, and available levels are:
                     1      (0x1 trace) trace function calls
                     2      (0x2 packets) debug packet handling
                     4      (0x4 args) heavy trace debugging (function args)
                     8      (0x8 conns) connection management
                     16     (0x10 BER) print out packets sent and received
                     32     (0x20 filter) search filter processing
                     64     (0x40 config) configuration file processing
                     128    (0x80 ACL) access control list processing
                     256    (0x100 stats) connections, LDAP operations, results (reiomended)
                     512    (0x200 stats2) stats log entries sent
                     1024   (0x400 shell) print iomunication with shell backends
                     2048   (0x800 parse) entry parsing

                     16384  (0x4000 sync) LDAPSync replication
                     32768  (0x8000 none) only messages that get logged whatever log level is set
              The  desired  log level can be input as a single integer that iobines the (ORed) desired levels, both in decimal or in hexadecimal notation, as a list of integers (that are ORed internally), or as a list of the names
              that are shown between brackets, such that

                  loglevel 129
                  loglevel 0x81
                  loglevel 128 1
                  loglevel 0x80 0x1
                  loglevel acl trace

# 210.4 LDAP Server
######################

LDAP Server ist ein Verzeichnisdienst und steht meistens im Backend und dient als Konfigurationquelle  oder  Authentifizierungsquelle für andere Dienste

Es gibt Openldap, LDAP von Novell & Sun und es gibt ActiveDirectory sowie FedoreDirectory Server, welche das ldap Protokoll implementieren. 
	--> Ein SambaServer kann seine User/Pass dort ablegen
	--> Ein LinuxRechner kann einen LDAP Server als Anmeldeserver verwenden
	--> Postfix kann das Mailrouting über Tabellen die im LDAP Server abgelegt sind organisieren

DAP war der Vorgänger von LDAP - LDAP steht für Lightweight Directory Access Protokol
LDAP ist ein Protokoll. Daher kann der Admin konfigurieren wo der LDAP Server seine Daten abspeichert, denn dies ist nicht im 
Protokol geregelt. Man hat Verschiedene Möglichkeiten dies zu tun, wie z.B. Stasrv85rt wie hdb und mdb. Es gibt aber auch Setups bei denen Postgressdatenbank als Backend benutzt. Oder man kann LDAP auch als Meta-Server konfigurieren, so das meine Anfragen quasi als Proxy funktionieren.

dn = distinguished Name (eindeutiger Name im LDAP Baum)
dc = Domain ioponend
cn = iomon name
ou = Organisations Unit

					
					
											LDAP Verzeichnisbaum 
											[getrennter baum]
					
									
					dc=io 										   cn=config						# dn Schreibweise: dn: dc=io   oder  dn: cn=config
				  /        \
				 /           \
			dc=example 		\										# dn Schreibweise: dn: dc=example,dc=io
			 /        \		     \
			/          \			 \
	cn=admin 		ou=people		ou=groups								# dn Schreibweise: dn: cn=admin,dc=example,dc=io
							|					|
							|					|
						uid=pi  			cn=ldapusers
						
						
Für die Bennenung bin ich relativ frei mal ou mal uid mal cn -> das kann man mischen wie man lust hat

						
	
			

Installation früher:
#--------------------#
DEBIAN: 		slapd 
SUSE:  		openldap2
Fedora: 		openldap-servers

Frühere Hauptkonfig: slapd.conf enthielt 
includes für z.B. core.schema, nis.schema 

vi /usr/share/doc/slapd/example/slapd.conf
 
-> Wie soll das Schema Aussehen  
-> Wo sollen die Daten abgespeichert werden (hdb, mdb Database?)
		moduleload back_hdb
		backend hdb
		database hdb
-> Zugriffsrechte müssen gesetzt werden Diese regeln:
		Wer (z.B. ich selbst) darf auf welches Attribut wie zugreifen (z.B. lesend, schreibend, garnicht)

		
cat /usr/share/doc/slapd/example/slapd.conf > /etc/ldap/slapd.conf 

Installation heute:
#------------------#
apt install slapd 
LDAP Admin Passwort vergeben

Heute gibt es diese slapd.conf nicht mehr. Dafür gibt es nun einen eigenen getrennten Konfigurations Baum mit Schematas unter:
/etc/ldap/slapd.d/cn=config# ls

		cn=schema/
		cn=module{0}.ldif  
		olcBackend={0}mdb.ldif         
		olcDatabase={1}mdb.ldif
		olcDatabase={0}config.ldif
		cn=schema.ldif     
		olcDatabase={-1}frontend.ldif

ldif steht für LDAP Interchange Format - Eine Format mit dem man LDAP Daten austauschen kann..
Whitepages sind Dokumentation wie man sich so einen LDAP Server aufbauen kann.

Konfiguration:
#---------------#
/etc/ldap/schema/nis.schema

Es gibt in diesen Schematas Attribute und Objekte. jeder Typ hat eine eigene Nummer (Objekt-IDs = OID)
Ein Objekt besteht dann jeweils aus mehreren Attributen. Hier z.B. ist das attribut homeDirectory 
ein Bestandteil der Objektklasse posixAccount, welche den UNIX Login regelt. Must = Pflichtfeld, May = Optionalfeld
Manche von diesen Attributen dürfen auch mehrfach da sein. Z.B. kann ja ein User mehrere Telefonnummern haben. In der Klassischen sql
Datenbank wäre ich hier an der Stelle raus, bräuchte man mehrere Tabellen um das darzustellen. Hier ist es so das man alles in ein Objeckt hineinpacken kann.

################################
# Attribute Type Definitions
attributetype ( 1.3.6.1.1.1.1.3 NAME 'homeDirectory'
        DESC 'The absolute path to the home directory'
        EQUALITY caseExactIA5Match
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )

		  
# Object Class Definitions
objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount'
        DESC 'Abstraction of an account with POSIX attributes'
        SUP top AUXILIARY
        MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
        MAY ( userPassword $ loginShell $ gecos $ description ) )
################################

# Auf den LDAP Server zugreifen
#-------------------------------#
slapcat 

	dn: dc=nodomain
	objectClass: top
	objectClass: dcObject
	objectClass: organization
	o: nodomain
	dc: nodomain
	structuralObjectClass: organization
	entryUUID: 926e2c74-c881-1037-8d89-33fe3664983b
	creatorsName: cn=admin,dc=nodomain
	createTimestamp: 20180330161722Z
	entryCSN: 20180330161722.711020Z#000000#000#000000
	modifiersName: cn=admin,dc=nodomain
	modifyTimestamp: 20180330161722Z

	dn: cn=admin,dc=nodomain
	objectClass: simpleSecurityObject
	objectClass: organizationalRole
	cn: admin
	description: LDAP administrator
	userPassword:: b2NTSEF9S1lBMEwvWjR2T2RiVHlIMzJLdlluREs0MjN5c2VvTxp=
	structuralObjectClass: organizationalRole
	entryUUID: 92716984-c881-1037-8d8a-33fe3664983b
	creatorsName: cn=admin,dc=nodomain
	createTimestamp: 20180330161722Z
	entryCSN: 20180330161722.732784Z#000000#000#000000
	modifiersName: cn=admin,dc=nodomain
	modifyTimestamp: 20180330161722Z

	
# LDIF Syntax Aufbau:
#---------------------#
--> Slapcat gibt die ganze Datenbank wieder. (DUMP) im LDIF Format
--> Leerzeilen trennen die einzelnen Objekte
--> Jeder neue Objectblock beginnt dann immer wieder mit einem dn.
--> Anschließend kommen die ganzen Schlüssel-Wertpaare
--> Manchmal steht ein :: hinter dem Attribut -> Das bedeuktet das hier kein Klartext steht, sondern ein Base64 Encoding 
--> Dies ist keine Verschlüsselung, sondern nur ein Encoding, um Umlaute in ein Feld unterzubringen

Mit slapadd kann man Daten aus LDIF Dateien einfach in die LDAP Datenbank hinzufügen. Dies geht nicht über das LDAP Protokoll. Sprich man es geht auf Dateiebene und man muss sich nicht gegen den LDAP Server authentifizieren.

SSSD = System Security Services Daemon 
(Authentisierung und Identitätsverwaltung)
#-----------------------------------------#
Der SSSD  ist ein Dienst der benutzt wird um Benutzer zu authentifizieren.  
Ein Wesentliches Feature is das Authentifizierung zwischengespeichert (gecacht) wird. 

slapd -t 
# Zur Überprüfung der  Konfiguration - depricated - selbe wie slaptest

Beim Backup und Restore muss man nur darauf achten, dass die Dateien die  unter 
		/var/lib/ldap/* 
liegen gelöscht werden 
(wenn man mit slapcat ein Backup gemacht hat, und sie dann wieder mit slapadd hinzufügen will, muss man die Dateien dort alle löschen)
Anschließend muss man den Befehl 
			slapindex 
ausführen, um die Indizes wieder anzulegen und die Zugriffsgeschwindigkeit wieder zu erhöhen.

# Loglevel LDAP
#--------------#
LDAP im DEBUG Modus starten mit /usr/sbin/slapd -d [DEBUGLEVEL]
In manpage slapd.conf findet man die Loglevel vom LDAP Server. Besonderheit geschrieben in Bitmasken
Geht von 1bis 32768. -1 Loggt  alles mit, 32768 nichts mehr.

 
 

#-------------------#
|# Gute LDAP Tools #|
#-------------------#

ldapvi							    =		Damit kann man mit einem Texteditor Attribute des LDAP Schemas direkt editieren und darin suchen.
shelldap							= 		Shell-ähnliche Oberfläche zum Durchsehen von LDAP-Servern
Apache Directory Studio		        =		LDAP Browser, Schema Editor - erfordert JavaRuntime

ldapsearch -x -b 'dc=LXU,dc=de' '(objectclass=*)' 
# Test LDAP Server - It prints all the user information

# LDAP Installation und test simple
apt install slapd ldap-utils
vim etc/ldap/ldap.conf
dpkg-reconfigure slapd 
ldapsearch -x  

############################################

root@srv8041ldap01:~# cat README-LDAP-HowTo 
BASE c=DE
BINDDN cn=Administrator,C=DE
HOST localhost

# User und Passwort für Schreibaccess
OpenLDAPServer=srv8041ldap01.linuxserver0041.lxu.io
OpenLDAPAccess="-D cn=Administrator,C=DE -w admin"

ldapadd -vc -D cn=Administrator,C=DE -w admin -x -H ldap://srv8041ldap01.linuxserver0041.lxu.io -f LDIVUSERFILE.ldif

ldapsearch -LLL -x -H ldap://ldap4voip.linuxserver0041.lxu.io -D 'cn=Administrator,c=de' -w 'admin' -b 'o=LXU,c=DE' "(cn=*LDIVUSERFILE*)"

#---------------#
# Von Manghofer - AD Abfragen
#--------------------------------#

RSATTools
starten powershell ise

Import-Module ActiveDirectory
get-aduser -LDAPFilter "(&(objectCategory=person)(objectClass=user)(|(mail=*)(telephoneNumber=*)))" -SearchBase "OU=USERS,OU=PROD,DC=LXU-ds,DC=LXU,DC=io" -Properties linuxserver0identityid, mail, telephoneNumber -server "ldapserver.com" | select-object Samaccountname, linuxserver0identityid, mail, telephoneNumber | export-csv -Path "C:\temp\testuser.csv" -Delimiter ";" -NoTypeInformation  

Grid zum anzeigen:
out-gridview

Start OU
OU=USERS,OU=PROD,DC=LXU-ds,DC=LXU,DC=io
Mail und Tel
(&(objectCategory=person)(objectClass=user)(mail=*)(telephoneNumber=*))
Entweder Mail oder Tel
(&(objectCategory=person)(objectClass=user)(|(mail=*)(telephoneNumber=*)))

get-aduser manghofer -Properties * | select-object memberof
Get-ADGroupMember "AR-NWS-Jabber-Users" | select samaccountname

# oder Powershellsuche nach Usern mit Tel und email:
Get-ADUser -LDAPFilter "(&(objectCategory=person)(objectClass=user)(mail=*)(telephoneNumber=*))" -SearchBase "OU=USERS,OU=PROD,DC=LXU-ds,DC=LXU,DC=io" | Out-GridView

# oder Powershellsuche nach Usern mit entweder Mail oder Tel
Get-ADUser -LDAPFilter "(&(objectCategory=person)(objectClass=user)(|(mail=*)(telephoneNumber=*)))" -SearchBase "OU=Users,OU=PROD,DC=LXU-ds,DC=LXU,DC=io" | Out-GridView

# oder Powershellsuche nach Usern mit einer Telefonnr:
Get-ADUser -LDAPFilter "(&(objectCategory=person)(objectClass=user)(|(mail=*)(telephoneNumber=*)))" -SearchBase "OU=Users,OU=PROD,DC=LXU-ds,DC=LXU,DC=io" | Out-GridView

#==============================##==============================#
# CMD HOTLINE                                                  #
#==============================##==============================#
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░

  █║▌│║█║▌★ KALI ★ PARROT ★ DEBIAN 🔴 PENTESTING ★ HACKING ★ █║▌│║█║▌

              ██╗ ██╗ ██████╗  ██████╗ ██╗  ██╗███████╗██████╗
             ████████╗██╔══██╗██╔═══██╗╚██╗██╔╝██╔════╝██╔══██╗
             ╚██╔═██╔╝██║  ██║██║   ██║ ╚███╔╝ █████╗  ██║  ██║
             ████████╗██║  ██║██║   ██║ ██╔██╗ ██╔══╝  ██║  ██║
             ╚██╔═██╔╝██████╔╝╚██████╔╝██╔╝ ██╗███████╗██████╔╝
              ╚═╝ ╚═╝ ╚═════╝  ╚═════╝ ╚═╝  ╚═╝╚══════╝╚═════╝

               █║▌│║█║▌ WITH ioMANDLINE-KUNGFU POWER █║▌│║█║▌

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░