Есть ли способ получить доступ к связке ключей в Windows без указания мастер-пароля?
Я разрабатываю сценарий с коллегой, который включает в себя подключение к базе данных. Мы хотим, чтобы код не зависел от того, какой из нас его использует, сохраняя при этом наши пароли в секрете и не требуя аутентификации снова и снова в течение рабочего дня. После некоторого поиска (мы оба новички в Python) кажется, что мы можем использовать связку ключей для этой цели, поэтому я установил ее из pip (наиболее вероятной версии 1.2.2 библиотеки, основываясь на моей памяти о дате установки).
Проблема в том, что когда я пытаюсь получить доступ к моим сохраненным паролям, мне предлагается установить мастер-пароль для доступа к связке ключей, как показано здесь (из IDLE):
>>> import keyring
>>> keyring.set_password('Service', 'MyUsername', 'MyPassword')
Warning (from warnings module):
File "C:\Python27\lib\getpass.py", line 92
return fallback_getpass(prompt, stream)
GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.
Please enter password for encrypted keyring:
После установки пароля я могу легко получить и установить пароли, пока не перезапущу оболочку. Теперь мне нужно снова ввести мастер-пароль:
>>> ================================ RESTART ================================
>>> import keyring
>>> print keyring.get_password('Service', 'MyUsername')
Warning (from warnings module):
File "C:\Python27\lib\getpass.py", line 92
return fallback_getpass(prompt, stream)
GetPassWarning: Can not control echo on the terminal.
Warning: Password input may be echoed.
Please enter password for encrypted keyring:
После ввода мастер-пароля эта аутентификация сохраняется только во время текущего сеанса / между перезапусками. При запуске сценариев из командной строки это еще хуже - мне приходится проходить проверку подлинности каждый раз, когда запускается сценарий. На данный момент, связка ключей не экономит мне время и усилия, и я сомневаюсь, что это делает мой пароль более безопасным по сравнению с запоминанием и ручным вводом.
После поиска решений, похоже, что брелок для ключей будет автоматически аутентифицироваться в Unix, если мастер-пароль совпадает с паролем для учетной записи пользователя, но это не сработало для меня в Windows.
Пытаюсь ли я заставить брелок сделать что-то, для чего он не предназначен, или в моей реализации просто ошибка?
Похоже, мой опыт противоречит тому, о котором сообщил другой пользователь, который утверждает, что ему не предлагается пароль, когда приложение пытается получить доступ к связке ключей в связанном вопросе. Как работает python-keyring в Windows?
1 ответ
Какой бэкэнд вы используете? Проверьте с помощью:
>>> from keyring import get_keyring
>>> get_keyring()
[... what is output here?]
Если это выводит это:
<keyring.backends.file.EncryptedKeyring object at 0x.....>
Тогда вот почему он запрашивает пароль. Модулю не удалось найти какой-либо набор ключей для конкретной платформы, поэтому он просто шифрует ваши пароли с помощью мастер-пароля и помещает их в обычный файл.
Лично для меня более важно, чтобы мои сценарии выполнялись без присмотра, чем чтобы мои пароли были безопасными, поэтому я написал эту функцию:
def configureKeyring():
"""
EncryptedKeyring requires a master password to unlock it, which is not ideal
for our scripts since we want them to run unattended. So if we're using
EncryptedKeyring, automatically swap to a PlaintextKeyring instead.
If we're using something else, say WinVaultKeyring, then that's more secure
than PlaintextKeyring without being any less convenient, so we'll use it.
"""
from keyring import get_keyring, set_keyring
from keyring.backends.file import EncryptedKeyring, PlaintextKeyring
if isinstance(get_keyring(), EncryptedKeyring):
set_keyring(PlaintextKeyring())
Прежде чем использовать keyring
в set_password
или же get_password
, запустите эту функцию configureKeyring()
, если вы, как и я, цените необходимость вставлять мастер-пароль, а не сохранять свои пароли в безопасности. Пожалуйста, поймите, что для безопасности вы храните свои пароли в незашифрованном виде, прежде чем делать это.
Лучшее долгосрочное решение состоит в том, чтобы, вероятно, изучить все другие доступные бэкэнды и установить соответствующие предварительные требования, чтобы можно было использовать другой, если такой существует, когда вам не нужно вводить мастер-пароль, а просто войти в систему достаточно.