Moi znajomi usuwają moje pliki za pomocą terminala. Więc pomóż mi, wyjaśniając, jak utworzyć hasło do rm
polecenia.
Moi znajomi usuwają moje pliki za pomocą terminala. Więc pomóż mi, wyjaśniając, jak utworzyć hasło do rm
polecenia.
Odpowiedzi:
Nie ma łatwego sposobu ustawienia takiego hasła w samym rm
poleceniu, nie bez hakowania kodu, które prawdopodobnie zepsuje rzeczy takie jak apt-get
instalowanie 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 sudo
dostępu, root
hasł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 sudo
ich 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.
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.
apt-get
działadpkg
, który uruchamia często używane skryptyrm
. Na moim Xenialu cd /var/lib/dpkg/info; grep -P '\brm\b' *inst
wypisuje 344 wiersze , z których 333 wygląda na rzeczywiste użycie rm
polecenia - tylko w skryptach instalacyjnych . grep -P '\brm\b' *rm
pokazuje jeszcze więcej w skryptach usuwania (aby usunąć pliki konfiguracyjne, a nie pliki pakietów).
To może tak naprawdę nie dotyczyć rm
polecenia, ponieważ istnieją proste sposoby usuwania plików bez jego użycia . Jeśli problem polega na tym, że Twoi znajomi mimowolnie niewłaściwie rm
uż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 rm
poleceniu (lub jakimkolwiek dyskretnym zestawie poleceń) zapewni ci bezpieczeństwo.
Zakładając, że Twoi znajomi wiedzą, że nie chcesz, aby usuwali Twoje pliki, istnieją dwie możliwości:
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ę.
Mogli to robić przez pomyłkę. W tym scenariuszu Twoi przyjaciele są wyjątkowo podatni na wypadki i nadal rm
wykonują 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 rm
nieprawidł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
:
rm file
file
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.
rm
monitó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ć rm
do alias powłoki , które faktycznie zjazdy rm -i
. Przekazanie -i
flagi rm
powoduje, ż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_aliases
lub .bashrc
pliku. 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ż:
/bin/rm
lub odblokowanie go ( unalias rm
).rm
nie będzie działać -i
.rm
(jak w przypadku podejścia Videonauth - patrz poniżej).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 rm
polecenia systemowego :
Aliasing rm
z rm -i
jest 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 rm
bę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 rm
do rm -i
jest 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 sudo
pozwala uruchamiać programy jako inny użytkownik, po sprawdzeniu, czy masz na to zgodę. passwd
edytuje 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/sudo
i /usr/bin/passwd
może to zrobić, ponieważ mają ustawiony bit setuid , jak pokazuje to, s
któ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/rm
nie ma s
: są jego uprawnienia -rwxr-xr-x
, a /usr/bin/passwd
i /usr/bin/so
mieć -rwsr-xr-x
zamiast tego. To sprawia, że bez względu na to, kto uruchamia passwd
lub sudo
faktycznie 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) sudo
i passwd
są 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/rm
nie 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 sudo
i passwd
sprawdzają, kto tak naprawdę je obsługuje, i sprawdzają, czy coś jest dozwolone przed zrobieniem tego; rm
nie 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ć.
rm
Oczywistym sposobem na usunięcie pliku bez rm
Ubuntu 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.txt
w bieżącym katalogu, rm
osią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")'
( python
zamiast python3
w 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 rm
polecenia (aby wymagało hasła lub w jakikolwiek inny sposób) lub ograniczenie dostępu, aby w rm
ogóle go nie zapobiec.
rm
„s -I
opcja. Monituje tylko o usunięcie 4 lub więcej plików lub o rekurencyjne usunięcie. Nie masz więc zwyczaju używania -f
, \rm
unikania rozwijania aliasu lub pisania y
bez 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.
mv foo.txt /tmp/.gone
następnie uruchom ponownie komputer, odrzucając tmpfs, który był tworzony /tmp
. Lub po prostu użyj, mv
aby 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.
Możesz zmienić uprawnienia do /bin/rm
polecenia 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 rm
polecenia 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 rmdir
polecenia, 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 755
dlachmod
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 -m
aby uniemożliwić uruchamianie określonych użytkowników rm
i rmdir
dotyczy 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:
-m
flaga oznacza zmodyfikować pliki ACL.u
oznacza użytkownika. Może mieć następujące wartości u
dla użytkownika, g
grupy i o
wszystkich innych<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.-
, może również zawierać następujące litery r
dla uprawnień do odczytu, uprawnień w
do zapisu i x
wykonania.sudo setfacl -m u:<username>:- /bin/rm /bin/rmdir
, IIRC. Możesz przetestować ACL za pomocągetfacl /bin/rm /bin/rmdir
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 rm
polecenia. (Powstrzymuję się od samodzielnego edytowania, na wypadek, gdybyś nie chciał tego powiedzieć).
rm
polecenia.
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
.
Napisałem skrypt do ochrony hasłem, zgodnie rm
z żądaniem OP, ale wprowadziłem również zmiany, aby zapobiec przypadkowemu usunięciu:
Edycja: 5 marca 2017 r. - Zmień metodę sprawdzania, czy działa w terminalu.
Użyj gksu gedit /usr/local/bin/rm
i 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.
rm
skrypt jako wykonywalnyOznacz nowy rm
skrypt jako wykonywalny, używając:
sudo chmod +x /usr/local/bin/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/bin
znajduje się wyżej na liście niż /bin
nasza komenda rm
jest wywoływana. Po uzyskaniu prawidłowego hasła woła, /bin/rm
aby 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 sudo
jest używany i nie prosi o hasło. Ponadto, jeśli rm
jest wywoływany z poziomu aplikacji GUI, hasło nie jest wymagane.
Wywołania skryptu logger
do nagrywania za każdym razem rm
były ręcznie wywoływane za pomocą terminala. Użycie polecenia jest rejestrowane w /var/log/syslog
.
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 rsync
lub unison
automatycznie 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.
Nie bezpośrednia odpowiedź na pytanie, którego szukasz, ale:
Jeśli twoi znajomi usuwają twoje pliki za pomocą rm
polecenia, 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” mv
komendę, 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ć.
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.
Bardzo głupie obejście bardzo głupiego problemu.
Jeśli nie chcesz chmod
rm
, rmdir
lub 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ą, rm
system 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ć rmalias
lub cokolwiek, co chcesz usunąć.
Możesz też utworzyć konto gościa, które nie ma dostępu do twojego katalogu domowego.
sudo [user]
orazdummy user
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/rmold
aby przenieść stary RM w inne miejsce.
Teraz uruchom, sudo nano /bin/rm
aby utworzyć opakowanie.
W Nano wpisz następujące polecenie:
#!/bin/bash
/bin/rmold "$@"
exit "$?"
Następnie przytrzymaj CTRL
i naciśnij, X
aby wyjść. Naciśnij Y
po wyświetleniu monitu, a następnie naciśnij, ENTER
aby zapisać plik.
Wreszcie musimy nadać temu odpowiednie uprawnienia:
sudo chmod a+x /bin/rm
I proszę bardzo.
$@
=> "$@"
. Tutaj proponujesz bardzo niebezpieczną wersję oryginału i bezpieczną rm
: co, jeśli istnieje plik o nazwie foo -i -r *
( -i
dodany w celu ochrony niewinnych użytkowników)?
"
-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 rm
będzie czuć się jak usuwa pliki jako bieżącego użytkownika - nazywa bez sudo
, a normalne rm
działa jako rozmówcy - ale robi to jako root Jeśli już oni niedawno sudo
ed wygrali” zauważają, że mogą usuwać pliki systemowe, nawet jeśli wiedzą o zmianie.)