Jak mogę ustawić hasło dla polecenia „rm”?


29

Moi znajomi usuwają moje pliki za pomocą terminala. Więc pomóż mi, wyjaśniając, jak utworzyć hasło do rmpolecenia.


50
Będziesz chciał zabezpieczyć hasłem konto użytkownika, aby ci „przyjaciele” nie mieli do niego dostępu.
Andrea Lazzarotto,

14
Powinieneś naprawdę spróbować dowiedzieć się, jak działa system i korzystać z jego funkcjonalności.
AlexP

13
Jest prawdopodobne, że twoi znajomi próbują „nauczyć cię lekcji”, przekręcając się z komputerem, gdy zostawiasz go niestrzeżonym. Naucz się tej lekcji, chroniąc swoje konto i uniemożliwiając dostęp dla gości lub zapewniając dostęp dla gości ze zmniejszonymi uprawnieniami.
Ken Williams

4
Pamiętaj również o unlinkpoleceniu. Także o mvpoleceniu, ponieważ możesz skutecznie nadpisywać nim pliki. Także ...
Kos,

17
Z takimi przyjaciółmi, którzy potrzebują wrogów?
kasperd

Odpowiedzi:


46

Nie ma łatwego sposobu ustawienia takiego hasła w samym rmpoleceniu, nie bez hakowania kodu, które prawdopodobnie zepsuje rzeczy takie jak apt-getinstalowanie pakietów i usuwanie plików oraz zmuszanie do wprowadzenia hasła tysiąc razy lub potencjalnie zakłócenia dostęp do polecenia dla osób, które będą go potrzebować (takich jak Ty, aby usunąć własne pliki). Możesz to zrobić, mając wiele kont użytkowników i wiele zestawów uprawnień dostępu oraz ograniczając dostęp do różnych sekcji danych, takich jak katalog domowy, aby nie mogli się do niego dostać.

(Inną opcją są indywidualne konta użytkowników dla każdego użytkownika, a następnie Listy kontroli dostępu, jak szczegółowo opisano w drugiej odpowiedzi opublikowanej przez Videonauth )

Oto podstawowy problem - pozwalasz znajomym korzystać z twojego systemu. Ma to liczne konsekwencje dla bezpieczeństwa - koncepcja „każdy, kto ma fizyczny dostęp do skrzynki, będzie mógł kontrolować system i wykonywać dowolne zadania”, to Mantra bezpieczeństwa IT, dlatego nie „udostępniasz” fizycznego dostępu do systemów z wyjątkiem zaufanego upoważnionego personelu.


Jedynym naprawdę rozsądny sposób, aby to zrobić, aby nie dać znajomych dostęp do Twojego komputera i dać im „dedykowany system«guest»”, które mogą wykorzystać, że nie troszczą się o plikach na tyle. Jest to najbardziej „bezpieczny” sposób na ochronę plików.


Oczywiście, jeśli nie jest to opcja, jedyną naprawdę bezpieczną opcją jest skonfigurowanie wielu kont użytkowników, po jednym dla każdego użytkownika, z różnymi folderami domowymi i nie zezwalać im na dostęp do własnego katalogu domowego lub dostęp do domu innego użytkownika katalogi. A następnie przechowuj w swoim katalogu domowym wszystko, czego nie chcą, aby się dotykały, i nie dawaj im sudodostępu, roothasła ani nie udostępniaj im swojego hasła.

Oto jak to zrobiłbyś:

Powiedzmy, że mam na imię „Foo” i chcę, aby użytkownik „Bar”, przyjaciel, korzystał z mojego systemu, ale nie miał dostępu do moich plików. Pierwszym krokiem jest odmowa dostępu do nikogo poza mną do mojego katalogu domowego. Jest to w celu umożliwienia innym użytkownikom nie usuwać pliki, ale również uniemożliwić innym użytkownikom węszyć w swoim katalogu domowym i zobaczyć, jakie typy rzeczy masz w swoim katalogu domowym:

chmod 750 /home/Foo

Drugim krokiem jest utworzenie konta użytkownika dla „paska” (NIE wpisuj tego, co jest w nawiasach poniżej, to tylko w celach informacyjnych). W ten sposób możemy upewnić się, że ma on własny zestaw praw dostępu:

sudo adduser --create-home --user-group --shell /bin/bash Bar
sudo passwd Bar
(set a temporary password - you will not see characters as you type though)

Trzecim krokiem jest następnie ograniczyć ich katalog domowy zbyt więc nikt nie może podważyć do swoich plików albo. To tylko wyrównuje sytuację.

sudo chmod 750 /home/Bar

Umyj ręce, dobrze je spłucz, a następnie powtórz te kroki dla dowolnej liczby użytkowników w systemie. Nie będą mogli uzyskać dostępu do twoich plików, a ponieważ nie przyznasz im uprawnień administratora, nie mogą oni usunąć twoich plików bez próby sudoich wykonania - ponieważ nie pozwalasz na to, nie mogą dotknij swoich rzeczy. Nie będą też mogli zobaczyć twoich plików bez zostania superużytkownikiem, co się tutaj nie zdarzy.


