GNU/Linux >> Znalost Linux >  >> Linux

Proč je příšerné 'rm -rf /' vůbec povoleno?

Proč v příkazu rm není žádná taková ochrana?

Existují již tři zabezpečení:

  • -r přepínač, bez kterého nelze adresář odstranit.
  • -i přepínač, který ověří, že skutečně chcete smazat to, o co jste požádali. Aliasing rmrm -i zapne tuto ochranu, pokud nepřidáte -f přepínačem jej vypněte.
  • Vlastnictví souboru, které brání všem uživatelům kromě root z odstranění kořenového adresáře.

Sada nástrojů Unix je jako motorová pila:byla navržena tak, aby dělala velmi výkonné věci a aby ji ovládali lidé, kteří rozumí tomu, co dělají. Kdo neopatrně našlapuje, pravděpodobně si nakonec ublíží. Tím nechci říct, že zkušení nedělají chyby, a Sun a ostatní očividně cítí, že uživatelé s root potřebují být chráněni před sebou samými.

Neměl by však tento konkrétní případ představovat výjimku z tohoto pravidla?

Lidé se ptají, proč nemůžeme na rm umístit chránič čepele motorová pila minimálně od 80. let 20. století. (Pravděpodobně déle, ale moje historie s Unixem nesahá dále.) Musíte si položit další otázky:

  • Když přidáváme výjimky, co jiného by mělo být považováno za posvátné? Měli bychom zabránit rekurzivnímu mazání čehokoli v kořenovém adresáři, abychom se vyhnuli stejně zničujícím chybám, jako je rm -rf /* ? A co domovský adresář uživatele? A co /lib nebo /bin ? Museli bychom mít speciální verzi rm zabránit těmto chybám na systémech s netradičním uspořádáním souborového systému?

  • Kam zařadit vymáhání těchto zákazů? Pouze v rm nebo dáme tu práci jádru? Od rm ve skutečnosti nic nevymaže (vyvolá spoustu volání na unlink(2) a rmdir(2) na základě argumentů) by jádro nemohlo žádným způsobem zjistit, že rm byl skutečně nastřelen za / až do okamžiku, kdy skutečně nastal okamžik jeho smazání. Od jediného volání na rmdir(2) to by někdy uspělo, kdyby byl cílový adresář prázdný a dosáhl tohoto bodu pomocí / znamenalo by to, že systém je již hotový.


Záleží na distribuci. Starší Linux, na kterém teď jsem, to umožňuje (myslím, že jsem to netestoval :-) ) a uvádí man rm :

   --no-preserve-root do not treat '/' specially (the default)

   --preserve-root
          fail to operate recursively on '/'

U mnoha nedávných distribucí musíte explicitně přidat --no-preserve-root k deaktivaci ochrany. Jinak se nezdaří.

Pokud jde o Ubuntu, podívejte se na tento problém, kde je toto chování diskutováno.

Historie této ochrany podle Wikipedie:

Sun Microsystems představil rm -rf / ochrana v Solaris 10, poprvé vydaná v roce 2005. Po provedení příkazu systém nyní hlásí, že odstranění / není povoleno. Krátce poté byla stejná funkce zavedena do FreeBSD verze rm utility. GNU rm odmítne provést rm -rf / pokud --preserve-root je dána volba, která je výchozí od verze 6.4 GNU Core Utilities, která byla vydána v roce 2006.


Linux
  1. Proč server zablokoval moji IP?

  2. Jak nainstalovat R 3.3.1 do vlastního adresáře?

  3. Proč bylo „~“ vybráno k reprezentaci domovského adresáře?

  1. Linux – Proč je kořenový adresář označen A / Sign?

  2. Proč nemohu použít CD ve skriptu Bash?

  3. Rsync mění oprávnění k adresáři?

  1. Použití –exclude With The Du Command?

  2. Proč je to Rm -rf a ne Rmdir -rf?

  3. Lomítka a příkaz rsync