przesyłanie hasła i bezpieczeństwa

11

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 1000i 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ć? :)

gucki
źródło
Nie widać tego na liście procesów podczas uruchamiania niekończącej się pętli. Dobre pytanie.
Tim
1
Ponadto nie zapominaj, że cokolwiek wpiszesz w większości powłok, zostanie zapisane gdzieś (np .history.) W pliku historii .
Alexander Bird

Odpowiedzi:

13

Odpowiedź na to zależy od używanej powłoki. Wiele muszle mają echojako wbudowanego polecenia co oznacza, że nie tarło oddzielnego procesu, a tym samym nie pojawi się w procesie listą. Jednak jeśli wpiszesz /bin/echolub ./echowyłączysz enable -n echowbudowane 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:

mysql -u root -p < file_with_secret.sql
Ladadadada
źródło
5
Pamiętaj, że wpisując hasło w wierszu poleceń, najprawdopodobniej zapisuje się je w pliku historii powłoki, dlatego warto sprawdzić uprawnienia i zawartość pliku historii.
aculich
3

W przypadku mysql ~ / .my.cnf można wykorzystać do przechowywania tajemnic, tj

[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER

[mysql]
database = DBNAME
stawanie się
źródło
1

Po prostu użyj

mysql -uroot -p

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.

jdw
źródło
Dane zaakceptowane w STDIN przez MySQL to polecenie (polecenia), które należy uruchomić po zalogowaniu. „Sekretem” w pytaniu nie jest hasło.
Ladadadada,