Question Jusqu'où irez-vous avec une commande 'rm -rf /'?


Je me suis souvent demandé à quel point le système va réellement arriver si vous courez rm -rf /. Je doute que le système d'exploitation soit capable de se supprimer (?)

Question bonus: Après l'exécution de la commande, sera rm se sont retirés?

Mettre à jour: Je l'ai testé dans quelques distributions principales d'Unix en utilisant VirtualBox et les réponses décrivent exactement ce qui se passe. Si les paramètres corrects sont donnés, rm supprime tous les bits physiques de données sur le disque. Cependant, j'ai rencontré quelques problèmes lors de l'utilisation d'une version de rm autre que celle de GNU. Par exemple, je pense que BusyBox a sa propre version et que cela ne vous permet pas de supprimer autant que possible.

Cette question était un Super User Question de la semaine.
  Lire le 7 juillet 2011 entrée de blog pour plus de détails ou soumettre votre propre Question de la semaine.


200
2017-07-20 13:48


origine


C'est drôle que vous ayez posé cette question. Je répondais simplement à une autre question de rm -f sur un autre forum et commençais à me souvenir d'un article que j'avais lu il y a quelque temps. Heureusement, je l'ai enregistré pour des moments comme celui-ci: LA histoire d'horreur Unix classique Outre le fait qu'il est intéressant de voir jusqu'où cela ira ... Je pense que c'est un article très bien écrit et une bonne lecture en général! - akseli
J'ai juste essayé sudo rm -rf / sur tinycore / microcore linux et il semble que l'OS protège plusieurs répertoires (/ sys et autres) contre la suppression. - n0pe
j'ai essayé rm -f /bin/rm une fois que. Malheureusement, cela a fonctionné, et j'ai passé la prochaine heure à obtenir la bonne version de rm de retour de coreutils GNU. - squircle
Attends une seconde, je vais essayer ... - Martijn Courteaux
Je fais ça au Apple Store tout le temps - eggie5


Réponses:


Si tu as rm à partir de GNU coreutils (le plus probablement si c'est une distribution Linux normale), rm -rf / sera refusé par la protection intégrée (selon la page de manuel et Wikipedia, ne l'ont pas essayé).

Vous pouvez outrepasser cette protection avec --no-preserve-root. rm va alors supprimer tout ce qu'il peut éventuellement, sans s'arrêter après avoir tenté de supprimer chaque fichier. Bien sûr, cela ne supprimera pas les systèmes de fichiers virtuels comme /proc et /sys, mais cela n'est pas pertinent - cela supprimera tout sur votre disque.

Une fois la commande terminée, votre disque sera effacé, y compris le système d'exploitation. Le noyau et les processus actuels continueront à s'exécuter depuis la mémoire, mais de nombreux processus mourront car ils ne pourront pas accéder à certains fichiers. Le système d'exploitation ne pourra pas démarrer la prochaine fois.


188
2017-07-20 14:36



Exactement ce que je cherchais. Maintenant, utilisez ce pouvoir POUR PRENDRE LE MONDE. - n0pe
+1 spécialement pour --no-preserve-root parce que cela n'est généralement pas mentionné. - Matěj G.
@MaxMackie, il est intéressant de noter que les pirates ont très rapidement trouvé que c'était le moins chose utile qu'ils pourraient faire à un utilisateur. Il détruit toutes les données pouvant être utilisées pour des gains monétaires et empêche le pirate d'exploiter davantage la machine. Comme un chat avec un insecte, vous ne voulez pas le tuer, vous voulez juste jouer avec lui pendant un certain temps parce que c'est amusant. - zzzzBov
Pour répondre à l'autre question du PO, oui, rm va se retirer. Il est tout à fait possible de modifier ou de supprimer un exécutable même si une instance est en cours d'exécution. Il continuera aussi à fonctionner et ne sera pas affecté par le changement. - thomasrutter
Je voudrais mentionner "chmod -R user: user *" à /, car c'est aussi une erreur récursive et coûteuse. Je l'ai fait une fois et je suis arrivé à mi-chemin / à la maison au moment où j'ai pu avorter. / bin / boot / etc / dev appartenait. Heureusement, le serveur a continué à fonctionner pendant que je passais les heures suivantes manuellement et à réinitialiser les droits de propriété d'un système de référence. Cependant, personne d'autre ne pourrait utiliser su ou sudo par la suite. Finalement, découvert que / bin / su n'avait plus son bit setuid défini. Prenez note pour l'avenir: chowning / bin / su réinitialise son bit setuid! - Andy Lee Robinson


