Argumenty procesu są widoczne dla wszystkich użytkowników, ale środowisko jest widoczne tylko dla tego samego użytkownika ( przynajmniej w Linuksie i myślę, że w każdym nowoczesnym wariancie uniksowym). Dlatego przekazanie hasła przez zmienną środowiskową jest bezpieczne. Jeśli ktoś może odczytać zmienne środowiskowe, może wykonywać procesy tak jak Ty, więc gra już się skończyła.
Zawartość środowiska jest narażona na ryzyko wycieku pośredniego, na przykład jeśli biegniesz, ps
aby coś zbadać i przypadkowo skopiować i wkleić wynik, w tym poufne zmienne środowiskowe w miejscu publicznym. Innym ryzykiem jest to, że przekazujesz zmienną środowiskową do programu, który jej nie potrzebuje (w tym potomków procesu, który potrzebuje hasła) i że program ujawnia swoje zmienne środowiskowe, ponieważ nie spodziewał się, że będą poufne. Jak złe są te ryzyka wtórnego wycieku, zależy od tego, co robi proces z hasłem (jak długo trwa? Czy działa podprocesy?).
Łatwiej jest upewnić się, że hasło nie wycieknie przypadkowo, przekazując je przez kanał, który nie jest przeznaczony do podsłuchiwania, np. Potok. Jest to dość łatwe po stronie wysyłającej. Na przykład, jeśli masz hasło w zmiennej powłoki, możesz to zrobić
echo "$password" | theprogram
jeśli theprogram
oczekuje hasła na swoim standardowym wejściu. Zauważ, że jest to bezpieczne, ponieważ echo
jest wbudowane; nie byłoby bezpieczne z zewnętrznym poleceniem, ponieważ argument byłby ujawniony w ps
danych wyjściowych. Innym sposobem na osiągnięcie tego samego efektu jest dokument tutaj:
theprogram <<EOF
$password
EOF
Niektóre programy wymagające hasła mogą zostać poproszone o odczytanie go z określonego deskryptora pliku. Możesz użyć deskryptora pliku innego niż standardowe wejście, jeśli potrzebujesz standardowego wejścia do czegoś innego. Na przykład z gpg
:
get-encrypted-data | gpg --passphrase-fd 3 --decrypt … 3<<EOP >decrypted-data
$password
EOP
Jeśli nie można nakazać programowi odczytu z deskryptora pliku, ale można go odczytać z pliku, możesz nakazać mu odczytanie z deskryptora pliku, używając nazwy pliku takiej jak `/ dev / fd / 3.
theprogram --password-from-file=/dev/fd/3 3<<EOF
$password
EOF
W ksh, bash lub zsh możesz zrobić to bardziej zwięźle poprzez podstawienie procesu.
theprogram --password-from-file=<(echo "$password")