php / sed/ mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : php / sed/ mysql

Re: php / sed/ mysql

par villeurdav » 12 sept. 2013, 14:40

PROBLEME RESOLU !!!!!

Comment remplacer les mots de passes cryptés de mes users dans /etc/shadow par ceux de ma base de données.
voila comment je m'y suis pri :

//
connexion à la base de données pour récupérer les users et passwd
$connect_ispcp=mysql_connect("serveur,xxxx,xxxxxx");
mysql_select_db("ispcp",$connect_ispcp);
$query = "SELECT mes colonnes de ma table . ";
$result = mysql_query($query,$connect_ispcp);


// pour chaque username
while ($data = mysql_fetch_object($result))

{
// traitement sur le username pour echaper la majorite des caracteres voir preg_quote()(
$data->username= preg_quote($data->username, '/');
// on echape les @ car mes users sont sous la forme webmaster@.....
$user= str_replace("@","\@","$data->username");
// et on desechappe les - pour l'adresse de mon domaine bibi-titi.fr
$user= str_replace("\-","-","$user");

$data->passwd= preg_quote($data->passwd, '/');
// on desechape les . qui n'aurait pas du l'etre dans le mot de passe.
$passwd= str_replace("\.",".","$data->passwd");

//traitement sed qui va remplacer l'ancien passwd par le nouveau

// '.$user.\:[^:]*\:' veut dire : toute chaine commencant par la variable user : suivi de n'importe quel caractere sauf : suivi de :

echo "\n".$command = "/bin/sed -i s/'".$user."\:[^:]*\:'/'".$user."\:".$passwd."\:'/g /cheminduscript/shadow";
exec($command);

}


et voila.
j'espere que ca sera utile pour d'autre.

David.

Re: php / sed/ mysql

par villeurdav » 08 sept. 2013, 22:15

je te tiens au courant merci :)

Re: php / sed/ mysql

par moogli » 08 sept. 2013, 17:56

ok, donc je te conseil la seconde solution.

essai avec un fichier bateau et quelque ligne voir ce que ça donne et s'il y a des choses que tu ne comprend pas ou ne vois pas comment faire tu sais comment faire ;)


@+

Re: php / sed/ mysql

par villeurdav » 08 sept. 2013, 17:12

ho oui , j'ai pas envie de jouer avec le feu, lol , prudence est mère de sûreté :P

mais j'ai de la chance les mots de passe que je recupere sont crypté de la meme forme que ceux que je retrouve dans mon /etc/shadow, donc ca doit marcher , j'ai fais un essai pour un et ca marche...

Re: php / sed/ mysql

par moogli » 08 sept. 2013, 15:27

tu as deux solutions.

La première n'est pas utilisable tu n'as pas les mots de passe en clair.

Je te conseil sauvegarder ce fichier avant modification ;)


@+

Re: php / sed/ mysql

par villeurdav » 08 sept. 2013, 13:15

merci Moogli pour ces pistes,
en fait , j'avais oublié de préciser
c'est mes anciens users que je j'ai déjà récupéré sur mon noveau panel et dans le nouveau systeme , ils ont un passwd temporaire, ( dans mon script d'avant j'ai fais comme ca ct plus facile)
donc ils sont deja dans mon systeme, et en fait je veux faire un script qui automatise le changement de mot de passe dans mon /etc/shadow
et zou je balance mon script php et hop il va recuperer les passwd dans la bdd et les mettre dans /etc/passwd pour chaque user

merci :)
David

Re: php / sed/ mysql

par moogli » 08 sept. 2013, 11:07

Salut,

Il est généralement préférable d'utiliser la commande système pour ne rien louper :) (utilise par exemple la fonction exec, couplé avec un sudo car il y a peu de chance que l'utilisateur Apache ai les droits système :) )

Si tu es sur des modif a faire sur le fichier tu peux :

- donner les droits en lecture / écriture sur le fichier pour l'utilisateur qui fait tourner le serveur web (ou php si ce n'est pas le même )
- récupérer le contenu du fichier avec la fonction file (c'est utilisateur par ligne ?)
- traiter le fichier comme un fichier csv
- boucler sur le tableau et faire une requête sgbd pour chaque utilisateur (pense aux requêtes préparées)
- modifier le mot de passe dans le tableau
- remettre le tableau dans le fichier (implode, file_put_contents)


@+

php / sed/ mysql

par villeurdav » 08 sept. 2013, 09:51

Bonjour,

débutant je me lance ,
je fais la migration de sites car on change de panel, et

je dois dans mon /etc/shadow/ changer le mot de passe temporaire des users recupérés. par leur vrai mot de passe que je vais recuperer dans une bdd

Aller récupérer le mot de passe dans la base ,pas de souci , je maitrise,

mon souci c'est la ou j'ai le symdrome de la page blanche, c'est comment remplacer le mot de passe pour chaque user dans mon /etc/shadow/

*dans ma base :

user1 passwd1

user2 passwd2

*dans /etc/shadow

user1:passwdcrypté:0:99999:7:::

etc...
et donc je veux faire un script qui pour chaque user de /etc/shadow on va remplacer le mot de passe crypté correspondant entre les ":"
et la etant débutant je comprends rien , je ne sais pas comment m'y prendre ... sed .? genre sed -i s/'passwd de shadow'/'$passwdbdd'/g etc/shadow remplacer des string ...? addashes()?

si un dieu de php peut me donner une voie à suivre je suis preneur .
merci pour votre aide
David :)