Какой наименее небезопасный способ хранения пароля, который используется сценарием?

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

Какие меры предосторожности следует предпринять, чтобы наиболее безопасно хранить эти учетные данные, при этом оставляя доступ к сценарию?

Уточнения:

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

2 ответа

Решение

Какой сервис? Некоторые службы имеют другие методы аутентификации, например, ключи SSH для SSH в сочетании с агентом SSH.

Я бы хранил пароль отдельно от сценария и следил за тем, чтобы у всех компонентов пути были установлены правильные разрешения. Например, убедитесь, что в пути /path/to/file, /, /path а также /path/to принадлежат пользователю, которому вы доверяете (root) и что они недоступны для записи тем, кому не разрешено просматривать ваши файлы. Наконец, рекомендуемые разрешения для file это 600 или 400.

Тот file может выглядеть так:

PASSWORD='something that you cannot remember'

В вашем скрипте используйте следующий код для импорта переменной:

. /path/to/file

Что касается вашего скрипта, убедитесь, что он не содержит дыр, которые могут позволить злоумышленникам выполнить код в контексте скрипта (например, неконтролируемая среда, которая может иметь произвольный $PATH набор переменных или неверное использование других файлов (например, поиск файла, доступного для записи).

Что касается фактической защиты вашего пароля, вы не можете. Он должен быть доступен как-то для другой службы. В качестве альтернативы вы можете зашифровать файл / скрипт, содержащий пароль, используя openssl или же gpg поэтому вам нужно ввести пароль, прежде чем учетные данные разблокированы. Это особенно полезно, если пароль вашей службы трудно запомнить.

Вместо жесткого кодирования пароля в файле, сохраните пароль в отдельном файле и защитите файл (chmod 700 или же chmod 500) так что только авторизованные пользователи могут получить к нему доступ.

Восстановить пароль с cat /dir/to/file/with/.password вместо чтения файла и сохранения его содержимого в переменной.

Я знаю, что это старый вопрос, но я столкнулся с этой похожей проблемой, и я использовал связку ключей Ubuntu для ее решения. Вот решение на ubuntu 18.04LTS Откройте терминал Запишите keyring set {{service}} {{username}}например, если вы используете это для регистрации школьного пароля:

keyring set school mohamed

Он зарегистрирует вас для пароля введите пароль. Теперь введенный вами пароль хранится в связке ключей Ubuntu.

Чтобы получить этот пароль, напишите в терминале:

keyring get school mohamed

чтобы использовать это в контексте сценария:

password=$(keyring get school mohamed)

Теперь пароль соответствует ранее введенному паролю.

Другие вопросы по тегам