ZAWSZE PAMIĘTAJ: Dając komuś fizyczny dostęp do maszyny lub ogólnie dostęp, narażasz swoje pliki i dane na ryzyko. Jest to powszechnie akceptowany fakt w świecie bezpieczeństwa IT, który nadal obowiązuje. Zapewnienie znajomym dostępu do komputera zawsze zagraża Twoim danym, więc albo daj im swój własny system do bałaganu, albo po prostu nie dawaj im dostępu do twojego komputera.


Tylko uwaga na temat szyfrowania dysku

Chociaż szyfrowanie dysku działa dobrze w celu ochrony danych przed osobami trzecimi, istnieją ograniczenia.

  1. Jeśli system jest włączony, dysk jest już odszyfrowany, więc jesteś zagrożony.
  2. Niektóre systemy mają zepsute metody szyfrowania dysku. Na przykład niektóre systemy Acer używają hasła tylko do autoryzacji szyfrowania / deszyfrowania i używania zakodowanych haseł lub słabego szyfrowania, które można łatwo złamać.
  3. Zawsze istnieją metody włamania się do „kluczy” lub próby wyodrębnienia ich z pamięci tuż po wyłączeniu systemu, ale przed „zniknięciem” lub pogorszeniem danych RAM. (I nie pójdzie w głębi na nich, ale te zagrożenia zrobić istnieją).
  4. Fizyczny dostęp do maszyny, niezależnie od tego, czy system jest zaszyfrowany, czy nie, zawsze zagraża twoim danym. Nie udzielaj fizycznego dostępu (ani zdalnego dostępu do sieci) osobom, którym nie chcesz potencjalnie dać pełnego dostępu do swojego systemu.

Chociaż szyfrowanie dysku nie rozwiązuje tych problemów, nakłada dodatkowe warstwy bólu głowy na aktora zagrożenia. Ktoś, kto jest złym facetem, może się poddać, jeśli jest zaszyfrowany, lub może cię torturować (obowiązkowy komiks XKCD Security w kolejce ).

Dlatego jeśli Twój system jest zaszyfrowany, ale pozwalasz innym użytkownikom go używać, albo mają hasło do odszyfrowania, albo zostawiasz odszyfrowany laptop, aby mogli włączyć SSH lub mieć fizyczny dostęp. W obu tych przypadkach jest źle.

To powiedziawszy, jeśli twój system nie jest zaszyfrowany, ta sekcja nie ma dla ciebie znaczenia.


Mój laptop ma zaszyfrowany dysk twardy. Czy umożliwienie innym dostępu nadal stanowi ryzyko?
Tim

2
@Tim Tak, jeśli system jest włączony i odszyfrowany. Nawet gdy jest wyłączony, nadal możliwe jest zastosowanie odpowiedniej technologii, czasu i poświęcenia, aby znaleźć klucze deszyfrujące potencjalnie nadal przechowywane w pamięci RAM. Szyfrowanie dysku nie zapewnia 100% ochrony - można to obejść na wiele sposobów, chodzi raczej o to, czy „zły charakter jest gotów poświęcić temu tyle czasu i wysiłku”. Sądząc po pytaniu OP, ich system jest włączony i nie jest szyfrowany (całkowicie lub częściowo), więc istnieje ryzyko usunięcia.
Thomas Ward

3
@Tim Aby dodać do odpowiedzi Thomasa, niektóre laptopy mają uszkodzoną implementację szyfrowania dysku (jeśli polegasz na sprzętowym FDE). AFAIR Laptopy Acer tak naprawdę nie używają hasła do szyfrowania, używają go tylko do autoryzacji szyfrowania / deszyfrowania za pomocą hasła zakodowanego na stałe.
gronostaj

Dane są zawsze zagrożone, jeśli niezaufana osoba ma dostęp do systemu, zaszyfrowanego lub nie
Sergiy Kolodyazhnyy

1
@LightnessRacesinOrbit apt-getdziaładpkg , który uruchamia często używane skryptyrm . Na moim Xenialu cd /var/lib/dpkg/info; grep -P '\brm\b' *instwypisuje 344 wiersze , z których 333 wygląda na rzeczywiste użycie rmpolecenia - tylko w skryptach instalacyjnych . grep -P '\brm\b' *rmpokazuje jeszcze więcej w skryptach usuwania (aby usunąć pliki konfiguracyjne, a nie pliki pakietów).
Eliah Kagan

19

To może tak naprawdę nie dotyczyć rmpolecenia, ponieważ istnieją proste sposoby usuwania plików bez jego użycia . Jeśli problem polega na tym, że Twoi znajomi mimowolnie niewłaściwie rmużywają polecenia, pomocne mogą być rozwiązania ograniczające użycie tego polecenia lub powodujące jego działanie w inny sposób. Natomiast jeśli problem polega na tym, że Twoi znajomi celowo traktują Twoje dane w sposób, którego nie chcesz, musisz wdrożyć rzeczywiste środki bezpieczeństwa i nie ma rozwiązania, które skupiałoby się na samym rmpoleceniu (lub jakimkolwiek dyskretnym zestawie poleceń) zapewni ci bezpieczeństwo.

