Możesz uruchomić niewłaściwy program. Ktoś może zmusić cię do uruchomienia ich programu.
The -execdir
Działanie prowadzi swoją komendę z katalogu, który zawiera plik (s) stwierdzono. Gdy $PATH
zawiera ścieżki względne, takie jak .
cokolwiek, co się nie zaczyna/
, -execdir
jest niepewne, ponieważ katalog, w którym znajduje się plik (lub inny katalog rozwiązany względem niego) może również zawierać plik wykonywalny o tej samej nazwie, co ten, którego próbujesz biegać. Ten potencjalnie niezaufany plik wykonywalny zostałby wtedy uruchomiony.
Może to być celowo wykorzystane przez innego użytkownika, aby spowodować uruchomienie jego programu, co może spowodować uszkodzenie lub naruszenie bezpieczeństwa danych, zamiast programu, który próbujesz uruchomić. Lub, rzadziej, może to po prostu spowodować nieumyślne uruchomienie niewłaściwego programu, nawet bez próby spowodowania problemu.
Jeśli wszystko w PATH
zmiennej środowiskowej jest ścieżka bezwzględna, ten błąd nie powinien wystąpić, nawet jeśli katalog szukasz i -execdir
ing z jest zawarty w PATH
. (Sprawdziłem, czy to działa.) Jeśli uważasz, że nie masz żadnych katalogów względnych, $PATH
ale nadal pojawia się ten błąd, zaktualizuj swoje pytanie o szczegóły, w tym dane wyjściowe echo "$PATH"
.
Konkretny przykład.
Jako przykład tego, co może pójść nie tak, załóżmy:
- Alice ma
.
ją, $PATH
ponieważ chce móc uruchamiać programy w dowolnym katalogu, w którym by się nie znajdowała cd
, bez zawracania sobie głowy dodawaniem ich nazwisk ./
.
- Wróg Alicji, Ewa, dzielił się
/home/eve/shared
z Alicją.
- Alice chce statystyk (wierszy, słów, bajtów) w
.c
plików, które Eve jej udostępniła.
Więc Alice działa:
find ~eve/shared -name \*.c -execdir wc {} \;
Na nieszczęście dla Alicji Eve stworzyła własny skrypt, nazwał go wc
, ustawiła jako wykonywalną ( chmod +x
) i umieściła go potajemnie w jednym z katalogów /home/eve/shared
. Scenariusz Ewy wygląda następująco:
#!/bin/sh
/usr/bin/wc "$@"
do_evil # Eve replaces this command with whatver evil she wishes to do
Więc kiedy zastosowania Alice find
z -execdir
biec wc
na plikach Ewa jest wspólne, a dojdzie do plików znajdujących się w tym samym katalogu co niestandardowego Ewy wc
skryptu, Evewc
tras - ze wszystkich przywilejów Alicji!
(Podstępna, Ewa sprawiła, że jej wc
skrypt działa jak opakowanie systemu wc
, więc Alice nawet nie wie, że coś poszło nie tak, tzn. Żedo_evil
zostało uruchomione. Jednak możliwe są prostsze - i bardziej wyrafinowane - warianty. )
Jak find
temu zapobiec.
find
zapobiega występowaniu tego problemu bezpieczeństwa, odmawiając podjęcia -execdir
działania, gdy $PATH
zawiera katalog względny.
find
oferuje dwa komunikaty diagnostyczne w zależności od konkretnej sytuacji.
Jeśli .
jest $PATH
, to (jak widzieliście) mówi:
find: The current directory is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove the current directory from your $PATH (that is, remove "." or leading or trailing colons)
Prawdopodobnie ma specjalny komunikat dla .
sprawy, ponieważ jest szczególnie powszechny.
Jeżeli względna ścieżka inna niż .
--say, foo
--appears w $PATH
i uruchomić find
z -execdir
, to mówi:
find: The relative path `foo' is included in the PATH environment variable, which is insecure in combination with the -execdir action of find. Please remove that entry from $PATH
Lepiej nie mieć ścieżek względnych $PATH
.
Ryzyko posiadania .
lub innych względnych ścieżek $PATH
jest szczególnie zwiększone, gdy używasz narzędzia, które automatycznie zmienia katalog, dlatego find
nie pozwalasz na użycie -execdir
w tej sytuacji.
Ale posiadanie względnych ścieżek, szczególnie .
w twoim, $PATH
jest z natury ryzykowne i tak naprawdę najlepiej go unikać. Rozważ sytuację fikcyjną w powyższym przykładzie. Załóżmy, że zamiast biegać find
, Alice po prostu cd
s do ~eve/shared/blah
i biegnie wc *.c
. Jeśli blah
zawiera wc
skrypt Eve , do_evil
działa jako Alice.