Załóżmy, że użyłem sha1pass
do wygenerowania skrótu poufnego hasła w wierszu polecenia. Mogę użyć sha1pass mysecret
do wygenerowania skrótu, mysecret
ale ma to wadę, która mysecret
jest teraz w historii bash. Czy istnieje sposób, aby osiągnąć cel końcowy tego polecenia, unikając ujawniania mysecret
zwykłego tekstu, być może za pomocą passwd
zachę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. sha1pass
In) 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ź.
sha1pass
w 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 mysecret
jest uruchomiony, a tym samym wiedzieć, comysecret
jest. (Działa to tylko przez kilka sekund, gdy program jest uruchomiony, oczywiście ...)