Czy chcesz kontrolować dostęp, czy po prostu zapobiegać szczerym błędom?

Zakładając, że Twoi znajomi wiedzą, że nie chcesz, aby usuwali Twoje pliki, istnieją dwie możliwości:

  1. Mogą to robić celowo. W tym scenariuszu Twoi znajomi celowo usuwają twoje pliki, a nawet nie możesz im ufać, że spróbują spełnić twoje życzenia dotyczące sposobu traktowania twoich danych podczas korzystania z twojego komputera. Jedynym rozwiązaniem tego problemu jest zastosowanie rzeczywistego skutecznego środka bezpieczeństwa , jak szczegółowo wyjaśnił Thomas Ward . Często najlepszym tego rodzaju środkiem jest powstrzymanie ich przed użyciem komputera. Ale zmuszenie ich do korzystania z własnych kont użytkowników może zapewnić pewną ochronę.

  2. Mogli to robić przez pomyłkę. W tym scenariuszu Twoi przyjaciele są wyjątkowo podatni na wypadki i nadal rmwykonują polecenia, których nie chcieli. Chcą traktować ciebie i twoje dane z szacunkiem, ale naprawdę źle to robią w praktyce, ponieważ wciąż wykonują niewłaściwe polecenie, usuwają niewłaściwy plik ... lub coś w tym rodzaju. Chociaż byłoby miło wierzyć, że tak się dzieje, ostrzegam cię przed zakładaniem, że ludzie, którzy usuwają twoje dane po tym, jak kazałeś im przestać, działają bez złej woli.

    Co więcej, nawet jeśli ich intencje są dobre, przydzielenie im oddzielnych kont użytkowników jest nadal najbardziej niezawodnym sposobem zapobiegania ich usuwaniu plików, poza tym, że nie pozwalają im korzystać z twojego komputera.

Jeśli sytuacja jest naprawdę # 2 - twoi znajomi nie próbują usunąć twoich plików, ale potrzebują pomocy, aby nie przypadkowo je usunąć, a jedynym sposobem, w jaki kiedykolwiek je przypadkowo usuną, jest przypadkowe niewłaściwe użycie niewielkiej liczby poleceń (jak rm) że mają szczególne problemy z prawidłowym użyciem - wtedy techniki w odpowiedzi Videonauth mogą się przydać . Ale musisz zrozumieć, że nie są to środki bezpieczeństwa, ponieważ komenda jest tylko jednym z wielu sposobów na łatwe Usuń pliki . Szczegóły poniżej.rm

Radzę zadać sobie pytanie: „Czy moja sytuacja jest zasadniczo taka sama, jak gdybym ja, a nie inne osoby korzystające z mojego komputera, korzystałem z niego rmnieprawidłowo?”

Jeśli odpowiedź brzmi „ nie” , jest to kwestia bezpieczeństwa informacji i musisz uniemożliwić znajomym korzystanie z konta użytkownika. Jeśli odpowiedź brzmi tak , to można używać tych samych metod byłoby użyć, jeśli jesteś tym jedynym nadużywają rm:

  • Edukacja. Twoi znajomi muszą wiedzieć, co robią i jak tego uniknąć.
  • Zmiany interfejsu. Bez utraty rzeczywistej możliwości usuwania plików (która wymaga oddzielnych kont użytkowników), możesz utrudnić przypadkowe usunięcie plików, sprawiając, że samo uruchomienie , bez żadnych dalszych działań, nie spowoduje natychmiastowego usunięcia . Odpowiedź Videonauth daje jedno podejście do tego. W tej odpowiedzi przedstawiam inną.rm filefile

Ale nawet jeśli twoi przyjaciele nie starają się zrobić coś złego, należy jeszcze rozważyć ich stosowanie własnych oddzielnych kont użytkowników . To nadal rozwiąże problem - te same środki bezpieczeństwa, które chronią dane przed zamierzonym zniszczeniem, również chronią je przed przypadkowym zniszczeniem. Nawet bez złośliwych zamiarów, jeśli ktoś nadal robi coś, czego nie chcesz, nie możesz ufać, że powstrzyma się od zrobienia tego.

Wykonywanie rmmonitów przed usunięciem może zapobiec niektórym błędom.

Aby pomóc ludziom uniknąć przypadkowego usunięcia plików z rm, można dokonać rmdo alias powłoki , które faktycznie zjazdy rm -i. Przekazanie -iflagi rmpowoduje, że monituje użytkownika przed usunięciem każdego pliku (patrz man rm).

Możesz to zrobić (dla swojego konta użytkownika), dodając alias rm='rm -i'do swojego .bash_aliaseslub .bashrcpliku. Zobacz to i tamto, aby poznać szczegóły. To zadziała dla twoich nowo otwartych powłok bash.

