Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/07/2008, à 16:08

shensi

[LDAP][SAMBA][LAM][PHP]Création d'utilisateurs, cryptage des passwd

Bonjour à tous, j'ai posé différents topics qui ont été sans réponse mais je persévère un peu et je voudrais vous soumettre une nouvelle problèmatique :

J'ai testé phpldapadmin et LAM comme interface web d'administration.
J'ai testé la création d'utilisateurs directement via mon shell
Ces 2 méthodes fonctionnent à quelques détails près....

Je me suis rendu compte que le stockage des mots de passes unix et samba pour des clients nt, linux n'était pas pareil... entre sambaNTpassword et sambaLMpassword et le unixpassword (userpassword) c'était pas le même cryptage...

sambaLMPassword : The LanMan password 16-byte hash stored as a character representation of a hexadecimal string.
sambaNTPassword : The NT password 16-byte hash stored as a character representation of a hexadecimal string.
userpassword            : ssha, sha, md5...

En passant par ldap account manager il y a la possibilité d'associer les mots de passe LM et NT au mot de passe unix. Ce qui me simplifierait pas la mal la vie. LAM le fait très bien: en fait il hash automatiquement le mot de passe unix (créé pour un utilisateur) pour les variables sambaLMpassword et sambaNTpassword. il y arrive mais moi à travers mon script php ça marche pas....

*******************************
Dans /etc/smbldap.conf j'ai trouvé un truc qui permet d'auto-incrémenter l'uid de mes utilisateurs dans mon annuaire de la manière suivante:

# Where to store next uidNumber and gidNumber available for new users and groups
# If not defined, entries are stored in sambaDomainName object.
# Ex: sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
sambaUnixIdPooldn="cn=NextFreeUnixId,${suffix}"
# sambaUnixIdPooldn="sambaDomainName=EXAMPLE,${suffix}"

En passant pas LAM il le fait tout seul. Alors que via mon script PHP y a pas moyen... Est ce que vous connaissez un peu ces mécanismes? et qu'est que je devrais faire pour que l'uid des utilisateurs s'auto incrémentent dans mon script php ?

Que dois-je faire dans mon code PHP pour pouvoir avoir le mot de passe samba associé au mot de passe unix ? et comment faire pour que l'uid de mon nouvel utilisateur s'auto-incrémente en fonction de la plage décimal que j'ai défini ?

Cordialement ... un ubuntero

Voici mon code PHP pour info :

<?php

// Returns: The password encoded in whatever form requested.
// ****************************************************************************
function encode_password ($password = "", $encoding = "clear") {
	if (strcasecmp($encoding, "clear") == 0) {
		$encodedpass = $password;
	} elseif (strcasecmp($encoding, "crypt") == 0) {
		$encodedpass = "{CRYPT}".crypt($password);
	} elseif (strcasecmp($encoding, "md5") == 0) {
		$encodedpass = "{MD5}".base64_encode(pack("H*",md5($password)));
	} elseif (strcasecmp($encoding, "ssha") == 0) {
		mt_srand((double)microtime()*1000000);
		$salt = mhash_keygen_s2k(MHASH_SHA1, $password, substr(pack('h*', md5(mt_rand())), 0, 8), 4);
		$encodedpass = "{SSHA}".base64_encode(mhash(MHASH_SHA1, $password.$salt).$salt);
	} else {
		fatal_error("Invalid password encoding method configured: $encoding");
	}

	return($encodedpass);
}

$ds=ldap_connect("127.0.0.1");
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);

$prenom =  strtolower("Jean");
$nom =  strtolower("Paul");
$login = "jpaul";
$pass = "jpaul";

