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