Nie zapewnia to rzeczywistego bezpieczeństwa i nie jest niezawodne w zapobieganiu błędom, ponieważ:

  • Po wyświetleniu monitu mogą wybrać opcję usunięcia.
  • Mogą ominąć alias na wiele sposobów, w tym przez uruchomienie /bin/rmlub odblokowanie go ( unalias rm).
  • Istnieje wiele sytuacji, w których rozszerzenie aliasu nie występuje i w takich sytuacjach rmnie będzie działać -i.
  • Nadal mogą usuwać pliki za pomocą dowolnej z technik, które tego nie wymagają rm(jak w przypadku podejścia Videonauth - patrz poniżej).
  • Nadal mogą uszkadzać dane bez usuwania jakichkolwiek plików, na przykład poprzez ich zastąpienie lub inną zmianę ich zawartości (jak ma to również miejsce w przypadku podejścia Videonauth).

Ale jeśli nie potrzebujesz rzeczywistego bezpieczeństwa (patrz wyżej), może to być właściwy sposób. W porównaniu do podejścia polegającego na uniemożliwieniu znajomym korzystania z rmpolecenia systemowego :

  • Aliasing rmz rm -ijest mniej skuteczny w zapobieganiu błędom - dopóki nie przejdą do korzystania z innej techniki usuwania plików. W tym momencie powstrzymanie ich przed użyciem rmbędzie całkowicie nieskuteczne, nawet jeśli nie będą próbowali zrobić nic złego, ponieważ prawdopodobnie będą używać unlink(lub dowolnego z niezliczonych innych poleceń, które usuwają plik) z jednakową bezmyślnością.

  • Z drugiej strony, ponieważ rozszerzenie aliasu występuje tylko w niektórych sytuacjach - z grubsza mówiąc, w zwykłym interaktywnym korzystaniu z powłoki - Twoi znajomi mogą myśleć, że zostaną poproszeni, gdy nie będą tak naprawdę monitowani (ponieważ polecenie jest w na przykład skrypt lub wydany z innej powłoki). Sposób wideo nie ma tego problemu, który jest obiektywną przewagą tej metody alias rm='rm -i'.

  • Po uruchomieniu skryptu, chyba że jest napisane celowo, aby używać aliasów, aliasy nie są w nim rozwijane. Oznacza to, że aliasing rmdo rm -ijest bardzo mało prawdopodobne, aby cokolwiek zepsuć. Jest to obiektywna zaleta alias rm='rm -i'.

rm nic nie może zrobić żaden inny zupełnie zwyczajny program.

Naprawdę nie ma w tym nic specjalnego rm. Jest to wygodny i samo dokumentujący się sposób usuwania plików, więc ograniczenie dostępu do niego grozi złamaniem wielu skryptów, które na nim polegają. Ale nie jest to jedyny sposób usuwania plików - to zwykły program.

Kilka poleceń wykonuje pewne zadania, których ograniczony użytkownik (inny niż root ) nie może wykonać bez ich uruchomienia. Na przykład sudopozwala uruchamiać programy jako inny użytkownik, po sprawdzeniu, czy masz na to zgodę. passwdedytuje bazę danych, w której przechowywane są hasła użytkowników, ale pozwala tylko zmienić własne hasło (chyba że jesteś rootem, w którym to przypadku możesz zmienić hasło każdego użytkownika).

/usr/bin/sudoi /usr/bin/passwdmoże to zrobić, ponieważ mają ustawiony bit setuid , jak pokazuje to, sktóre pojawia się w lewej kolumnie po uruchomieniu ls -l:

ek@Io:~$ type -a sudo passwd rm
sudo is /usr/bin/sudo
passwd is /usr/bin/passwd
rm is /bin/rm
ek@Io:~$ ls -l /usr/bin/sudo /usr/bin/passwd /bin/rm
-rwxr-xr-x 1 root root  60272 Feb 18  2016 /bin/rm
-rwsr-xr-x 1 root root  54256 Mar 29  2016 /usr/bin/passwd
-rwsr-xr-x 1 root root 136808 Aug 17 09:20 /usr/bin/sudo

Zauważ, że /bin/rmnie ma s: są jego uprawnienia -rwxr-xr-x, a /usr/bin/passwdi /usr/bin/somieć -rwsr-xr-xzamiast tego. To sprawia, że ​​bez względu na to, kto uruchamia passwdlub sudofaktycznie działa jako użytkownik root, ponieważ root jest właścicielem pliku wykonywalnego. (Istnieje również bit setgid, który po ustawieniu powoduje, że pliki wykonywalne działają z tożsamością grupy właściciela grupy, a nie tożsamości osoby wywołującej.)

Z wyjątkiem luk w zabezpieczeniach, które nie zostały jeszcze wykryte (lub które zostały odkryte, ale nie zostały jeszcze załatane) sudoi passwdsą bezpieczne, ponieważ narzędzia te są bardzo starannie napisane, dzięki czemu mogą robić tylko to, na co osoba dzwoniąca powinna mieć pozwolenie do zrobienia.

