Как я могу зашифровать или скрыть пароли в скрипте Perl? - PullRequest
9 голосов
/ 03 марта 2009

Я работаю над сценарием Perl, который использует Ожидайте для входа через telnet на удаленные машины (не спрашивайте, нужно использовать telnet). Я также выполняю операции входа в систему p4 по мере необходимости и использую ожидаемую передачу правильных паролей. Сейчас я просто читаю пароли из переменной окружения в виде открытого текста, т.е. export PASSWORD=password, что, как я знаю, не очень хорошо с точки зрения безопасности.

Каков наилучший способ хранения паролей для таких сценариев, для которых требуется множество паролей для нескольких систем? Зашифрованы в текстовом файле как-то? Или что-то еще?

Имейте в виду, что я не могу легко изменить существующие системы, например, я не могу установить SSH или что-то подобное.

Ответы [ 6 ]

10 голосов
/ 03 марта 2009

Вероятно, ваш лучший способ - поместить пароли в отдельный файл и заблокировать защиту для этого файла, чтобы только у вас был доступ для чтения. К сожалению, если вы храните зашифрованный пароль в своем скрипте, вам также нужно будет сохранить метод дешифрования, чтобы злоумышленник мог выполнить расшифровку и восстановить ваш пароль.

7 голосов
/ 03 марта 2009

Ранее был очень похожий вопрос, см. мой ответ на него.

Короче говоря, человек должен сбросить цепь доверия. Все остальное - запутывание.

5 голосов
/ 03 марта 2009

Зачем беспокоиться о паролях в скрипте, если вы используете telnet? Предполагаемому злоумышленнику будет проще или проще собирать данные по проводам, чем с удаленной машины, и в любом случае вы ничего не сможете с этим поделать.

Это звучит как пример попытки поставить решетку в окне и оставить дверь распахивающейся.

2 голосов
/ 21 марта 2012

На случай, если вы используете Mac OS X, я нашел этот отличный способ получить имена пользователей и пароли из вашей цепочки для ключей .

Обновление : по состоянию на 22 июля 2013 г. ссылка не работает. Следующий фрагмент кода bash показывает, как я использую эту технику (для загрузки данных о продажах iTunes):

domain="itunesconnect.apple.com"
user="user@example.com"
pass=$(security find-internet-password -ws $domain -a $user)
2 голосов
/ 03 марта 2009

Поскольку вы уже используете функцию ожидаемо, вам следует обратить внимание на возможность перенаправить gpg -d на зашифрованный файл, содержащий ваши пароли. Хранить пароли в системной переменной среды просто неправильно. Пароль, который будет использоваться для расшифровки файла gpg, будет введен при запуске, затем загрузит все пароли из файла и запустит ваши файлы. Тогда все готово, поэтому пароли существуют только в незашифрованном виде во время работы приложения.

Редактировать просто добавление паролей в скрипт - это плохо; помните, что скрипт - это просто текстовый файл, который делает просмотр пароля простым, как и все. Точно так же даже приложения, которые вы компилируете, могут быть изменены на «строки», которые могут искать строки, содержащиеся в коде (обычно пароли).

0 голосов
/ 11 марта 2009

Мне нравится упомянутое решение о помещении паролей в отдельный файл. Кроме того, вы можете хешировать настоящие пароли, как и в / etc / passwd. Хотя вы можете использовать один и тот же хэш-ключ для всех из них, в зависимости от того, как работает ваше приложение. Очевидно, недостатком этого является то, что кто-то должен ввести хеш-ключ для запуска вашего скрипта, и это не сработает в пакетной среде.

Одним из мест, где можно начать изучение хэширования, является этот стекопоток вопрос

...