Czasami tak robię echo "secret" | mysql -u root -p ...
. Teraz zastanawiam się nad bezpieczeństwem: czy ktoś wymieniający wszystkie procesy widzi hasło?
Aby to sprawdzić, spróbowałem echo "test" | sleep 1000
i polecenie echa z kluczem tajnym nie było widoczne na wyjściu „ps aux”. Zakładam więc, że jest bezpieczny - ale czy ekspert ds. Bezpieczeństwa może to potwierdzić? :)
.history
.) W pliku historii .Odpowiedzi:
Odpowiedź na to zależy od używanej powłoki. Wiele muszle mają
echo
jako wbudowanego polecenia co oznacza, że nie tarło oddzielnego procesu, a tym samym nie pojawi się w procesie listą. Jednak jeśli wpiszesz/bin/echo
lub./echo
wyłączyszenable -n echo
wbudowane polecenia za pomocą polecenia, powłoka nie użyje wbudowanego polecenia i zamiast tego użyje wersji binarnej. To pojawi się na liście procesów.Jeśli używasz pliku binarnego zamiast wbudowanego powłoki, polecenie echo będzie wyświetlane tak długo, jak długo zajmie przeniesienie danych do bufora STDIN drugiego procesu. Bufor ma skończony rozmiar, więc jeśli w buforze znajduje się więcej danych, niż zmieści się, polecenie echo będzie musiało zostać zawieszone przez chwilę, aż inny proces będzie mógł odczytać niektóre dane z bufora. W większości przypadków (takich jak dwa przykłady podane powyżej) ten okres czasu będzie wynosił mikrosekundy. Jeśli zdarzy ci się wklejać zrzut 20 MB SQL do MySQL przy użyciu echa, może to być dłuższe. Bez względu na to, jak krótki jest ten czas, jeśli użyjesz pliku binarnego zamiast wbudowanej powłoki i ktoś zdarzy się, że odpowiednio dopasuje czas, będzie mógł zobaczyć proces na liście procesów.
Można tego uniknąć, umieszczając tajne dane w pliku (z odpowiednimi uprawnieniami) i używając pliku jako STDIN w następujący sposób:
źródło
W przypadku mysql ~ / .my.cnf można wykorzystać do przechowywania tajemnic, tj
źródło
Po prostu użyj
i naciśnij Enter. Zostaniesz poproszony o podanie hasła i nie będzie ono widoczne ani na liście procesów, ani w plikach historii.
źródło