/bin/rmnie działa w ten sposób. To nie jest setuid, bo nie musi tak być. Uprawnienia do katalogu (i czasami uprawnienia do plików ) kontrolują, jakie pliki użytkownik może usunąć, i nie muszą być rootem, aby to zrobić. Żeby było idealnie jasne, proszę nigdy nie włączać bitów setuidrm . Implikacje dla bezpieczeństwa byłyby katastrofalne, ponieważ od tego momentu, bez względu na to, kto uruchomi rm, to tak, jakby root go uruchomił! (Narzędzia takie jak sudoi passwdsprawdzają, kto tak naprawdę je obsługuje, i sprawdzają, czy coś jest dozwolone przed zrobieniem tego; rmnie robi czegoś takiego).

Sprawdzenie, czy bit setuid (lub setgid) jest ustawiony na pliku wykonywalnym, powie ci, czy ograniczenie tego, kto może go uruchomić, może zwiększyć bezpieczeństwo. Pliki wykonywalne, które nie są setuid (lub setgid), nie mają żadnego specjalnego statusu i każdy może je po prostu skopiować i uruchomić kopię, przynieść własną kopię z innego komputera, napisać skrypt lub program, który robi to samo, lub użyć inny program, aby to zrobić.

Usuwanie plików bez rm

Oczywistym sposobem na usunięcie pliku bez rmUbuntu jest przejście do jego lokalizacji w graficznej przeglądarce plików (Nautilus, jeśli używasz Unity lub GNOME Shell) i usunięcie pliku. Istnieje również wiele poleceń, których można użyć do usunięcia pliku z terminala, bez jego użycia rm.

Na przykład, aby usunąć plik wywołany foo.txtw bieżącym katalogu, rmosiągną to następujące polecenia, które działają w systemie Ubuntu i nie wymagają dostępu . (Dla pewności przetestowałem je na minimalnym systemie 16.04 zainstalowanym tylko ze standardowymi narzędziami systemowymi, po usunięciu /bin/rm).

  • unlink foo.txt
  • busybox rm foo.txt
  • perl -e 'unlink("foo.txt")'
  • python3 -c 'import os; os.remove("foo.txt")'( pythonzamiast python3w starszych wersjach)

Ta lista oczywiście nie jest jeszcze prawie kompletna. Nie jest możliwa pełna lista takich poleceń. Zapobieganie usuwaniu plików to jedna z rzeczy, do których istnieją oddzielne konta użytkowników oraz uprawnienia do plików i katalogów. Działają bardzo dobrze, aby temu zapobiec. Natomiast zmiana rmpolecenia (aby wymagało hasła lub w jakikolwiek inny sposób) lub ograniczenie dostępu, aby w rmogóle go nie zapobiec.


2
Do faktycznego wykorzystania, lubię GNU rm„s -Iopcja. Monituje tylko o usunięcie 4 lub więcej plików lub o rekurencyjne usunięcie. Nie masz więc zwyczaju używania -f, \rmunikania rozwijania aliasu lub pisania ybez czytania. Ale nadal uratuje cię od złych literówek, w których wciśniesz return, zanim miałeś zamiar, lub twoja glob dopasowała wiele plików.
Peter Cordes,

2
Kolejny interesujący sposób na rozłączenie plików: mv foo.txt /tmp/.gonenastępnie uruchom ponownie komputer, odrzucając tmpfs, który był tworzony /tmp. Lub po prostu użyj, mvaby zmienić nazwę wielu plików na wszystkie o tej samej nazwie, więc pozostanie tylko ostatni. Lub po prostu ukryj pliki, zmieniając ich nazwy na niejasne nazwy. Jak wskazuje pierwsza część tej odpowiedzi, jeśli próbujesz bronić się przed złośliwością, a nie niekompetencją, musisz po prostu zablokować ludzi na swoim koncie.
Peter Cordes

16

Możesz zmienić uprawnienia do /bin/rmpolecenia za pomocą następującego wiersza, co uniemożliwi wykonanie go bez dostępu sudo:

sudo chmod 750 /bin/rm

W szczególności uniemożliwia im to korzystanie z rmpolecenia dostarczonego przez system. Należy pamiętać, że nie zapobiega to usuwaniu plików w inny sposób.

Aby również uniemożliwić im korzystanie z rmdirpolecenia, które jest powszechnym sposobem usuwania katalogów, możesz ustawić uprawnienia w ten sam sposób na ścieżce wykonywalnej:

sudo chmod 750 /bin/rmdir

Przypomnij, że również możesz używać tych poleceń tylko z uprawnieniami sudo.

Aby zmienić go z powrotem, jeśli nie podoba czy inne problemy występują wykorzystania 755dlachmod


Jak zauważył @muru, powyższe jest bardzo prymitywnym rozwiązaniem i może nawet zepsuć usługi systemowe, które nie działają na koncie root . Dlatego dodam tutaj kolejną opcję za pomocą ACL (listy kontroli dostępu), aby zrobić to samo i prawdopodobnie znacznie bezpieczniejsze ( dobrze w tym również czytać i można pominąć część włączającą, ponieważ ACL jest obecnie instalowana w systemach Ubuntu):

Zrób tak samo jak powyżej tylko dla użytkowników, których chcesz zablokować

sudo setfacl -m u:<user-name>:- /bin/rm /bin/rmdir

Po prostu zastąp <user-name>je rzeczywistymi nazwami użytkowników, których nie chcesz używać.

