Załóżmy, że użyłem sha1passdo wygenerowania skrótu poufnego hasła w wierszu polecenia. Mogę użyć sha1pass mysecretdo wygenerowania skrótu, mysecretale ma to wadę, która mysecretjest teraz w historii bash. Czy istnieje sposób, aby osiągnąć cel końcowy tego polecenia, unikając ujawniania mysecretzwykłego tekstu, być może za pomocą passwdzachęty w stylu?
Interesuje mnie również uogólniony sposób, aby to zrobić w celu przekazywania wrażliwych danych do dowolnego polecenia. Metoda zmieni się, gdy wrażliwe dane zostaną przekazane jako argument (np. sha1passIn) lub STDIN do jakiegoś polecenia.
Czy istnieje sposób na osiągnięcie tego?
Edycja : To pytanie przyciągnęło wiele uwagi, a poniżej podano kilka dobrych odpowiedzi. Podsumowanie to:
- Zgodnie z odpowiedzią @ Kusalananda idealnie byłoby, gdyby nigdy nie trzeba było podawać narzędzia ani hasła lub hasła jako argumentu wiersza poleceń. Jest to podatne na kilka sposobów opisanych przez niego, i należy użyć lepiej zaprojektowanego narzędzia, które jest w stanie pobierać tajne dane wejściowe na STDIN
- Odpowiedź @ vfbsilva opisuje, jak zapobiegać przechowywaniu rzeczy w historii bash
- Odpowiedź Jonathana opisuje doskonale dobrą metodę osiągnięcia tego celu, o ile program może pobierać swoje tajne dane na STDIN. Jako taki postanowiłem zaakceptować tę odpowiedź.
sha1passw moim OP był tylko przykładem, ale dyskusja wykazała, że istnieją lepsze narzędzia, które pobierają dane na STDIN. - jak zauważa @R .. w swojej odpowiedzi , użycie interpretacji poleceń dla zmiennej nie jest bezpieczne.
Podsumowując, zaakceptowałem odpowiedź @ Jonathana, ponieważ jest to najlepsze rozwiązanie, biorąc pod uwagę, że masz dobrze zaprojektowany i dobrze działający program do pracy. Chociaż przekazanie hasła lub hasła jako argumentu wiersza polecenia jest zasadniczo niebezpieczne, inne odpowiedzi zapewniają sposoby złagodzenia prostych problemów związanych z bezpieczeństwem.
sha1pass mysecretjest uruchomiony, a tym samym wiedzieć, comysecretjest. (Działa to tylko przez kilka sekund, gdy program jest uruchomiony, oczywiście ...)