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>";