Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP LDAP Login Gruppen Abfrage

Frage Entwicklung PHP

Mitglied: schneerunzel

schneerunzel (Level 1) - Jetzt verbinden

18.02.2015, aktualisiert 23.02.2015, 1212 Aufrufe, 7 Kommentare

Hallo Zusammen

ich habe dieses PHP Script:
01.
if (isset($_POST['btnLogin'])){ 
02.
	//übergebene Daten speichern 
03.
	$username = $_POST['username']; 
04.
	$password = $_POST['password']; 
05.
	 
06.
	// Daten des LDAP-Servers 
07.
	$domain = 'ou=Users,dc=ldap,dc=fritz,dc=box'; 
08.
	$ldap_server = 'ldap.fritz.box'; 
09.
	 
10.
	// Mit dem LDAP-Server verbinden 
11.
	$ds = @ldap_connect($ldap_server); 
12.
	 
13.
	//Wenn Verbindung erfolgreich ... 
14.
	if ($ds){ 
15.
		//Protokollversion festlegen 
16.
		ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
17.
		 
18.
		//Versuche mit den übermittelten Credentials eine Verbindung 
19.
		if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){ 
20.
                        // Credentials OK, setze Session-Variablen 
21.
                        $_SESSION['login_state'] = true; 
22.
                        $_SESSION['username'] = $username; 
23.
                }else{ 
24.
			// Credentials falsch 
25.
			$errormessage = "Login fehlgeschlagen!"; 
26.
27.
		ldap_close($ds); 
28.
	}else{ 
29.
		echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds); 
30.
31.
}
Dieses Script stammt von einem anderen User aus diesem Forum

Unschwer zu erkennen ist das ich hiermit ein Login gegen LDAP prüfe

Ich würde gerne noch mit aufnehen das sich nur User einer bestimmten Gruppe anmelden dürfen und nicht alle wie es momentan der Fall ist.

