2012-08-29 21 views
5

私はPythonでWindowsサービスを作成しています。鍵リングモジュールを使用して、定期的に永続的に使用する必要がある資格情報を安全に保管しています。これは、キーリングがローカルシステムのユーザー資格情報を使用してパスワードを格納することを意味します。Windows Server 2003でpythonキーリングを使用しているときのエラー1312

私は2つの基本的なキーリング機能を使用しています:get_password(SERVICE_NAME, username, password)set_password(SERVICE_NAME, username)。私はそれを理解し、バックエンドを自動的に設定するのを見て、鍵リングを事前設定していません。

これをWindows Server 2008以上で実行すると、すべてがスムーズに機能します。しかし、私はそれが私のサービスを実行するために使用されるローカルシステムユーザのログオンセッションとは何かを持っていると仮定し

error: (1312, 'CredWrite', 'A specified logon session does not exist. It may already have been terminated.')

:私は、Windows Server 2003でこれを実行した場合でも、私はこの厄介なエラーが出ますそれは私がそれがシステムで望む何かをする許可を持っているはずの超管理者 - スーパーユーザーの一種であると理解して以来独特です。しかし、ユーザーのログオン資格情報をローカル管理者に変更すると、すべてがスムーズに機能します。

サービスの設定を変更する必要がありますか?または、ローカルシステムユーザーのセキュリティポリシーを変更しますか?または、ローカル管理者の資格情報でこのサービスを実行するようにユーザーに依頼する必要がありますか?

答えて

3

Windows Server 2003のローカルシステムユーザーには、資格情報の保存と呼ばれる資格情報の保存というWindowsメカニズムにはアクセスできないという制限があるようです。

Windows用のキーリングのデフォルトバックエンドは、この組み込みのWindows Vaultメカニズムを使用することです。これが、Windowsからこの例外をトリガーするものです。

この問題を解決するにはとても好きWin32CryptoKeyringと呼ばれる別のキーリングバックエンドを使用することです:

keyring.set_keyring(keyring.backend.Win32CryptoKeyring()) 

このバックエンドがしっかり資格情報を保存するためのWin32暗号化APIを使用するため、セキュリティワイズそれは使用と同様に安全ですWindows Vaultのメカニズム違いは、資格情報が保存される場所だけです。資格情報がどこに保存されているのか分かりませんが、それは私の場合とは無関係です。

このバグは、Windows Server 2003のローカルシステムユーザーのWindows Vaultを使用する組み合わせでのみ発生することに再度注意することが重要です。新しいWindowsバージョンでは、これは正常に動作し、Windows Server 2003また、完全に正常に動作します。

新しいバージョンのWindowsでWin32CryptoKeyringバックエンドを使用すると、複数のセキュリティで保護されたメカニズムを使用せずにクロスプラットフォームにしたい場合でも、コード内の資格情報を保存することができます。

+0

こんにちはAvihu、これは私が私の問題のために見つけた最も近いものです。私はゴランを使用しています。ローカルでWindowsのgoプログラムを実行するとうまくいきます。しかし、私は他のシステムからcygwinのサーバーにsshとプログラムを実行すると、あなたが直面している正確な問題を提供します。あなたが正しい方向に私を導いてくれますか?私はここでクエストを尋ねました:https://serverfault.com/questions/884269/a-specified-logon-session-does-not-exist-it-may-already-have-been-terminated-o – pinkpanther

関連する問題