PDA

Bekijk Volledige Versie : LDAP password lijkt niet te worden geaccepteerd



Joni
22/05/05, 12:45
Hallo,

Allereerst sorry voor het multiposten, maar ik ben er niet zeker van
waar dit bericht nou thuishoort (in de Linux- of serverside-hoek). In
ieder geval: ik ben bezig met een PHP webinterfaceje om LDAP gebruikers
aan te kunnen maken op een Linux systeem. Het toevoegen van de
gebruikers lijkt goed te gaan (als ik '$ getent passwd' doe staan ze
netjes in het lijstje), maar ik kan niet inloggen als de betreffende
gebruikers (permission denied), ook als de shell gewoon /bin/bash is. Ik
vermoed dat het ergens niet helemaal goed gaat bij het aanmaken van het
password:

// Add user to LDAP
$info['objectClass'][0] = 'inetOrgPerson';
$info['objectClass'][1] = 'posixAccount';
$info['objectClass'][2] = 'shadowAccount';
$info['cn'] = $_POST['username'];
$info['sn'] = $_POST['username'];
$info['gidNumber']= (int) $_POST['gidnumber'];
$info['uid'] = $_POST['username'];
$info['uidNumber'] = (int) getFreeUid();
$info['homeDirectory'] = $_POST['homedir'];
$info['loginShell'] = $_POST['shell'];
$info['userPassword'] = crypt($_POST['password1'], '$1$'.genPasswd(8).'$');
$dn = 'uid='.$_POST['username'].','.$GLOBALS['ldap_user_suffix'];

// add data to directory
if (!ldap_add($GLOBALS['ldap_conn'], $dn, $info))
{ echo '<span class="error">An unknown error occured while adding
user!</span><br><br>'; return; }

Hierbij is is de functie genPasswd niets anders dan een random password
generator. Bij de beschrijving in de PHP docs voor de functie crypt
staat dat de salt van een MD5 hash bestaat uit $1$<8 chars>$ en toch
lijkt Linux niet blij met dit password... Ideeen iemand?

Oh ja en nog een vraag: als ik de functie ldap_add uitvoer en er klopt
iets niet dat krijg ik een warning met een melding wat er aan de hand
is, maar in een productieomgeving zullen deze warnings meestal niet aan
staan. Hoe kan ik nou toch die warning opvangen in een string? ldap_add
returned slechts true of false.

Bedankt,
Jonathan

Heiko
22/05/05, 16:05
Joni wrote:

> ik ben bezig met een PHP webinterfaceje om LDAP gebruikers
> aan te kunnen maken op een Linux systeem. Het toevoegen van de
> gebruikers lijkt goed te gaan (als ik '$ getent passwd' doe staan ze
> netjes in het lijstje), maar ik kan niet inloggen als de betreffende
> gebruikers (permission denied), ook als de shell gewoon /bin/bash is.
> Ik vermoed dat het ergens niet helemaal goed gaat bij het aanmaken van het
> password:
>
> [..knip..]
>
> $info['userPassword'] = crypt($_POST['password1'], '$1$'.genPasswd(8).'$');
>
> [.knip..]
>
> Hierbij is is de functie genPasswd niets anders dan een random password
> generator. Bij de beschrijving in de PHP docs voor de functie crypt
> staat dat de salt van een MD5 hash bestaat uit $1$<8 chars>$ en toch
> lijkt Linux niet blij met dit password... Ideeen iemand?

Het encrypten van LDAP-passwords in PHP doe ik zo, en dat werkt:
(weliswaar md5() ipv crypt(), maar zal op ongeveer hetzelfde neerkomen
denk ik)

function pwcrypt($password)
{
$r = "{MD5}". base64_encode(pack("H*", md5($password)));
return $r;
}


> Oh ja en nog een vraag: als ik de functie ldap_add uitvoer en er klopt
> iets niet dat krijg ik een warning met een melding wat er aan de hand
> is, maar in een productieomgeving zullen deze warnings meestal niet aan
> staan. Hoe kan ik nou toch die warning opvangen in een string? ldap_add
> returned slechts true of false.

Dat kan in PHP bijv. zo:

echo ldap_error($ldap_connectie) . "<br />\n";

Wat ook nuttig kan zijn, is in /etc/(../)slapd.conf "loglevel" op 256
(of evt ander level, zie: man slapd.conf) te zetten. De ldap-server
(slapd) herstarten, je actie opnieuw uit te voeren, en dan de log
file(s) in /var/log bekijken.

Wellicht goed om te weten (ik had moeite het te vinden), ook al heb jij
er zo te zien geen last van:

Als je LDAP-server geen connecties via het ldap-protocol versie 2
accepteerd, maar alleen protocol versie 3 (maw in /etc/(../)slapd.conf
staat "allow bind_v2"). Dan moet je om verbinding te krijgen met PHP de
het volgende statement gebruiken *na* ldap_connect() en *voor* ldap_bind():

$succes = ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);


Jij hebt het blijkbaar voor elkaar om systeem-users in te laten loggen
via LDAP (even afgezien van dat password probleem). Ik neem aan dat je
dat via PAM ("libpam-ldap") doet?

Ik heb hier laatst even wat over gelezen (howto, google), en het zag er
wat complex en verwarrend uit. Zou jij misschien samengevat kunnen
vertellen wat/hoe dat te configureren? Alvast bedankt.

Heiko