Как я могу зашифровать или скрыть пароли в сценарии Perl?
-
03-07-2019 - |
Вопрос
Я работаю над сценарием Perl, который использует Ожидать для входа через telnet на удаленные машины (не спрашивайте, нужно использовать telnet).Я также при необходимости выполняю операции входа в систему p4 и использую функцию ожидания для ввода правильных паролей.На данный момент я просто читаю пароли из переменной среды открытого текста, т.е. export PASSWORD=password
, что, как я знаю, не очень хорошо с точки зрения безопасности.
Как лучше всего хранить пароли для подобных сценариев, которым требуется много паролей для нескольких систем?Зашифровано каким-то образом в текстовом файле?Или что-то другое?
Имейте в виду, что я не могу легко изменить существующие системы, например, я не могу установить SSH или что-то в этом роде.
Решение
Вероятно, лучший способ — поместить пароли в отдельный файл и заблокировать безопасность этого файла, чтобы только вы имели доступ для чтения.К сожалению, если вы храните в своем скрипте зашифрованный пароль, вам также придется сохранить метод расшифровки, чтобы злоумышленник мог запустить расшифровку и восстановить ваш пароль.
Другие советы
Ранее был очень похожий вопрос, см. мой ответ к этому.
Короче говоря, человек должен разорвать цепочку доверия.Все остальное — запугивание.
Зачем беспокоиться о паролях в сценарии, если вы используете telnet?Предполагаемому злоумышленнику будет так же легко или проще перехватить данные по сети, чем с удаленной машины, и в любом случае вы ничего не сможете с этим поделать.
Это похоже на попытку поставить решетку на окне и оставить дверь открытой.
Поскольку вы уже используете ожидаемый результат, вам следует изучить возможность перенаправления gpg -d на зашифрованный файл, содержащий ваши пароли.Хранить пароли в переменной системной среды просто неправильно.Пароль, который будет использоваться для расшифровки файла gpg, будет введен при запуске, затем загрузите все пароли из файла и запустите свои файлы.Тогда все готово, поэтому пароли существуют только в виде открытого текста, пока приложение работает.
Редактировать Кстати, помещать любые пароли в скрипт — это плохо;Помните, что сценарий представляет собой простой текстовый файл, поэтому узнать пароль проще простого.Аналогичным образом, даже скомпилированные вами приложения могут быть отменены с помощью «строк», которые могут искать строки, содержащиеся в коде (обычно пароли).
Если вы используете Mac OS X, я нашел этот изящный способ получить имена пользователей и пароли из вашей связки ключей.
Обновлять:Кажется, ссылка не работает по состоянию на 22 июля 2013 г.Следующий фрагмент кода Bash показывает, как я использую эту технику (для загрузки данных о продажах iTunes):
domain="itunesconnect.apple.com"
user="user@example.com"
pass=$(security find-internet-password -ws $domain -a $user)
Мне нравится уже упомянутое решение о помещении паролей в отдельный файл.Кроме того, вы можете хэшировать реальные пароли, подобно тому, как это сделано в /etc/passwd.Хотя вы можете использовать один и тот же хеш-ключ для всех из них в зависимости от того, как работает ваше приложение.Очевидно, что недостатком этого является то, что кто-то должен ввести хэш-ключ, чтобы запустить ваш скрипт, и это не будет работать в пакетной среде.
Одно место, где можно начать что-то изучать о хешировании, — это stackoverflow. вопрос