2009-03-03 10 views
9

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

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

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

+0

С какими видами угроз вы пытаетесь защитить? Насколько вы доверяете (или не доверяете) другим пользователям в поле, над которым работаете? – Anirvan

+0

Я только начинаю работу над этим скриптом, и для тестирования я использовал его как открытый текст. Таким образом, у многих пользователей есть общие пользователи, и поле доступно. Так что в основном я бы просто хотел, чтобы другие пользователи, по крайней мере, не могли прочитать все пароли. –

ответ

10

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

+0

+1 Это единственное логическое решение, если вы не хотите идти с маршрутом «безопасность через безвестность». –

+0

@ lacqui - вы можете написать (en | de) критический код в XS и скомпилировать его, а интерфейс с ним через Perl и (для безопасности) не распространять источник XS со стандартным распределением модулей. Но даже это не идеально. –

2

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

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

+0

Итак, я предполагаю, что вы имеете в виду «GNU Privacy Guard», он не выглядит на наших ящиках, насколько вам известно, будет ли gpg компилироваться на HPUX и Solaris без проблем? –

+0

Я не уверен, что GPG имеет Solaris и HPUX, однако если они являются ящиками на основе nix, то я уверен, что для этого есть источник. – Suroot

5

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

Это звучит как случай, когда нужно ставить бары в окно и оставлять дверь открытой.

+0

Это очень хороший момент, я понимаю, что использование telnet - плохая идея, а не мое дело, но не совсем думала в этих терминах. Так вы действительно серьезно, что я не должен заботиться? Наверное, я должен заботиться из-за обзоров кода и т. Д., Но, тем не менее, интересная мысль. –

+0

Укажите причину в коде, нажмите для изменения процесса и запишите в коде код. Шифрование пароля, а затем отправка четкого текста по telnet из сценария - это использование кода для записи вашего ПИН-кода, а затем просто крика через комнату, полную людей, которых вы не знаете. – MarkusQ

+1

Хотя я согласен с telnet, просто потому, что замок на передней двери сломан, не означает, что вы удаляете блокировки на всех окнах. Что произойдет, когда вы окончательно зафиксируете замок передних дверей? – Schwern

7

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

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

0

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

Одно место, чтобы начать узнавать что-то о хеширования из этого StackOverflow question

2

На случай, если вы используете Mac OS X, я нашел this nifty way to grab usernames and passwords from your Keychain.

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

domain="itunesconnect.apple.com" 
user="[email protected]" 
pass=$(security find-internet-password -ws $domain -a $user) 
+0

Ссылка здесь сломана ... – Dean

+0

@Dean См. Обновленный ответ. – shawkinaw