Widziałem ludzi, którzy wspominali w innych odpowiedziach , że dołączenie bieżącego katalogu roboczego (' .
') do $PATH
zmiennej ś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:
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
PATH
z góry określonej listy ścieżek statycznych polega na uporządkowaniu i ratowaniu się przed potencjalnym problemem.Jeśli jednak zamierzasz dodać
.
do swojegoPATH
, 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 nimPATH
jest ogromnym zagrożeniem bezpieczeństwa: możeszcd
przejść 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.źródło
ls
w bieżącym katalogu. następnie uruchom,ls
aby sprawdzić wyodrębnione pliki i już uruchomiłeś szkodliwy kod.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:
.
znajduje się na początku ŚCIEŻKI, ponieważ standardowe polecenia mogą zostać zastąpione bez zauważenia tego (zwykle takie,ls
któ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: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.
źródło
sl
aby zobaczyć, jak często zdarza się punkt 3.alias l=`ls`
.ls
że otrzymam listę katalogów, ale niektóre pobrane przeze mnie projekty mogą miećls
skrypt w folderze projektu głównego jako skrót do czegoś innego.ls
jest prawdopodobnie złym przykładem, ale z pewnością mogę sobie wyobraziće
edycję,d
debugowanie,m
make,b
build. 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łanym
do wykonania.w
i[
.Nawet jeśli zawsze jesteś bardzo ostrożny z tym, co piszesz, umieszczanie
.
na swoimPATH
, 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
.
wPATH
, 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.źródło