Forum Astuces.divers [Terminal] Protéger le contenu d'un répertoire contre les fausses manipulations

Posté par .
Tags : aucun
0
4
nov.
2004
Parfois le geek décide de faire le ménage dans ses dossiers plus vite que dans son logement, et il est alors tenté de lancer une commande un peu radicale du genre :
$ rm -rf (Suppression récursive sans confirmation)
L'ennui est que l'incident est vite arrivé.
Pour ajouter facilement une petite protection, il suffit de créer un fichier "-i" dans un répertoire avec la commande suivante :
$ > -i (création d'un fichier vide appelé "-i")
Lorsque rm va arriver dans ce dossier, il va le prendre en paramètre, et l'interpréter comme une demande de passage en mode interactif.
rm va donc demander une confirmation pour la suppression de chaque fichier et dossier qui s'y trouve.
Cette astuce est vieille comme Unix, devrait fonctionner avec la grand majorité des interpréteurs de commande, et sauver quelques fichiers :)
M
  • # Hmm

    Posté par . Évalué à 2.

    $> mkdir plop
    $> touch $'plop/-i'
    $> ls plop
    -i
    $> rm -rf plop
    $> ls plop
    ls: plop: No such file or directory

    avec zsh-4.2.1 sous FreeBSD 5.2.1-RELEASE-p9 ca ne semble pas fonctionner ...
    • [^] # Re: Hmm

      Posté par . Évalué à 1.

      tout pareil sous debian sarge avec bash 2.05b. En fait, le f annule tout les effets de -i je pense : mon rm est en fait un alias 'rm -i', mais rm -f (donc rm -i -f) ne se pose pas de questions...
  • # Meuh non...

    Posté par (page perso) . Évalué à 3.

    C'est DANS le repertoire que la supression est interactive.

    mkdir /tmp/plop
    touch /tmp/plop/coco
    cd /tmp/plop/
    > -i
    rm -rf *
  • # Debian Sarge...

    Posté par . Évalué à 1.

    maxime@MAX:~/toto$ ls
    -i important.txt tresimportant.txt
    maxime@MAX:~/toto$ rm * -rf
    maxime@MAX:~/toto$ ls
    -i

    Mouais... Ca m'a pas l'air très efficace... Et comment je le vire le -i ? :D (à part dans l'explorer de fichier ;) )
    • [^] # Re: Debian Sarge...

      Posté par (page perso) . Évalué à 3.

      Effectivement, ça change selon la position de l'étoile. Il faut croire que c'est le dernier arrivé premier (seul) servit. L'option qui arrive la dernière entre -i et -f gagne la bataille.

      Pour supprimer ton -i, il faut mettre -- qui départage les options et les autres arguments.

      theo@fermat:~/tests$ > -i; touch important.txt; touch tresimportant.txt
      theo@fermat:~/tests$ ls
      -i important.txt tresimportant.txt
      theo@fermat:~/tests$ rm -rf *
      rm: détruire fichier régulier vide `important.txt'? n
      rm: détruire fichier régulier vide `tresimportant.txt'? n
      theo@fermat:~/tests$ ls
      -i important.txt tresimportant.txt
      theo@fermat:~/tests$ rm * -rf
      theo@fermat:~/tests$ ls
      -i
      theo@fermat:~/tests$ rm -- -i
      theo@fermat:~/tests$ ls
      theo@fermat:~/tests$
      • [^] # Re: Debian Sarge...

        Posté par . Évalué à 1.

        Ou pour effacer, un simple rm ./-i suffit !
        • [^] # Re: Debian Sarge...

          Posté par . Évalué à 2.

          Ou unlink -i. Chez moi, avec la complétion automatique, ça fait un caractère de moins \o/ .

          C'est important, un caractère de moins, parce que, à force de taper des inepties (comme par exemple cette parenthèse (et celle-ci) ), il arrive que le clavier se blo
    • [^] # Re: Debian Sarge...

      Posté par (page perso) . Évalué à 2.

      C'est idiot de taper rm -fr *, il faut taper rm -fr .* *, ou encore mieux : find -exec rm '{}' ';' si on a vraiment beaucoup trop de fichiers dans notre dossier :-)


      Bon ok ok, ca n'est pas le problème, mais quand même...
    • [^] # Re: Debian Sarge...

      Posté par (page perso) . Évalué à 2.

      Par ailleurs, c'est complètement insensé de mettre les paramètres après les noms de fichiers, sauf cas exceptionnel du genre mplayer.

      Tout programme correctement écrit s'appelle sous la forme "binaire [options...] [fichiers...]".
  • # Mandrake 10

    Posté par . Évalué à 1.

    Ca fonctionne nickel sur mandrake 10.
    il y a un alias rm -i par defaut.
    j'ai crée un fichier par :
    touch -- -1
    et lorsque je lance rm -fr * sur un repertoire, j'obtiens
    rm: invalid option -- 1
    Pour en savoir davantage, faites: « rm --help ».
    et aucun des fichiers et des repertoires n'est effacé car -1 se retrouve en tête de liste des fichiers.

    Ca peut servir.
  • # plop

    Posté par (page perso) . Évalué à 3.

    C'est un bug ce truc ?

    Si je créé un fichier qui s'appelle ";rm -fr /" ça donne quoi ?
    Bash va interpréter ce nom de fichier ?

    L'association LinuxFr ne saurait être tenue responsable des propos légalement repréhensibles ou faisant allusion à l'évêque de Rome, au chef de l'Église catholique romaine ou au chef temporel de l'État du Vatican et se trouvant dans ce commentaire

    • [^] # Re: plop

      Posté par . Évalué à 3.

      Ca ne marchera pas, pour deux raisons :

      1) Bash va effectivement placer ce nom dans le développement de l'étoile, mais il ne va pas l'interpréter, seulement le passer à rm comme un paramêtre. C'est rm qui, voyant un -i, l'interpète comme une option, et non un fichier.

      2) Tu ne peux pas créer de fichier contenant le caractère '/' ;-) .


      A mon avis, le danger de ce comportement, car il y en a un, réside principalement dans le passage d'options stupides ou dangereuses à certains programmes. tmpwatch, par exemple, était vulnérable à un problème de ce type : http://www.ciac.org/ciac/bulletins/l-005.shtml(...) .

      Il est aussi possible de s'en servir pour des attaques locales en déni de service, comme par exemple en créant un fichier --version dans /tmp . Si l'administrateur a codé en dur un "rm -rf /tmp/*" à chaque reboot, il va avoir une surprise.

      Cela dit, dans le cas de rm, la solution est évidemment d'utiliser l'option --. Mais il existe peut-être d'autres programmes, mal conçus, qui sont sensibles à ce genre d'attaques.
      • [^] # Re: plop

        Posté par (page perso) . Évalué à 2.

        > 2) Tu ne peux pas créer de fichier contenant le caractère '/' ;-) .

        Ah merde moi aussi je m'ai eu :-)
        Pourtant je croyais qu'en l'échappant... ben non. Et effectivement évidemment normal.
    • [^] # Re: plop

      Posté par (page perso) . Évalué à 2.

      Aucun souci, car les espaces et autres caractères spéciaux vont être échapés.

      Ca reviendrait à taper :

      $ rm \;rm\ -fr\ \/

      ou encore

      $ rm ";rm -fr /"
  • # Question con

    Posté par . Évalué à 1.

    Comment fait-on en console pour passer sous $> ? (bash dans gnome-teminal)
    Quel est le role de ce "mode console"?
  • # Solution bien plus propre

    Posté par . Évalué à -1.

    Je vous laisse faire un man chattr
  • # chattr

    Posté par . Évalué à 1.

    Au delà des permissions habituelles sur les fichiers des EXT2 et EXT3 (et peut-être d'autres), d'autres attributs peuvent être modifiés via la commande "chattr" ('i' permet par exemple d'empêcher toute modification du fichier quelques soient les permissions, 'u' permet une commande "undelete" et de récupérer effectivement le fichier... pour le reste des options... "man chattr" ;)).

Suivre le flux des commentaires

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