Pour ceux qui aiment faire des choses comme ça en écoutant de la musique techno.

Running rf-rf sous Linux (video)

Des points bonus si vous pouvez nommer les processus au moment où ils meurent.


41
2017-07-20 23:23





Mettre en place une VM et essayer de s'amuser?

Cela ira assez loin ... si vous utilisez une interface graphique, vous vous amuserez peut-être à remarquer que les choses se dégradent de manière plus visible. (les icônes des menus arrêtent le chargement, etc.)

Si vous le laissez tomber, le système d’exploitation sera quasiment indisponible, mais vous pourrez peut-être récupérer certaines données facilement.

De toute façon, vous voudrez faire une réinstallation du système d'exploitation.


22
2017-07-20 13:52



Je n'ai même pas pensé à l'essayer sur une VM. Va essayer maintenant! ooo c'est amusant. - n0pe
Ecrit par erreur la commande sur le terminal du système hôte - slhck
Découvrez l'article que j'ai posté. "L'histoire d'horreur classique d'Unix!" - akseli
Je suis au travail en ce moment et je n'ai pas le temps de passer par une installation complète d'une distribution populaire (ubuntu / slack / suse / fedora). Si quelqu'un d'autre peut cloner un fichier de disque VM et l'essayer pour nous, ce serait génial. - n0pe
Avec Amazon EC2, il devrait être rapide de lancer un de leurs AMI qui a déjà installé Linux et qui se déclenche ... - David d C e Freitas


Eh bien, l'essayer http://bellard.org/jslinux/ produit:

rm: impossible de supprimer '/ dev / pts': périphérique ou ressource occupé
  rm: impossible de supprimer '/ dev': répertoire non vide
  rm: impossible de supprimer '/ proc / swaps': opération non autorisée
  rm: impossible de supprimer '/ proc / kallsyms': opération non autorisée
  rm: impossible de supprimer '/ proc / dma': opération non autorisée

SNIP 881 entrées

rm: impossible de supprimer '/ proc / 149 / oom_adj': autorisation refusée
  rm: impossible de supprimer '/ proc / 149': opération non autorisée
  rm: impossible de supprimer '/ proc': périphérique ou ressource occupé
  rm: impossible de supprimer '/ tmp': périphérique ou ressource occupé
  rm: impossible de supprimer '/': périphérique ou ressource occupé


11
2017-07-20 14:23



Oui, je reçois aussi ces erreurs / avertissements. Est-ce que vous pensez que cette norme? - n0pe
/ proc, / sys, parfois / dev, et tous les points de montage sont des propriétés du système d'exploitation et ne peuvent pas être supprimés. - pjc50
Avec @ pcj50, ceux-ci ne sont pas littéralement des fichiers sur le disque dur, leur suppression n'est donc pas significative. - CarlF


Je me rappelle avoir été mâché sur alt.sysadmin.recovery dans les temps anciens, quand il n'y avait pas une telle chose /proc, et /dev était juste un répertoire régulier contenant des entrées pour un tas d'inodes inhabituelles ...

... mais, sur certaines variantes d'Unix (mon souvenir est HP-UX, mais cela pourrait être totalement faux), vous pourriez ne pas Supprimez la dernière entrée du répertoire pour un programme en cours d'exécution. (Bibliothèques partagées? Qu'est-ce que c'est?)

