Pour enrôler plus d'un millier d'utilisateurs dans un réseau Edubuntu, j'utilise un script en PHP.
Le script fonctionne parfaitement si l'on excepte le fait que les mots de passe ne sont pas correctement définis dans /etc/shadow.
En fait, j'ignore comment encoder les mots de passe qui figurent en clair dans le fichier CSV contenant toutes les informations:
nom d'utilisateur
nom réel
mot de passe
groupe
Voici le script dans l'état
- Code: Tout sélectionner
<?php
$eleves=file('eleves2008.csv');
// lecture ligne par ligne du fichier CSV => $eleves[]
foreach($eleves as $key => $unEleve){
$line = explode(',',rtrim($unEleve));
if($line[0]!='""')
$eleves[$key]=$line;
}
$listeclasses=array();
$n=0;
$nombreEleves = count($eleves);
while($n < $nombreEleves)
{
// suppression des guillemets du CSV
$user=str_replace("\"",'',$eleves[$n][0]);
$mdp=str_replace("\"",'',$eleves[$n][1]);
$nom=str_replace'"\"", '', $eleves[$n][2]);
$classe=str_replace("\"",'',$eleves[$n][3]);
// creation du groupe et du repertoire de la classe
if((!in_array($classe,$listeclasses) AND $classe!=""))
{
system ("/usr/sbin/groupadd $classe");
system("mkdir /home/eleves/$classe");
system("chown root:$classe /home/eleves/$classe");
$listeclasses[]=$classe;
}
// cryptage du mot de passe
// NE FONCTIONNE PAS!!!
$crpassword = crypt($mdp);
// NE FONCTIONNE PAS!!!
$todo = "/usr/sbin/useradd $user -g $classe -m -c $nom ";
$todo .= "-p $crpassword -d /home/eleves/$classe/$user -k /etc/squelette";
system($todo);
system ("chown -R $user:$classe /home/eleves/$classe/$user");
// mise à jour de NIS
system ("make -C /var/yp");
$n++;
}
?>
La fonction "crypt" renvoie bien un mot de passe crypté qui ressemble à ce qu'il devrait être: quelque chose comme :$1$evMmXOwB$FdN5vD9oYrHL42JgPpHCG1
Mais l'utilisateur ne peut pas s'identifier.
Il suffit de faire une modification manuelle du mot de passe
# passwd machin
pour que tout fonctionne.
Le problème est donc bien dans la fonction "crypt" qui ne fait pas le travail que je crois.
Merci pour toute suggestion.
-
ymai
- Messages : 371
- Géo : Brüsel - Les Cités Obscures (BE)