AD属性をクエリするPythonサービスの作成
SAS 2012上でPython-LDAP over SASL(DIGEST-MD5)を使用してLinuxでPythonを実行するWebサービスとADを統合し、AD 2012ユーザー属性(部門、部門、内線番号、電子メールなど)をクエリします。AD 2003に対するサービスに固有の問題を解決した後、新しいAD 2012に対してSPNエラーが発生し始めました。ダイジェストURIがサーバー上のSPNと一致していません。両方のサーバーのSPNリストを相互参照しましたが、それらには互いに同じ類似物が含まれています。
エラー:digest-uriは、このサーバーに登録されているLDAP SPNと一致しません
修正?
これは以下を実行することで修正されました:
setspn -A ldap/<Domain_Name> <Computer_Name>
次のコマンドを実行しても、サービスアカウントを作成してもSPNエラーは修正されませんでした。
setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>
simple_bind_s()にはSPNは必要ありません、sasl_interactive_bind_s()にはSPNが必要です
ローカルマシンのSPNリストにSPNを追加するだけで、sasl_interactive_bind_s()を使用したPython-LDAPサービスで機能しました。また、simple_bind_s()を使用するとSPNステップをスキップできることにも注意してください。ただし、このメソッドは資格情報をクリアテキストで送信するため、許可されません。
ただし、レコードがSPNリストに1分間しか表示されずに消えてしまうことに気づきましたか。setspnコマンドを実行してもエラーは発生しません。イベントログは完全に空で、重複はありません。ベースdnで-Fフォレスト全体の検索でチェックされ、何もありません。SPNを追加して削除し、オブジェクトからオブジェクトに移動して、どこにも隠れていないことを確認しましたが、2番目にオブジェクトをどこかに追加してから再度追加しようとすると、重複が通知されます。ですから、どこかに隠されている複製がないと私は確信しています。
ハック
今のところ、スケジュールされたタスクを実行してコマンドを再実行し、レコードをリストに保持して、サービスが「SPN Hack」という名前で適切に機能するようにします
cmd.exe /C "setspn -A ldap/<Domain_Name> <Computer_Name>"
SPNがリストから削除されている理由がわかるまで。
私はこの特定のADのプライマリ管理者ではありません。管理者は、ADの別のサービスからSPNを同期するサービスを実行していて、それを認識できませんか?私のタイトルは言い訳としてではなく、Active Directoryに関する私の無知を説明するためのWeb開発者です。ADをマスターユーザーDBにするように言われ、多くのことを読んでいましたが、SPNが定期的に「上書き」または「クリーンアップ」されている問題が発生している場所はどこにもありません。管理者は、SQLServerエントリ以外のSPNに精通しています。
なぜハックが必要なのですか?
これまでのところ、私のハッキングによってユーザーやサービスに問題が発生したことはなく、エラーも発生していません。そのため、管理者は実行を許可するだけなので、引き続き調査します。しかし、私は、実装が組み込まれているサービス、本質的にはcronハック/ shiverを作成するという不安定な状況に身を置いていることに気づきます。
更新
システム管理者との会話の後、ハックの上にサービスを構築することは解決策ではないことに同意しました。したがって、目的に使用できるエンドポイント暗号化を使用してローカルサービスを起動する許可を彼に与えられました。結果は同じです。SPNがクリアされる原因を監視します。ローカルバインドはPython-LDAPを使用しても問題にならず、ローカルサービスは1時間ほどですでに稼働しています。基本的にLDAPに組み込まれている機能をラップしているのは残念ですが、私たちがしなければならないことは行います。