Podobnie jak w przypadku chmod, setfacl -maby uniemożliwić uruchamianie określonych użytkowników rmi rmdirdotyczy tylko tych poleceń systemowych. Nie chroni ich przed usunięciem plików i folderów w Nautilusie lub za pomocą innych poleceń terminalu.

Wyjaśnienie:

  • -mflaga oznacza zmodyfikować pliki ACL.
  • pierwsza część zmiany uoznacza użytkownika. Może mieć następujące wartości udla użytkownika, ggrupy i owszystkich innych
  • środkowa część <user-name>może zawierać rzeczywistą nazwę użytkownika lub nazwę grupy zgodnie z tym, co chcesz zmienić. Aby ustawić ogólne zmiany, pozostaw to pole puste.
  • trzecia część zawiera uprawnienia, które chcesz ustawić. Tutaj w tym przykładzie nie chcemy ustawiać żadnych uprawnień, więc umieszczamy -, może również zawierać następujące litery rdla uprawnień do odczytu, uprawnień wdo zapisu i xwykonania.

4
Lepiej byłoby korzystać z list ACL niż usuwać uprawnienia wykonywania dla innych - każda usługa systemowa, która nie działa jako root, jest teraz upośledzona.
muru

2
sudo setfacl -m u:<username>:- /bin/rm /bin/rmdir, IIRC. Możesz przetestować ACL za pomocągetfacl /bin/rm /bin/rmdir
muru

2
Jedynym minusem takich list ACL jest to, że utrzymywanie ich w dłuższej perspektywie jest złe / trudne. I niemożliwe do utrzymania, jeśli w systemie nie ma indywidualnych użytkowników dla każdej osoby korzystającej z systemu. W przeciwnym razie to dobry pomysł.
Thomas Ward

4
@DavidFoerster Tak. Istnieje skutecznie nieograniczona liczba sposobów usuwania plików bez rm. Rozwiązanie podane tutaj przez Videonauth jest możliwym sposobem na pomoc podatnym na wypadki użytkownikom w zaprzestaniu usuwania rzeczy, ale nie zapewnia żadnego rzeczywistego bezpieczeństwa (co może być w porządku, jeśli przyjaciele PO nie zamierzają celowo obalić życzeń PO) . Videonauth: Sugeruję edycję tego postu, aby wyraźnie wyjaśnił, że tak naprawdę nie przeszkadza ludziom w usuwaniu plików, ponieważ nie potrzebują do tego rmpolecenia. (Powstrzymuję się od samodzielnego edytowania, na wypadek, gdybyś nie chciał tego powiedzieć).
Eliah Kagan

1
Nie zapominaj, że Perl, Python i wszystkie kompilatory w systemie pozwalają innym użytkownikom również usuwać pliki. Zapobieganie usuwaniu plików przez ludzi wymaga czegoś więcej niż tylko zmiany uprawnień do rmpolecenia.
Jonathan Leffler

8

Jest to bardzo prosta odpowiedź i powstrzyma kogoś od niechcenia przy użyciu polecenia rm bez podawania hasła. To nie jest bezpieczne rozwiązanie i należy zasugerować niektóre alternatywne sugestie w innych odpowiedziach.

Można jednak użyć aliasu, aby zmienić sposób działania polecenia rm. Próbować:

alias rm="sudo -l >/dev/null && rm"

Działa to wtedy, gdy ktoś wpisze polecenie rm, uruchamia polecenie sudo -l. To polecenie zmusza użytkownika do podania hasła. Jeśli dobrze to zrobią, wyświetli listę ich uprawnień (odrzucamy to wyjście) i kończy pracę ze statusem 0, jeśli źle zrozumieją, istnieje błąd.

Następnie wykonujemy polecenie sudo za pomocą „&&”, który kończy następującą komendę - w tym przypadku „rm” tylko wtedy, gdy poprzednia komenda kończy się ze statusem 0 - tzn. Ma prawidłowe hasło.

Aby to zmienić na stałe, włącz polecenie alias w ~/.bashrc.

