Forum général.général chmod 777 -R . pour tout le monde !!!!

Posté par  .
Étiquettes : aucune
0
31
déc.
2004
Bonjour à tous,
J'ai malheureusement fait une connerie sur un serveur, j'ai exécuté la commande chmod 777 -R . Et j'étais sous / en root. Donc tous mes fichiers sont permissions 777.

Au début je pensais que cela ne poserai pas trop de problème. Mais pour se connecter en telnet, il faut que le fichier securetty soit en 600. Heureusement la connexion ssh fonctionne parfaitement donc j'ai pu le modifier. Pour l'instant pas d'autres probleme, mais pas vraiment envie de rebooter la machine

a t il une solution pour retrouver rapidement les bons droits sans réinstaller la machine ?

Merci d'avance de votre aide.
  • # Hum

    Posté par  (site web personnel) . Évalué à 2.

    réponse rapide mais néanmoins soumise a la réserve d'autres commentaires : non
    • [^] # Re: Hum

      Posté par  . Évalué à 3.

      1/ Bien fait !!!! Ca t'apprendras à faire des chmod délirants sans réfléchir (je hais les admins/utilisateurs qui ont trop souvent recours au chmod 777 par facilité, parce qu'ils n'arrivent pas a accéder à un fichier/répertoire). C'est toi l'admin de la machine, j'espère? En tout cas si c'est pas toi, je le plains le pauvre.

      2/ J'espère au moins que tu as des sauvegardes? Si c'est le cas, peut-être que tu peux récupérer les droits des fichiers sauvegardés et faire le chmod qui va bien par script ....

      Je pense que tu vas t'amuser ....
      • [^] # Re: Hum

        Posté par  . Évalué à 2.

        Si t'as un tar, tar -tvf te donne les droits de tes fichiers. A partir de la un petit script devrait te permettre de rectifier la situation. Si tu a s besoin d'aide je reste a disposition (mail moi en privé ...).
  • # Toutefois ...

    Posté par  . Évalué à 3.

    C'est déjà arrivé à quelqu'un ici.
    Si tu utilises Mandrake, msec devrait être capable de les recréer pour toi ...
  • # Un PERL fite fait ....

    Posté par  . Évalué à 4.

    Voici un script PERL ecrit a l'arrache.

    En l'adaptant, et en supposant que tu as une sauvegarde, il devrait te sortir d'affaire.

    Attention, il ne génère pas les SUID bits (c'est a dire les Ss sur les droits) . A toi (ou quelqu'un d'autre) de modifier le code.

    Aparamment il ne gère pas non plus les fichiers cachés (.profile, etc ...).

    A tester avant d'utiliser!!! Je ne peux être tenu responsable d'un quelconque dysfonctionnement lié a l'utilisation de ce script.

    Licence: GPL.

    Vous êtes fortement encouragés à l'améliorer.

    PS: L'indentation a sauté lors de l'affichage.


    -----------------------------------------------------------------------------------
    #!/usr/bin/perl -w

    sub convert_rights
    {
    my $Droits=shift;

    my @tab=split(//,$Droits);
    my $Count=0;
    my $Rights=0;
    foreach(@tab) {
    #print ("Droit:$_\n");
    SWITCH: {
    if($Count==0) {
    last SWITCH;
    }
    if($Count==1) {
    if("$_" eq 'r') {
    $Rights=$Rights+0400;
    }
    last SWITCH;
    }
    if($Count==2) {
    if("$_" eq 'w') {
    $Rights=$Rights+0200;
    }
    last SWITCH;
    }
    if($Count==3) {
    if("$_" eq 'x') {
    $Rights=$Rights+0100;
    }
    last SWITCH;
    }
    if($Count==4) {
    if("$_" eq 'r') {
    $Rights=$Rights+040;
    }
    last SWITCH;
    }
    if($Count==5) {
    if("$_" eq 'w') {
    $Rights=$Rights+020;
    }
    last SWITCH;
    }
    if($Count==6) {
    if("$_" eq 'x') {
    $Rights=$Rights+010;
    }
    last SWITCH;
    }
    if($Count==7) {
    if("$_" eq 'r') {
    $Rights=$Rights+04;
    }
    last SWITCH;
    }
    if($Count==8) {
    if("$_" eq 'w') {
    $Rights=$Rights+02;
    }
    last SWITCH;
    }
    if($Count==9) {
    if("$_" eq 'x') {
    $Rights=$Rights+01;
    }
    last SWITCH;
    }
    }

    $Count++;
    }

    return $Rights;

    }
    sub changemod
    {
    my $Droits=shift;
    my $Fichier=shift;

    print "chmod sur $Fichier, nouveaux droits $Droits\n";
    my $Rights= convert_rights($Droits);
    printf("Attribution des droits %o sur $Fichier\n",$Rights);
    unless(chmod $Rights,$Fichier) {
    print STDERR " ->Changement de droit sur $Fichier impossible \n";

    }
    else {
    print " -->Changement de droits sur $Fichier OK\n";
    }

    }

    sub change_rights
    {
    my $Line=shift;
    chomp $Line;
    #print("Line: $Line\n");

    if ($Line) {
    @L=split(/\s+/,$Line);
    #print ("Line2: $L[0]\n");
    #print ("Line3: $L[8]\n");
    if (-f $L[8]) {
    #print ("$L[8]\n");
    changemod($L[0],$L[8]);
    }
    else {
    print STDERR "Le fichier $L[8] n'existe pas(plus) sur cette machine \n";
    }
    }
    }

    # Recuperation de la liste des fichiers
    $Sauvegarde=$ARGV[0];

    open (COMMAND, "tar -tvf $Sauvegarde |") or die "Impossible d'ouvritr le fichioer $Sauvegarde\n$!";

    while (<COMMAND>) {
    change_rights($_);
    }

    close(COMMAND);

    • [^] # Re: Un PERL fite fait ....

      Posté par  . Évalué à 2.

      J'ai oublié: mode d'emploi: restore_rights.pl fichier_tar
      Attention, il faut être à l'endroit ou la sauvegarde a eu lieu pour que ca marche. Mais je le rappelle, j'ai écrit ca vite fait, et j'ai un peu la flemme de l'améliorer (pas le temps ...).
    • [^] # Re: Un PERL fite fait ....

      Posté par  (site web personnel) . Évalué à 3.

      Je ne peux être tenu responsable d'un quelconque dysfonctionnement lié a l'utilisation de ce script
      Toute facon son systeme est déjà foutu :)
      • [^] # Re: Un PERL fite fait ....

        Posté par  . Évalué à 3.

        Euh ... disons que s'il a des données importantes, il peut tenter de les récupérer en montant le disque dur dans une autre machine ....
        Mais c'est clair que le systeme ne doit pas se sentir très bien :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.