if (!$ds){
	echo "Connexion impossible au serveur LDAP";					
}
else{
	// Connexion avec une identité qui permet les modifications
	$r = ldap_bind($ds, "cn=admin, dc=example, dc=local", "12345");
	
	if (!$r){
		echo "liaison impossible au serveur ldap ...";
	}
	else{
		//$prenom = strtolower($_POST['prenom']);
		//$nom = strtolower($_POST['nom']);
		//$pass = $_POST['pass'];
		//$login = $_POST['login'];
		//$pass = shell_exec("/usr/sbin/slappasswd -h '{SSHA}' -s  $pass_new");     
		//$pass=str_replace("\n", "", $pass);
		//$pass2 = str_replace("{SSHA}", "", $pass);
		
		$fl_prenom = substr($prenom, 0,1);
		// Prépare les données
		$info = array();
		$info["cn"] = "$fl_prenom$nom";
		$info['displayName'] = "$fl_prenom$nom";
		/*$info['gecos'] = "$nom $prenom";*/
		$info["GidNumber"] = "513";
		/*$info['givenName'] = "$prenom";*/
		$info["homeDirectory"] = "/home/$fl_prenom$nom";
		$info["loginShell"] = "/bin/false";

		$info["objectclass"][0] = "sambaSamAccount";     
		$info["objectclass"][1] = "shadowAccount";
		$info["objectclass"][2] = "posixAccount";     
		$info["objectclass"][3] = "inetOrgPerson";                    
		$info["sambaAcctFlags"] = "[XU         ]";       
		$info["sambaDomainName"] = "EXAMPLE";
		$info["sambaHomeDrive"] = "U:";
		/*$info["sambaKickoffTime"] = "2147483647";*/
		/*$info["sambaLMPassword"] = encode_password ($pass, $encoding = "crypt");*/
		/*$info["sambaLogoffTime"] = "2147483647";*/
		/*$info["sambaLogonTime"] = "0";*/
		/*$info["sambaNTPassword"] = encode_password ($pass, $encoding = "crypt");*/
		$info["sambaPrimaryGroupSID"] = "S-1-5-21-913048038-4193697549-4052096724-513";
		/*$info["sambaPwdCanChange"] = "0";*/
		/*$info["sambaPwdLastSet"] = "0"; <-----*/
		$info["sambaPwdMustChange"] = "0";
		$info["sambaSID"] = "S-1-5-21-913048038-4193697549-4052096724";
		$info["shadowInactive"] = "10";
		/*$info["shadowLastChange"] = "14085";*/
		$info["shadowMax"] = "365";
		$info["shadowMin"] = "1";
		$info["shadowWarning"] = "10";
		$info["sn"] = "$nom";
		$info["uid"]=$login;
		$info["UidNumber"] = "30023";
		$info["userpassword"]= encode_password ($pass, $encoding = "ssha");

		// Ajoute les données au dossier
		$r = ldap_add($ds, "uid=$login, ou=Users, dc=example, dc=local", $info);
	}
}
echo "Fermeture de la connexion";
ldap_close($ds);			
?>

Distrib: Ubuntu 9.04
Citation : Si chuck Norris te dit que ta mère est bonne... tu peux l'appeler Papa

Hors ligne

#2 Le 29/10/2008, à 12:55

djp

Re : [LDAP][SAMBA][LAM][PHP]Création d'utilisateurs, cryptage des passwd

Bonjour,

Pour ma part j'utilise les outils samba "smbldap-..." installés lors de la procédure d'installation de mon serveur LDAP mis en liaison avec un serveur samba.

Comme je rencontrais des problèmes avec les mots de passes, j'ai contacté Jerome Tournier auteur des outils qui m'a donné la solution.

echo -e "passwd\npasswd" | sudo /usr/sbin/smbldap-passwd user


Je peux maintenant affecter un mot de passe à un utilisateur de mon LDAP avec l'instruction :

 $output= shell_exec ('/bin/echo -e "'.$passwd.'\n'.$passwd.'" | sudo /usr/sbin/smbldap-passwd '.$user);

Pour exécuter le code, il faut donner les autorisation à www-data de le faire. Pour cela, modifier le fichier /etc/sudoers est nécessaire

sudo nano /etc/sudoers

# User alias specification
User_Alias     WEBADMIN = www-data


# les utilisateurs renseignés dans WEBADMIN peuvent executer les commandes définies sans mot de passe sur tous les serveurs
WEBADMIN     ALL = NOPASSWD: /usr/sbin/smbldap-userdel, /usr/sbin/smbldap-useradd, /usr/sbin/smbldap-userlist, /usr/sbin/smbldap-passwd

J'espère que cela fournira une solution même si ce n'est pas une réponse directe à la question.
Didier

Dernière modification par djp (Le 29/10/2008, à 12:57)

Hors ligne

#3 Le 28/01/2009, à 17:59

kanto

Re : [LDAP][SAMBA][LAM][PHP]Création d'utilisateurs, cryptage des passwd

Bonjour,

Djp, je suis entrain de tester ton astuce via une page php pour changer les mots de passe de mes utilisateurs ldap, dans le but que les utilisateurs de l'annuaire ldap puisse changer leur mdp depuis leur poste.
Ca marche presque....

J'utilise bien la commande suivante :

$output= shell_exec ('/bin/echo -e "'.$passwd.'\n'.$passwd.'" | sudo /usr/sbin/smbldap-passwd  '.$user);

Les variables, passwd et user sont bien renseignés, echo me renvoie bien la bonne valeur.
Sauf que la variable user n'est pas bien interprétée pas la commande smbldap-passwd, en effet si par exemple $user=toto j'ai comme résultat de la commande suivante echo

"<pre>$output</pre>"
: /usr/sbin/smbldap-passwd "user t doesn't exist"

Comme si la commande smbldap-passwd interprétait uniquement la 1ère lettre de la variable user, bizarre non....
J'ai essayé plusieurs manip remplacer '  ' par "  "...rien à faire ca passe pas

Sinon la commande sur le serveur fonctionne quand j'enlève la variable $user j'arrive à changer le mot de passe root avec n'importe quel utilisateur de l'annuaire ldap sur n'importe quel poste client, c'est pas vraiment le but recherché lol
Si quelqu'un a une piste je suis preneur...c'est peut-être uniquement une simple erreur de syntaxe
 
Pour info le serveur est sous Debian 4, samba3+openldap, apache2 et php4, poste client Xp avec authentification pgina+module ldapauth....et ca marche du tonnerre mis à part les changements de mdp!!