2012-08-29 3 views
5

저는 파이썬으로 Windows 서비스를 작성하고 있으며 키 링 모듈을 사용하여 정기적으로 영구적으로 사용해야하는 자격 증명을 안전하게 저장하고 있습니다. 즉, 키링은 로컬 시스템 사용자 자격 증명을 사용하여 암호를 저장합니다.Windows Server 2003에서 python 키링을 사용하는 중 오류 1312

나는 두 가지 기본 키링 기능을 사용합니다 : 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 볼트 메커니즘을 사용하는 것으로 이것이 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하고 프로그램을 실행하면 당신이 직면하고있는 정확한 문제를 제공합니다. 문제가 될만한 방향으로 나를 인도 해 주시겠습니까? 나는 여기 questio에 물었다 : https://serverfault.com/questions/884269/a-specified-logon-session-does-not-exist-it-may-already-have-been-terminated-o – pinkpanther

관련 문제