Czy istnieje scenariusz, w którym potrzebny jest rm -rf -no-preserve-root?

27

Widziałem tutaj kilka pytań, w których ludzie przypadkowo robią rm -rf --no-preserve-rootlub rm -rf *usuwają większość lub całość swojego systemu plików, zanim będą mogli zareagować.

Czy kiedykolwiek istnieje powód do korzystania --no-preserve-root, zarówno podczas normalnego użytkowania, jako programisty lub administratora?

Nzall
źródło
4
Nie wyobrażam sobie żadnego przydatnego przypadku… Myślę, że ta opcja istnieje po prostu w celu uzyskania ortogonalności zasady UNIX (jeśli chodzi o zachowanie tych samych rzeczy bez wyjątków). Najprawdopodobniej chcesz wyjątek w przypadku /, ale »przypadek ogólny« jest nadal reprezentowany. Innymi słowy: »Powiedzenie mi, co mam robić, nie jest zadaniem mojego komputera.« I nie powinno tak być.
Andreas Wiese
Jest to możliwa broń, którą można wykorzystać podczas przejęcia SkyNet.
Mitch Dart

Odpowiedzi:

26

WAŻNE: Nowoczesne systemy UEFI montują oprogramowanie układowe w /syskatalogu i udostępniają je systemowi operacyjnemu. NIE uruchamiaj tego polecenia na nowoczesnym systemie, ponieważ spowoduje to usunięcie tego oprogramowania układowego, co zasadniczo powoduje uszkodzenie komputera.


Najprostszym scenariuszem, jaki mogę wymyślić, jest ktoś, kto chce usunąć wszystkie dane z dysku. Mogą istnieć całkowicie uzasadnione powody, aby to zrobić, a najprostszym sposobem, jaki mogę wymyślić, jest

rm -rf --no-preserve-root /

Okazuje się, że ten jest podany jako przykład w info rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Innym doskonałym powodem jest to, że chcesz usunąć zamontowany system plików, do którego się chrootzalogowałeś. W takim przypadku rm -rf --no-preserve-root /usunie system w chrootśrodowisku, ale pozostawi nienaruszony.

Jestem pewien, że istnieje więcej możliwych powodów, ale ogólnie wydaje się bardzo rozsądnym podejściem, że mój system pozwala mi robić z nim wszystko, co chcę. Moim zadaniem jest być ostrożnym, system powinien umożliwiać mi tylko robienie tego, co chcę. Jeśli to, co chcę, jest głupie, to mój problem, a nie system operacyjny.

W każdym razie jest to stosunkowo nowe ograniczenie, zostało dodane w siódmej wersji specyfikacji POSIX ( poprzednia jest tutaj), zanim rm -rf /było to całkowicie poprawne polecenie. Z historycznego punktu widzenia, .i ..katalogi były zawsze chronione rmod 1979 roku, kiedy to rmpo raz pierwszy nabył możliwość usuwania katalogów. Więcej na ten temat tutaj .

terdon
źródło
21
NIE UŻYWAJ TEGO, ABY USUNĄĆ WSZYSTKIE DANE, JEŚLI TWÓJ SYSTEM JEST UEFI (nowe komputery). Wykonanie tej czynności powoduje usunięcie wszystkich zmiennych oprogramowania układowego i powoduje, że płyta główna jest tak bezużyteczna jak cegła
Suici Doga
5
@ SuiciDoga: źródło, czy dalsze wyjaśnienia? Oprogramowanie układowe płyty głównej nie powinno być przechowywane na dysku twardym, w przeciwnym razie zostałyby utracone, gdybyś szarpnął dysk.
Tarka,
15
@Tarka: / sys / firmware / efi / efivars / może zostać zamontowany, a usunięcie rekurencyjne może usunąć te zmienne. To naprawdę nie powinno budować systemu, ale może. Zobacz thenextweb.com/insider/2016/02/01/...
cyjanowy
4
@ Tarka nie są przechowywane na dysku twardym i szarpnięcie dysku nie wpłynie na nie. Jednak z powodów, które muszę jeszcze zrozumieć, są one zamontowane, więc są dostępne pod /.
terdon
20
Prawidłowym sposobem wyczyszczenia dysku jest sformatowanie jego partycji (lub całkowite podzielenie na partycje). Nie wszystkie systemy plików są dyskami twardymi, więc użycie rm -rf /pustego komputera może zostać na przykład wyczyszczone przez czyjeś połączenie NFS / CIFS / SSHFS.
Score_Under
12

Istnienie --no-preserve-rootprzełącznika nie polega na dodaniu dodatkowej funkcjonalności, ale na zastąpieniu bardzo rozsądnego ograniczenia funkcjonalności. Ten przełącznik prawdopodobnie opiera się na filozofii, zgodnie z którą komputer powinien robić to, co mu powiedziano, a polecenia powinny być dostępne, aby wyrazić dowolne pożądane działanie. Ta zmiana jest wcześniejsza niż UEFI i na podstawie mojego doświadczenia mówię, że jest już przestarzała.

We współczesnej praktyce bez tego przełącznika rmpolecenie unika przypadkowego usunięcia katalogu głównego podczas korzystania z niezainicjowanej zmiennej lub zbłąkanego miejsca.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Zabawny przypis: ochrona nie była jego intencją. Na blogu Sun Microsystems usunięcie /katalogu spowoduje domyślnie usunięcie bieżącego katalogu roboczego, co stanowi naruszenie szczególnej uwagi, którą już rozważono dla katalogów .i ... Dlatego komitet normalizacyjny zezwolił na ten wyjątek - nie w celu zapobiegania wypadkom. Ta zmiana została wprowadzona po raz pierwszy w wersji 36 systemu Solaris 10.

http://archive.is/5lmc9

durette
źródło
Dzięki za link! Miałem nadzieję, że zacytowany zostanie fragment historii, ponieważ zastanawiałem się, jaki był powód zmiany.
Cameron Gagnon
Ciekawe dodatkowe informacje - dzięki
Mark
1

Być może nie jest to odpowiedź, której chce pierwotny pytający, ale istnieje przypadek użycia, który wymaga rekurencyjnego usunięcia wszystkich plików z katalogu głównego. Chociaż nie odbywa się to za pomocą rmpolecenia, jest częścią procesu switch_root (8) podczas uruchamiania systemu Linux (niewbudowanego ).

Explorer09
źródło