Od kilku lat rm
narzędzie GNU nie usuwa, /
chyba że zostanie wywołane z --no-preserve-root
opcją. Jednak polecenie rm -rf /
to pozostawiono w zbiorowej podświadomości jako niebezpieczne od bardzo dawna, a ludzie wciąż często wymieniają je jako „przerażające” polecenie.
Zastanawiałem się, kiedy pojawiła się ta zasada, rm
której nie można usunąć /
. Sprawdziłem specyfikacje POSIX i widzę, że chociaż POSIX: 2008 zawiera tę funkcję bezpieczeństwa, POSIX: 2001 nie. Ponieważ wersje online specyfikacji POSIX są od czasu do czasu aktualizowane, z każdą nową wersją podrzędną sprawdziłem również maszynę do przywracania i znalazłem odpowiednią stronę POSIX: 2008 od 2010 roku i byłem w stanie potwierdzić, że reguła, rm
której nie można usunąć /
był już wtedy na liście.
Tak więc moje pytania to:
- Kiedy reguła,
rm
której nie można usunąć, została/
dodana do specyfikacji POSIX? Czy było to w oryginalnej wersji specyfikacji Single UNIX w wersji 4 z 2008 r., Czy zostało dodane w wersji? - Kiedy to ograniczenie zostało dodane do GNU
rm
? Jestem prawie pewien, że było to przed dodaniem go do POSIX, ale kiedy to się stało?
Odpowiedzi:
Wersję HTML wszystkich wydań POSIX 2008 można znaleźć online:
Zostało to dodane w edycji 2008.
Sprostowania techniczne na ogół nie dodają nowych funkcji.
Możesz zobaczyć, że poprzednia wersja ( http://pubs.opengroup.org/onlinepubs/009695399/utilities/rm.html ) (POSIX 2004) nie miała tego tekstu.
Nowy tekst został przyjęty na konferencji grupy austin 2003-05-09 do włączenia w późniejszej rewizji standardu.
Został o to poproszony przez Johna Becka z Sun Microsystems w marcu tego samego roku (link wymaga rejestracji w otwartej grupie, patrz także prośba o ulepszenie numer 5 tutaj ).
GNU
rm
dodane--preserve-root
i--no-preserve-root
opcje w tym zatwierdzeniu 2003-11-09 , ale--preserve-root
stało się domyślnym tylko w tym zatwierdzeniu 2006-09-03 , więc w coreutils 6.2FreeBSD zachowuje slash od czasu zatwierdzenia 2004-10-04 (z dziennikiem zatwierdzenia „Dowiedz się, jak ognioodporna jest moja bielizna” ), ale początkowo nie, kiedy był poniżej
POSIXLY_CORRECT
, dopóki nie przypomnieli sobie, aby sprawdzić dekadę później, że POSIX jest teraz nakazując, w którym momencie zostało to zrobione również w trybie POSIX .Pierwsze zatwierdzenie FreeBSD wspomina, że Solaris już to robił.
@JdePB (w komentarzu poniżej) stwierdził, że link do poufnej informacji firmy Sun potwierdza i podaje więcej szczegółów na temat pochodzenia Solaris i sugeruje, że Solaris już miał zabezpieczenie, zanim zwrócił się do grupy Austin.
Wyjaśnia uzasadnienie dodania tego wyłączenia. Choć można winić tylko siebie, jeśli robią
rm -rf /
, jest to przypadek, w którym skrypt może to zrobić, jeśli robirm -rf -- "$1/$2"
bez sprawdzenia, które$1
/$2
były dostarczane co jest rzeczą, która uderza trochę słońca klientom źle, kiedy niewłaściwe patch Solaris (zgodnie z tym linkiem).Zakaz usuwania
.
i..
został dodany na długo przedtem, aby zabezpieczyć się przed potencjalnymi nieszczęściami.rm
wciąż jest niebezpiecznym poleceniem. Robi to, co powinien: usuwać to, co mu powiesz.Usuwałby również wszystko. Wiadomo, że uzupełnianie nazw plików powłoki powoduje takie problemy
Rozszerzony do:
Ponieważ
something
tak się nie stało, że jest katalogiem.Powłoki takie jak
tcsh
lubzsh
dodadzą dodatkowy monit przy próbie połączeniarm
za pomocą znaku*
wieloznacznego (tcsh
domyślnie nie).źródło
rm -rf .*
z jego domowego katalogu . Niedługo potem wszystkie linie telefoniczne się zaświeciły ...