Sur de tels systèmes, si vous en avez démarré un en mode maintenance (donc rien ne fonctionnait mais votre shell, même pas init, et aucun système de fichiers secondaire n'a été monté) et exec /bin/rm -rf /, vous seriez laissé avec un système de fichiers racine complètement vide sauf cette /bin et /bin/rm survivrait.

Les habitants du monastère du diable effrayant ont jugé cela approprié et approprié.


7
2017-07-21 00:06





rm -rf / ne devrait pas être autorisé sur les mises en œuvre récentes, car il a été suggéré que cela violerait la norme POSIX:

"rm -rf /"protection sur le blog Oracle

Quoi qu'il en soit, à la fin, nous avons modifié la spécification et Solaris 10 a (depuis la version 36) une version de / usr / bin / rm (/ bin est un lien symétrique vers / usr / bin sous Solaris) et / usr / xpg4 / bin / rm qui se comporte ainsi:

[28] /bin/rm -rf /
rm of / is not allowed
[29] 

4
2017-07-20 15:58



"soulignant que si l’on tente de supprimer" / "de manière récursive, on tentera finalement de supprimer" .. "et". ", et que tout ce que nous faisons, c’est de permettre à ! "- euh, cela ne désapprouve pas le retrait tout annuaire? La spécification réelle n'autorise que .. et. dans les arguments en ligne de commande, il ne dit rien de ce que vous "tentez finalement de supprimer" - Random832
Pourquoi interdirait-il de supprimer un répertoire? Le répertoire racine est le seul concerné et sa suppression implique évidemment la suppression de "." et "..", quel que soit le répertoire en cours. Le sens commun n'est pas interdit dans l'interprétation standard. - jlliagre
Cette argumentation est un pur génie. - Nate C-K
La norme spécifie que rm n'est pas autorisé à continuer si un argument a la chaîne "." ou ".." comme composant de nom de base. Vous ne pouvez pas supprimer /foo/.. même si vous n'êtes pas en /foo. Cela fait ne pas spécifiez que vous n'êtes pas autorisé à supprimer le répertoire actuel (par ex. rm -r `pwd`) ou le parent du répertoire en cours. - Random832
En effet, j'ai mal compris la déclaration et vous avez raison. Espérons que les gars standard ont accepté le comportement plus intelligent comme étant conforme aux normes. La suppression de parties importantes, voire de la totalité du système de fichiers, rendrait rapidement le système d'exploitation non conforme aux normes. - jlliagre


Un point que personne n'a vu apparaître: les fichiers actuellement ouverts (par exemple, rm lui-même), même s'ils sont supprimés, ne disparaîtront pas du lecteur tant qu'ils ne seront pas fermés.


3
2017-07-20 17:12



C'est vrai, parce qu'ils sont chargés en mémoire non? - n0pe
Je ne sais pas si cela est sûr à assumer; le noyau pourrait très bien charger le fichier supprimé en mémoire et le retirer immédiatement sur le disque, et conserver cette copie en mémoire jusqu'à ce que le fichier soit ouvert (par exemple, jusqu'à l'exécution de rm). - Ambroz Bizjak
Je ne spécule pas. Si un programme est en cours d'exécution, sa suppression ne le supprime pas au moins sur mes machines Linux. (Remarquez que je n'ai pas testé cela depuis quelques années.) - CarlF
rm  volonté se retirer du fs - le programme est complètement chargé en mémoire, pas le fichier - warren
@MaxMackie: non pas parce qu'ils sont chargés en mémoire, mais parce qu'une référence de fichier ouvert a la même puissance qu'un lien dur (c.-à-d. Si un fichier a au moins une liaison matérielle, il ne sera pas supprimé du disque). - Lie Ryan


Pour l'avoir essayé une fois (sur un serveur qui me fait chier), connecté en tant que root, au terminal, vous perdrez presque tout. La seule chose qui ne sera pas effacée sera uniquement le processus essentiel pour le système d'exploitation.


1
2017-07-20 13:55



"[pas effacé] seulement le processus qui était essentiel pour l'OS" - oh, ne vous inquiétez pas. Contrairement à Windows, Linux effacera volontiers tout, même si le fichier est critique pour le système d'exploitation. et utilisé. /boot, /sbin, /etc, /bin, /vmlinuz? Bam, parti. Bonne chance pour démarrer sans eux - en fait, bonne chance n'importe quoi du tout une fois la suppression terminée. - Piskvor
Si je me souviens, il y avait un fichier qui n'a pas été supprimé, et j'ai laissé mon Linux fonctionner pendant plus de 4 heures. Mais bon, il est bon de savoir ce qui se passe, comme faire un chmod 777 / * -fR;) - Anarko_Bizounours
"chmod 777 / * -fR" - Cela devrait simplement rendre le système très peu sûr, mais très convivial. - Bart van Heukelom
l'a fait, c'est très peu sûr. Vous ne pouvez pas faire quelque chose, certains processus doivent avoir un droit spécifique, et le chmod 777 changera à droite, vous ne pourrez jamais charger une session, et certains processus. - Anarko_Bizounours
@BartvanHeukelom, certains outils effectueront un auto-test rapide, ou seront testés par le système pour une appropriation et des autorisations appropriées et refuseront d'agir en cas de mauvaise configuration. - killermist