Le Thu, 20 Jan 2005 19:40:16 +0100 JusTiCe8 <[EMAIL PROTECTED]> a �crit:
> Bonsoir, > > Fran�ois Boisson a �crit : > > >Bonjour, > > > > > >[...] > >unlink ($RACINE.$PASS.".old"); > >rename $RACINE.$PASS , $RACINE.$PASS.".old"; > >rename $RACINE.$PASS_TMP , $RACINE.$PASS; > >chown 0,0,$RACINE.$PASS; > ># chmod 0600,$RACINE.$PASS; > >chmod 0644,$RACINE.$PASS; > > > >o� $RACINE = "/etc", $PASS="passwd" et $PASS_TMP="passwd1". > >[...] > > > > > une id�e comme �a : > > si (justement) passwdl est vide (pour une raison lambda), le rename va > agir comme ilf aut et donc, /etc/passwd sera... vide lui aussi. Ce qui > expliquerai la "disparition" de passwd1. Dans ce cas, le script aurait �t� utilis� et je l'aurais retrouv� dans les logs d'apache, je rerecherche... Bingo...! 172.207.33.240 - - [19/Jan/2005:17:50:49 +0100] "GET /cgi-bin/script_pwd.cgi?user=default&old_pwd=default&new_pwd=http://www .google.fr/search%3f<balisexss>%22%27&new_pwd_ver=default HTTP/1.1" 200 242 �a concorde, par contre je viens de reproduire tel que les diff�rents appels(il y en a eu 5) au script perl et n'ai eu aucune erreur. Donc effectivement, l'erreur vient de l� mais je ne vois pas comment elle a pu arriver. (Le script est en fin de message pour les perlophiles) > > Pour la pauvre machine ( ;) ) sauvagement �teinte, l'usage des magic > syskey aurait �t� plus appr�ci�e par celle ci (si activ�es dans la > conf noyau). Ou une extinction � distance. > Pour l'extinction � distance, sans passwd, pas de connexion possible, sinon j'aurai directement r�gl� le pbm. Quant aux magic syskey, je n'y pense jamais au moment de la configuration du noyau mais c'est une bonne id�e. Fran�ois Boisson ---- script Perl pour les amateurs ----- use Time::Local; print "Content-type: text/html\n\n"; # Get the input read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } $RACINE="/etc/"; # $PASS = "shadow"; # $PASS_TMP = "shadow1"; $PASS="passwd"; $PASS_TMP = "passwd1"; $user = $FORM{'user'}; $new_pwd = crypt($FORM{'new_pwd'}, "FB"); $old_pwd = $FORM{'old_pwd'}; print "<HTML>"; print "<HEAD>"; print "<TITLE>Conclusion </TITLE>"; print "</HEAD>"; print "<BODY>"; print "<FONT SIZE=4>"; print "<HR>"; print "<LI>Utilisateur = $user<BR></LI>\n"; print "<HR>"; # attend une �ventuelle fin while (-e "/tmp/__script_pwd") { } #Path securit� $ex_path = $ENV{"PATH"}; $ENV{"PATH"} = "/bin:/usr/bin"; #let'sgo 1) drapeau system("touch /tmp/__script_pwd"); open(FIN,">".$RACINE.$PASS_TMP) || die("M'enfin ! Y a un bug !"); open(DEB,$RACINE.$PASS); $heure = localtime(); $logger = "Appel script_passwd a $heure\n"; open(LOG,">>/var/log/motdepasse.log"); print LOG $logger; close(LOG); $logger = "Appel sans succes\n"; while(<DEB>) { if (m/^$user:/) { $ligne = $_; ($qui , $mot ,$fin) = ($ligne =~ /([^:]+):([^:]+):(.*)/); # print "<LI>",$qui; # cas d'un changement de mot de passe $heure = localtime(); if ($mot ne "!") { $cle = substr ($mot,0,2); print "<LI>",crypt($old_pwd,$cle),"<BR></LI>\n"; $logger = "Changement pour $qui a $heure\n"; } # sinon utilisateur sans mot de passe else { print "<LI>Creation d'un mot de passe (circonstances enregistrees)<BR></LI>\n"; print "<LI> origine: machine $ENV{'REMOTE_ADDR'} heure $heure<BR></LI>\n"; $logger = "Creation pour $qui par$ENV{'REMOTE_ADDR'} a $heure\n"; } if ((($mot eq crypt($old_pwd,$cle)) || ($mot eq"!")) && ($FORM{'new_pwd'} eq $FORM{'new_pwd_ver'})) { print "<LI>Changement de mot de passe de",$user,"<BR></LI>\n"; $logger = "OK: ".$logger; print FIN $qui,":",$new_pwd,":",$fin,"\n"; } else { print FIN $ligne;} } else { print FIN }; } print "<LI>Si il y a eu changement de mot de passe, cela est ecrit ci-dessus sinon refaire la manoeuvre<BR></LI>"; close(FIN); close(DEB); # affichage environnement open(LOG,">>/var/log/motdepasse.log"); print LOG $logger; close(LOG); #print "<HR>"; #while (($key,$val) = each %ENV) { # print "<LI>$key =$val<BR></LI>\n";} print "<HR>"; unlink ($RACINE.$PASS.".old"); rename $RACINE.$PASS , $RACINE.$PASS.".old"; rename $RACINE.$PASS_TMP , $RACINE.$PASS; chown 0,0,$RACINE.$PASS; # chmod 0600,$RACINE.$PASS; chmod 0644,$RACINE.$PASS; #$ex_path = $ENV{"PATH"}; #$ENV{"PATH"} = "/bin:/usr/bin"; #while (($key,$val) = each %ENV) { # print "<LI>$key =$val<BR></LI>\n";} #print "<HR>"; chdir "/var/yp"; system ("make > /dev/null"); # OK, c'est bon unlink "/tmp/__script_pwd"; $ENV{"PATH"} = $ex_path; print "</FONT>"; print "</BODY>"; print "</HTML>";

