Czy można to bezpiecznie dodać? do mojej ŚCIEŻKI? Dlaczego?


49

Widziałem ludzi, którzy wspominali w innych odpowiedziach , że dołączenie bieżącego katalogu roboczego (' .') do $PATHzmiennej środowiskowej jest złym pomysłem , ale nie udało mi się znaleźć pytania dotyczącego konkretnie tego problemu.

Dlaczego więc nie powinienem dodać .swojej ścieżki? A jeśli mimo ostrzeżeń i tak to zrobię, na co muszę uważać? Czy bezpieczniej jest dodać go na końcu niż na początku?


Odpowiedzi:


39

Jeśli jesteś jedynym użytkownikiem komputera, jest w porządku, o ile wiesz, co robisz. Ogólny problem polega na tym, że mając obecny katalog PATH, nie widzisz poleceń jako stałej listy. Jeśli musisz uruchomić skrypt / program z bieżącego katalogu, zawsze możesz go jawnie uruchomić, przygotowując się ./do jego nazwy (mówisz systemowi „Chcę uruchomić ten plik z mojego bieżącego katalogu”).

Powiedz, teraz masz wszystkie te małe skrypty w całym systemie plików; pewnego dnia na pewno wybierzesz niewłaściwy. Posiadanie PATHz góry określonej listy ścieżek statycznych polega na uporządkowaniu i ratowaniu się przed potencjalnym problemem.

Jeśli jednak zamierzasz dodać .do swojego PATH, sugeruję dołączyć go na końcu listy ( export PATH=$PATH:.). Przynajmniej nie zastąpisz w ten sposób plików systemowych.

Jeśli jesteś rootem w systemie i masz system narażony na konta innych użytkowników, posiadanie .w nim PATHjest ogromnym zagrożeniem bezpieczeństwa: możesz cdprzejść do katalogu niektórych użytkowników i nieumyślnie uruchomić tam złośliwy skrypt tylko dlatego, że źle wpisałeś rzecz lub skrypt, który ma taką samą nazwę jak systemowy plik binarny.


1
+ Zaakceptuj podstawową teorię i wspomnij, że problemy mogą nadal istnieć, nawet gdy jesteś jedynym użytkownikiem w systemie. Obie odpowiedzi przynoszą doskonałe punkty. Dodam, że za każdym razem, gdy udostępniasz katalogi innemu użytkownikowi, zwiększa się ryzyko, bez względu na to, czy jesteś rootem, czy nie.
Jander

6
nawet jako jedyny użytkownik na komputerze: za każdym razem, gdy wyodrębnisz niezaufany plik tar, może on umieścić lsw bieżącym katalogu. następnie uruchom, lsaby sprawdzić wyodrębnione pliki i już uruchomiłeś szkodliwy kod.
lesmana

35

Ryzyko polega na tym, że ktoś umieści złośliwy plik wykonywalny w katalogu, który akurat jest twoim bieżącym.

Najgorszy przypadek ma miejsce, gdy:

  • jesteś zalogowany jako root, ponieważ złośliwe polecenie ma nieograniczoną siłę rażenia
  • .znajduje się na początku ŚCIEŻKI, ponieważ standardowe polecenia mogą zostać zastąpione bez zauważenia tego (zwykle takie, lsktóre może ukryć się na liście).

Ryzyko jest znacznie niższe, jeśli jesteś zalogowany jako zwykły użytkownik i masz .na końcu swojej ŚCIEŻKI, ale nadal istnieje:

  • ktoś może się dowiedzieć, że często błędnie wpisujesz polecenie i instalujesz pasujące
  • ktoś może zainstalować fałszywe polecenie o nazwie, które nie zostało zainstalowane.

Pamiętaj, że w każdym razie ryzyko nadal istnieje, nawet jeśli jesteś jedynym użytkownikiem maszyny. Złośliwe oprogramowanie zostanie zainstalowane, jeśli na przykład wyodrębnisz archiwum pobrane z zainfekowanej witryny.


15
Zainstaluj, slaby zobaczyć, jak często zdarza się punkt 3.
jordanm

lub alias l=`ls`.
Anko

nie musi być złośliwy. Oczekuję, lsże otrzymam listę katalogów, ale niektóre pobrane przeze mnie projekty mogą mieć lsskrypt w folderze projektu głównego jako skrót do czegoś innego. lsjest prawdopodobnie złym przykładem, ale z pewnością mogę sobie wyobrazić eedycję, ddebugowanie, mmake, bbuild. Niektóre z nich mam na całym świecie. Jeśli wpiszę m, spodziewam się, że make uruchomi się (mój skrót), a nie jakiś skrypt lokalny wywołany mdo wykonania.
gman

@gman Right. Niew złośliwe polecenie może rzeczywiście nieświadomie mieć negatywne skutki. Zauważ, że komendy / aliasy jednoliterowe były niezadowolone od momentu powstania Uniksa ze względu na wysokie ryzyko błędnego wpisania. Rzadkie standardowe to wi [.
jlliagre

3

Nawet jeśli zawsze jesteś bardzo ostrożny z tym, co piszesz, umieszczanie .na swoim PATH, nawet na końcu, jest nadal niepewne, ponieważ niektóre programy zmieniają bieżący katalog na /tmp(który można zapisać na całym świecie) i mogą również próbować uruchomić narzędzia, które w rzeczywistości nie są zainstalowane, tym samym domyślnie co jest w /tmp. Jeśli tak się stanie, jest to wektor ataku.

Należy również zauważyć, że nie ma wiele wadą unikając .w PATH, ponieważ ./jest łatwy do pisania (w szczególności takich jak na klawiaturach QWERTY, gdzie te znaki są na kolejnych kluczy i nie ma potrzeby zmiany) i stosując ./pomoże również zakończenie, tym samym oszczędzając klawiszy na końcu.

Jeśli naprawdę chcesz mieć możliwość wpisywania poleceń z bieżącego katalogu, wówczas nowoczesne powłoki (takie jak zsh, wraz z jego command_not_found_handler) mogą zapewniać funkcje, aby to zrobić bezpiecznie, tj. Pozwalając na dodanie wszystkich kontroli bezpieczeństwa, które chcesz w module obsługi, przed polecenie jest wykonane.

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.