2010-08-17 3 views
5

У меня есть простой сценарий Bash, который автоматизирует задачи, требующие аутентификации на основе пароля. В настоящее время я хранить учетные данные в текстовом формате:пароль для шифрования/дешифрования, хранящийся в файле конфигурации

$ cat ~/.myconfig 
username=foo 
password=bar 

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

Я сделал некоторые исследования (здесь и в других местах), но я выход из моей глубины на этом ...

ответ

3

Вы можете сохранить пароль в md5 сумму, добавить соль раньше.

создать:

\#!/bin/bash 

salt=12345_ 

protocol=sha1sum 

read -p "Enter login: " username 
read -p -s "Password: " pass1 
read -p -s "Repeat: pass2 

if [ "pass1 != pass2" ]; then echo "Pass missmatch"; exit 1; else password=pass1; fi 

echo -en "$username " >> ./mypasswd 
echo -e "${salt}${password} | $protocol | awk '{print $1}'" >> ./mypqsswd 

чтения:

\#!/bin/bash 
salt=12345_ #(samesalt) 
protocol=sha1sum 

read -p "Enter username: " username 
read -p -s "Enter password: " password 

if [ `grep $username ./mypasswd | awk '{print $2}' != `echo -e "`echo ${salt}${password} | $protocol | awk '{print $2}'`" ]; then echo -e "wrong username or password"; exit 127; else echo -e "login successfull"; fi 

Там твой код.

+0

MD5 небезопасен. Вместо этого используйте SHA. ('sha1sum',' sha256sum', 'sha512sum', _etc_., в зависимости от требуемой длины хэша.) –

+0

лучше сохранить обычный текст, и я просто покажу, как это работает. я просто добавляю протокол переменная, поэтому просто измените ее, и вы получите sha256 sha512 .. и т. д. – Sky

+0

Спасибо, это выглядит полезно! – AnC

2

Если вы просто хотите, чтобы скрыть пароль, то хранить его хэш SHA1. Сравните хэш введенного пароля с сохраненным хешем.

+1

И изменить права доступа к файлам 'chmod go-rw myconfig' против атак со словарем. – Eike

+0

«Автоматизированный» означает, что пароль не введен. В нее нет никого. –

+0

GregS прав - если я автоматизирую ввод фактического пароля, требуя от пользователя ввода другого пароля, в первую очередь не нужно указывать фактический пароль. – AnC

3

Автоматизация задачи означает предоставление пароля; это не повлияет на то, что вы шифруете/обфускаете пароль, вам также необходимо предоставить дешифрование.
Единственный способ обойти эту дилемму - это программа, подобная агенту, например, ssh-agent, в которой хранятся ваши пароли.

(редактирование: исправлена ​​ссылка)

+0

ssh-agent звучит как то, что я ищу - однако я не могу понять, как именно я должен его использовать. a) Предполагая, что я загружаю зашифрованный пароль из файла, как его затем дешифровать? б) Что я использую для шифрования пароля в первую очередь? (Я ожидаю, что это будет отдельный ручной шаг.) – AnC

+0

ssh-agent был приведен в качестве примера того, как он может быть реализован. Однако это специфическое решение для связанных с ssh соединений. Для вашей конкретной ситуации может быть создано нечто подобное, но как это зависит от вашего приложения. – pavel

+0

Думаю, я думал о менеджере ключей/ключей, чтобы определить и получить доступ к соответствующей паре ключей, но для этого может не быть портативного решения. (Мое приложение - это просто сценарий Bash, который отправляет некоторые команды - думаю, HTTP basic auth с curl.) – AnC

Смежные вопросы