Припустимо, що я використовував sha1passдля генерування хеша чутливого пароля в командному рядку. Я можу використовувати sha1pass mysecretдля створення хешу, mysecretале це має той недолік, який mysecretзараз є в історії башів. Чи є спосіб досягти кінцевої мети цієї команди, уникаючи виявлення mysecretу простому тексті, можливо, використовуючи passwdпідказку -style?
Мене також цікавить узагальнений спосіб зробити це для передачі конфіденційних даних будь-якій команді. Метод зміниться, коли конфіденційні дані передаються як аргумент (наприклад, в sha1pass) або STDIN до якоїсь команди.
Чи є спосіб досягти цього?
Редагувати : Це питання привернуло багато уваги, і нижче було запропоновано кілька хороших відповідей. Підсумок:
- Відповідно до відповіді @ Kusalananda , в ідеалі ніколи не доведеться вводити пароль або секрет як аргумент командного рядка для утиліти. Це є вразливим декількома способами, як описано ним, і слід використовувати краще розроблену утиліту, яка здатна приймати секретний вклад на STDIN
- @ vfbsilva відповідь описує, як запобігти збереженню речей у історії баш
- @ Відповідь Джонатана описує ідеально хороший спосіб досягти цього, доки програма може приймати свої секретні дані про STDIN. Як такий, я вирішив прийняти цю відповідь.
sha1passв моєму ОП був лише прикладом, але дискусія встановила, що існують кращі інструменти, які беруть дані про STDIN. - як зазначає @R .. у своїй відповіді , використання розширення команд на змінній не є безпечним.
Отже, підводячи підсумок, я прийняв відповідь @ Джонатана, оскільки це найкраще рішення, враховуючи, що у вас є добре розроблена і добре сприйнята програма, з якою можна працювати. Хоча передача пароля або секрету як аргументу командного рядка принципово небезпечна, інші відповіді пропонують способи пом'якшення простих проблем безпеки.
sha1pass mysecretпрацює, і, отже, знати, щоmysecretтаке. (Це працює лише протягом кількох секунд, поки програма насправді працює, звичайно ...)