Auf der PHP Seite (http://php.net/manual/de/ref.ldap.php) habe ich zwar was gefunden nur leider funktioniert das nicht, bzw wahrscheinlich bin ich nur zu dämlich dazu....

Könnt ihr mir helfen?

Ein paar Infos

ldif der Gruppe
01.
# Suchbereich: base 
02.
# Suchfilter: (objectClass=*) 
03.
# Anzahl Einträge: 1 
04.
05.
# Generated by LDAP Account Manager (http://www.ldap-account-manager.org) on February 18, 2015 3:44 pm 
06.
# Version: 4.4 
07.
 
08.
version: 1 
09.
 
10.
# Eintrag 1: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box 
11.
dn: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box 
12.
cn: bdv 
13.
description: bdv Group 
14.
gidnumber: 10021 
15.
memberuid: max 
16.
memberuid: lisa
Das ganze ist ein openLDAP (kein AD)
Mitglied: schneerunzel
18.02.2015 um 17:19 Uhr
Danke für die Antwort.

Da ich wirklich PHP Leihe bin blick ich da nicht durch. Diese Seite hatte ich auch son gefunden bin aber daran gescheiter
Bitte warten ..
Mitglied: MrXermon
18.02.2015 um 18:50 Uhr
Ich nutze folgende PHP-Funktion in Kombination mit der Windows AD:

01.
function ldap_ingroup($ldap, $user, $grp){ 
02.
        $results = ldap_search($ldap, $GLOBALS['config']['login']['ldap']['base_dn'], '(samaccountname='.$user.')', array("memberof", "primarygroupid")); 
03.
        $entries = ldap_get_entries($ldap, $results); 
04.
        if($entries['count'] == 0) return false; 
05.
        array_shift($entries[0]['memberof']); 
06.
        $gruppen = $entries[0]['memberof']; 
07.
        foreach($gruppen as $gruppe){ 
08.
                $gruppe = str_replace('CN=', '', $gruppe); 
09.
                $gruppe = strstr($gruppe, ',', true); 
10.
                if($gruppe == $grp){ 
11.
                        return true; 
12.
13.
14.
        return false; 
15.
}
Bitte warten ..
Mitglied: schneerunzel
18.02.2015 um 19:12 Uhr
ahhhhh?????
Bitte warten ..
Mitglied: MrXermon
18.02.2015, aktualisiert um 21:34 Uhr
Man könnte das ganze in etwa so umbauen. Ich konnte das Script allerdings nicht testen.

01.
if (isset($_POST['btnLogin'])){ 
02.
	//übergebene Daten speichern 
03.
	$username = $_POST['username']; 
04.
	$password = $_POST['password']; 
05.
	 
06.
	// Daten des LDAP-Servers 
07.
	$domain = 'ou=Users,dc=ldap,dc=fritz,dc=box'; 
08.
	$ldap_server = 'ldap.fritz.box'; 
09.
	$ldap_gruppe_dn = 'cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box'; 
10.
	 
11.
	// Mit dem LDAP-Server verbinden 
12.
	$ds = @ldap_connect($ldap_server); 
13.
	 
14.
	//Wenn Verbindung erfolgreich ... 
15.
	if ($ds){ 
16.
		//Protokollversion festlegen 
17.
		ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
18.
		 
19.
		//Versuche mit den übermittelten Credentials eine Verbindung 
20.
		if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){ 
21.
						ldap_search($ldap, $domain, '(uid='.$user.','.$domain.')', array("memberof", "primarygroupid"));  
22.
						$entries = ldap_get_entries($ldap, $results);  
23.
						if($entries['count'] == 0){ 
24.
							// Nutzer nicht bei Suche gefunden 
25.
							$errormessage = "Nutzer nicht gefunden!"; 
26.
						}else{ 
27.
							// Nutzer bei der Suche gefunden + ersten Array Wert löschen (Ist die Anzahl der gefundenen Ergebnisse) 
28.
							array_shift($entries[0]['memberof']);  
29.
							$in_gruppe = false; 
30.
							// Jede Gruppenmitgliedschaft mit der Gruppe von oben vergleichen und ggf. Variable setzen 
31.
							foreach($entries[0]['memberof'] as $gruppe){ 
32.
								if($gruppe == $ldap_gruppe_dn){ 
33.
									$in_gruppe = true; 
34.
35.
36.
							// Verarbeitung des Variablenwertes 
37.
							if($in_gruppe == true){ 
38.
								// Credentials OK, setze Session-Variablen 
39.
                        		$_SESSION['login_state'] = true; 
40.
                        		$_SESSION['username'] = $username; 
41.
							}else{ 
42.
								$errormessage = "Nutzer nicht Mitglied der Gruppe!"; 
43.
44.
45.
 
46.
                }else{ 
47.
			// Credentials falsch 
48.
			$errormessage = "Login fehlgeschlagen!"; 
49.
50.
		ldap_close($ds); 
51.
	}else{ 
52.
		echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds); 
53.
54.
}
Bitte warten ..
Mitglied: schneerunzel
19.02.2015, aktualisiert um 16:49 Uhr
Hallo,

vielen, vielen, vielen Dank für die Antwort!!!

mit ein paar Anpassungen komme ich dann auch ein ganze stück weiter...
Leider funktioniert es noch immer nicht. Es kommt die Meldung "Nutzer nicht Mitglied der Gruppe!"
Probiert habe ich es mit dem User max (siehe unten) und der Gruppe bdv (ebenfalls eine LDIF angehängt)

Seitens PHP habe ich noch:
01.
Warning: array_shift() expects parameter 1 to be array, null given in /srv/bdv/ldap_login.php on line 28 
02.
 
03.
Warning: Invalid argument supplied for foreach() in /srv/bdv/ldap_login.php on line 31
Die Zeilen sind an den Folgenden Text angepasst
01.
if (isset($_POST['btnLogin'])){ 
02.
        //übergebene Daten speichern 
03.
        $username = $_POST['username']; 
04.
        $password = $_POST['password']; 
05.
 
06.
        // Daten des LDAP-Servers 
07.
        $domain = 'ou=Users,dc=ldap,dc=fritz,dc=box'; 
08.
        $ldap_server = 'ldap.fritz.box'; 
09.
        $ldap_gruppe_dn = 'cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box'; 
10.
 
11.
        // Mit dem LDAP-Server verbinden 
12.
        $ds = @ldap_connect($ldap_server); 
13.
 
14.
        //Wenn Verbindung erfolgreich ... 
15.
        if ($ds){ 
16.
                //Protokollversion festlegen 
17.
                ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); 
18.
 
19.
                //Versuche mit den übermittelten Credentials eine Verbindung 
20.
                if (@ldap_bind($ds,'uid='.$username.','.$domain,$password)){ 
21.
                                                $results = ldap_search($ds,'dc=ldap,dc=fritz,dc=box', '(uid='.$username.')', array("memberof", "primarygroupid")); 
22.
                                                $entries = ldap_get_entries($ds, $results); 
23.
                                                if($entries['count'] == 0){ 
24.
                                                        // Nutzer nicht bei Suche gefunden 
25.
                                                        $errormessage = "Nutzer nicht gefunden!"; 
26.
                                                }else{ 
27.
                                                        // Nutzer bei der Suche gefunden + ersten Array Wert löschen (Ist die Anzahl der gefundenen Ergebnisse) 
28.
                                                        array_shift($entries[0]['memberof']); 
29.
                                                        $in_gruppe = false; 
30.
                                                        // Jede Gruppenmitgliedschaft mit der Gruppe von oben vergleichen und ggf. Variable setzen 
31.
                                                        foreach($entries[0]['memberof'] as $gruppe){ 
32.
                                                                if($gruppe == $ldap_gruppe_dn){ 
33.
                                                                        $in_gruppe = true; 
34.
35.
36.
                                                        // Verarbeitung des Variablenwertes 
37.
                                                        if($in_gruppe == true){ 
38.
                                                                // Credentials OK, setze Session-Variablen 
39.
                                        $_SESSION['login_state'] = true; 
40.
                                        $_SESSION['username'] = $username; 
41.
                                                        }else{ 
42.
                                                                $errormessage = "Nutzer nicht Mitglied der Gruppe!"; 
43.
44.
45.
 
46.
                }else{ 
47.
                        // Credentials falsch 
48.
                        $errormessage = "Login fehlgeschlagen!"; 
49.
50.
                ldap_close($ds); 
51.
        }else{ 
52.
                echo "Fehler beim Verbinden mit dem LDAP-Server: ".ldap_error($ds); 
53.
54.
}
01.
# Eintrag 1: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box 
02.
dn: cn=bdv,ou=Groups,dc=ldap,dc=fritz,dc=box 
03.
cn: bdv 
04.
description:  
05.
gidnumber: 10021 
06.
memberuid: jhansen 
07.
memberuid: bkopp 
08.
memberuid: hschmidt 
09.
memberuid: max 
10.
objectclass: posixGroup
01.
# Eintrag 1: uid=max,ou=Users,dc=ldap,dc=fritz,dc=box 
02.
dn: uid=max,ou=Users,dc=ldap,dc=fritz,dc=box 
03.
cn: Max Mustermann 
04.
description: Testbenutzer 
05.
gidnumber: 513 
06.
givenname: Max 
07.
homedirectory: /home/max 
08.
loginshell: /bin/bash 
09.
objectclass: posixAccount 
10.
objectclass: inetOrgPerson 
11.
objectclass: organizationalPerson 
12.
objectclass: person 
13.
objectclass: top 
14.
sn: Mustermann1 
15.
st: Schleswig-Holstein 
16.
uid: max 
17.
uidnumber: 10019 
18.
userpassword: {SSHA}vxC9pp48FSoVlPlbyT6/SnpjsOl4ZXk5
Habt Ihr noch eine Idee?
Bitte warten ..
Mitglied: MrXermon
LÖSUNG 21.02.2015, aktualisiert 23.02.2015
Vermutlich passt der Filter in Zeile 21 nicht.

Wenn man die Variable '$entries' nach Zeile 22 ausgibt so kann man sich an den richtigen Wert für den Filter Parameter heran tasten. Sobald der Filter richtig gesetzt ist, werden alle Nutzergruppen, sowie die Anzahl aller Gruppenmitgliedschaften ausgegeben.
Bitte warten ..
Ähnliche Inhalte
Windows Server
gelöst LDAP Abfrage einrichten (7)

Frage von hscheip zum Thema Windows Server ...

PHP
gelöst PHP 7 und LDAP mit Umlauten (3)

Frage von wiesi200 zum Thema PHP ...

Ubuntu
Ubuntu 16.04 LDAP und lokale Gruppen-Berechtigungen

Frage von adm2015 zum Thema Ubuntu ...

Neue Wissensbeiträge
Viren und Trojaner

Link: Neues Botnetz über IoT-Geräte

Information von certifiedit.net zum Thema Viren und Trojaner ...

Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Windows 10
Seekrank bei Windows 10 (18)

Frage von zauberer123 zum Thema Windows 10 ...

Switche und Hubs
gelöst VLAN für Gäste WLAN einrichten über FritzBox und Switch (10)

Frage von Elo-14 zum Thema Switche und Hubs ...

Windows Server
Frage zu Server Rack (10)

Frage von rainergugus zum Thema Windows Server ...