Zauważ, że jest to bardzo łatwe do pokonania (na przykład mogą po prostu pisać /bin/rm.


5

Czasami to nie są nasi przyjaciele, jesteśmy naszymi najgorszymi wrogami

Napisałem skrypt do ochrony hasłem, zgodnie rmz żądaniem OP, ale wprowadziłem również zmiany, aby zapobiec przypadkowemu usunięciu:

  • /
  • /Dom
  • /kosz

Edycja: 5 marca 2017 r. - Zmień metodę sprawdzania, czy działa w terminalu.


Utwórz skrypt

Użyj gksu gedit /usr/local/bin/rmi skopiuj w tych wierszach:

#!/bin/bash

tty -s;
if [ "0" == "$?" ]; then Terminal="Y"; else Terminal="N"; fi

if [ $Terminal == "Y" ] ; then
    # Running from terminal don't allow delete of / or /toplevel directory even if sudo
    for i in ${@:1}
    do
        # Skip options -i -r -v -d 
        if [[ ${i:0:1} != "-" ]] ; then
            # if parameter doesn't begin with '-' it's file or directory, so get real path.
            fullname=$(realpath "$i" 2>&1) # No error messages if file doens't exist
            # We must have at least two `/` in the full path
            levels=$(echo "$fullname" | tr -cd '/' | wc -c)
            if (( $levels == 1 )); then # Test for 1, will be zero when file doesn't exist.
                echo "Attempting to remove top level directory '$fullname'"
                echo "Use 'sudo /bin/rm $@' instead."
                exit 1 # error
            fi
        fi
    done
fi


if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo rm ..." is ok)
  if [ $Terminal == "Y" ] ; then
  # Only running from a terminal needs password (ie not cron)

    # log rm usage to /var/log/syslog
    PARENT_COMMAND="$(ps -o comm= $PPID)"   
    logger "$PARENT_COMMAND"" - rm command was used on file: ""$fullname"

    # Get password
    Password=$(zenity --password --title="Password for rm")
    encryptPassword=$(echo -n "$Password" | md5sum)

echo "md5sum: $encryptPassword" # Comment out after viewing one time and updating line below.

    if [[ "$encryptPassword" != "d2c30dc65e59558c852ea30b7338abbe  -" ]]; then
        echo "Invalid password!"
        exit 1
    fi
  fi # non-terminals can't enter password.
fi # root doesn't need to enter password.

# Call REAL rm command with parameters passed to this wrapper sript
/bin/rm "$@"

exit 0

Zmień hasło „WE2U” na dowolne i zapisz plik.

Oznacz nowy rmskrypt jako wykonywalny

Oznacz nowy rmskrypt jako wykonywalny, używając:

sudo chmod +x /usr/local/bin/rm

Jak to działa

hasło rm

Jeśli hasło nie jest WE2U , przy pierwszym uruchomieniu skryptu pojawi się „nieprawidłowe hasło” i wyświetlony zostanie klucz szyfrowania dla wprowadzonego hasła. Skopiuj i wklej ten klucz szyfrujący z terminala do skryptu. Następnie skomentuj wiersz za pomocą echa, które wyświetlało klucz szyfrujący na terminalu.

Ponieważ ścieżka /usr/local/binznajduje się wyżej na liście niż /binnasza komenda rmjest wywoływana. Po uzyskaniu prawidłowego hasła woła, /bin/rmaby wykonać prawdziwe usunięcie.

Jak zauważył Thomas Ward w innej odpowiedzi, jeśli to zrobisz, sudo apt-get install ...możesz zostać poproszony o hasło tysiąc razy. Skrypt sprawdza, czy sudojest używany i nie prosi o hasło. Ponadto, jeśli rmjest wywoływany z poziomu aplikacji GUI, hasło nie jest wymagane.

Wywołania skryptu loggerdo nagrywania za każdym razem rmbyły ręcznie wywoływane za pomocą terminala. Użycie polecenia jest rejestrowane w /var/log/syslog.


1
Możesz zamaskować hasło, po prostu włączając w skrypcie jego zaszyfrowaną wersję, a następnie za każdym razem, gdy użytkownik wprowadzi hasło, może po prostu je zaszyfrować i porównać z zakodowanym hasłem.
InitializeSahib

@InitializeSahib do skryptu dodano obsługę hasła (szyfrowanie).
WinEunuuchs2Unix

3

Inną alternatywą byłoby utworzenie kopii zapasowych dowolnych ważnych plików w katalogu, do którego użytkownicy inni niż root nie mają dostępu. Możesz użyć ich rsynclub unisonautomatycznie zsynchronizować, po prostu upewnij się, że przynajmniej jeden katalog w ścieżce do miejsca docelowego kopii zapasowej jest własnością root i trybu 700. Spowodowałoby to jednak posiadanie dwóch kopii wszystkich plików. Bezpieczniej byłoby po prostu utworzyć użytkownika-gościa, z którego będą mogli korzystać, z wyjątkiem tego, że musisz pamiętać, aby zawsze blokować lub wylogowywać się przed przekazaniem komputera lub pozostawieniem go bez nadzoru.


3
Możesz wskazać, jak uniknąć propagowania usuwania? I idealnie sposób, aby to wyłączyć i włączyć, aby gdy użytkownik robi coś, co wymaga usunięcia, aby było trwałe, jest trwałe.
ostergaard

@ajostergaard Myślałem, że ilekroć odzyskuje komputer od znajomych, ręcznie sprawdza, czy niczego nie brakuje, i przywraca wszystko, co jest. Ale moje własne preferowane narzędzie to unison używane w interaktywnym trybie GUI, co ułatwia widzenie (i odwracanie) usunięć.
Random832,

2

Nie bezpośrednia odpowiedź na pytanie, którego szukasz, ale:

Jeśli twoi znajomi usuwają twoje pliki za pomocą rmpolecenia, to albo twoi znajomi są niekompetentni, szarpią się, albo są ochotnikami BOFH, którzy próbują nauczyć cię, abyś nie zostawiał sesji zalogowanych i bez nadzoru. We wszystkich przypadkach rozwiązanie jest takie samo: nie pozostawiaj sesji zalogowanej i bez nadzoru .

Ma to tę zaletę, że nie trzeba pamiętać o wprowadzaniu specjalnych zmian w systemie za każdym razem, gdy aktualizujesz lub uzyskujesz nowy system, a także zapobiega używaniu skryptów i innych rzeczy, które korzystają z poleceń zachowujących się zgodnie z oczekiwaniami, w nieprzewidziany sposób.

Ma również tę zaletę, że powstrzymuje „przyjaciół” od przejścia do następnego kroku. Czy chcesz także „zabezpieczyć hasłem” mvkomendę, jeśli zdecydują się przenieść twoje pliki do / dev / null, gdy dowiedzą się, że proste usunięcie nie robi tego, czego chcą? Gdy grasz w taką grę, jedynym zwycięskim ruchem jest nie grać.


1

Mam podobną możliwość, którą zaplanowałem. Na serwerze plików, jeśli główna pamięć zdjęć jest zapisywalna, że ​​ktoś z rodziny (mniej techniczny lub przypadkowo) może coś usunąć, przypadkowo przeciągnąć GUI, który przenosi katalog, lub zastąpić oryginał edytowaną wersją zamiast zmiany nazwy .

Uświadomiłem sobie, że mogę się przed tym zabezpieczyć, nie czyniąc uprawnień niemożliwymi do zaakceptowania dla wszystkich innych. ZFS tworzy okresowe migawki, aby można było odwrócić każde przypadkowe usunięcie lub zastąpienie. (W przeciwieństwie do kopii zapasowej, migawka jest lekka i umożliwia kopiowanie przy zapisie, więc nie zwielokrotnia zużycia pamięci).

ZFS pochodzi z FreeBSD. Linux ma btrfs, który również ma migawki.


0

Bardzo głupie obejście bardzo głupiego problemu.

Jeśli nie chcesz chmod rm, rmdirlub mv(za mv filename /dev/null) lub używanie ACL, można utworzyć użytkownika atrapę z hasłem, ale nikt nie wie, a każde polecenie alias do sudo [user], a następnie zrobić aliasy dla każdego polecenia, że twoi przyjaciele nie wiedzą . W ten sposób, gdy Twoi znajomi napiszą, rmsystem poprosi ich o podanie hasła (ale błędne odgadnięcie hasła spowoduje zarejestrowanie nieudanej próby), a Ty nadal możesz po prostu wpisać rmaliaslub cokolwiek, co chcesz usunąć.

Możesz też utworzyć konto gościa, które nie ma dostępu do twojego katalogu domowego.


Brzmi, jakbyś był na dobrej drodze. Twoja odpowiedź może zostać poprawiona poprzez opracowanie sposobu konfiguracji aliasu sudo [user]orazdummy user
WinEunuuchs2Unix

0

Jeśli chcesz zabezpieczyć hasłem rm, rozwiązaniem byłoby utworzenie opakowania dla rm , które wymagałoby uprawnień roota, i w przeciwnym razie poprosiłbyś o hasło. (UWAGA: to opakowanie może zniknąć, gdy pakiet Coreutils zostanie zaktualizowany lub ponownie zainstalowany.) Należy również pamiętać, że to tylko zabezpiecza rm, wciąż istnieje wiele, wiele innych sposobów usuwania pliku.


Otwórz terminal i zostań rootem. Następnie biegnij, sudo mv /bin/rm /bin/rmoldaby przenieść stary RM w inne miejsce.

Teraz uruchom, sudo nano /bin/rmaby utworzyć opakowanie.

W Nano wpisz następujące polecenie:

#!/bin/bash
/bin/rmold "$@"
exit "$?"

Następnie przytrzymaj CTRLi naciśnij, Xaby wyjść. Naciśnij Ypo wyświetleniu monitu, a następnie naciśnij, ENTERaby zapisać plik.

Wreszcie musimy nadać temu odpowiednie uprawnienia:

sudo chmod a+x /bin/rm

I proszę bardzo.


1
O ile nie masz bardzo dobrego powodu, zmienne skryptu powinny zawsze być cytowane: $@=> "$@". Tutaj proponujesz bardzo niebezpieczną wersję oryginału i bezpieczną rm: co, jeśli istnieje plik o nazwie foo -i -r *( -idodany w celu ochrony niewinnych użytkowników)?
xhienne

Oprócz "-quotowania, $@jak mówi @xhienne, zachęcam do wyraźnego ostrzeżenia czytelników, że nie zapewnia to żadnego bezpieczeństwa, ponieważ istnieje wiele sposobów na usunięcie pliku. Jednym z nich jest zadzwonić rmold, ale istnieje wiele innych sposobów, jak omówiono w innych odpowiedziach i komentarzach na ich temat. (Nawet wtedy, to będzie miał problem, że rmbędzie czuć się jak usuwa pliki jako bieżącego użytkownika - nazywa bez sudo, a normalne rmdziała jako rozmówcy - ale robi to jako root Jeśli już oni niedawno sudoed wygrali” zauważają, że mogą usuwać pliki systemowe, nawet jeśli wiedzą o zmianie.)
Eliah Kagan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.