問題タブ [kerberos-delegation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hadoop - Hadoop セキュリティ
「Hadoop で Kerberos を実装するにはどうすればよいですか?」を学習しようとしています。このドキュメントを確認しました https://issues.apache.org/jira/browse/HADOOP-4487 基本的なケルベロスのものも確認しました ( https://www.youtube.com/watch?v=KD2Q-2ToloE )
これらのリソースから学んだ後、私は図を通して表現している結論に達しました。シナリオ : - ユーザーが自分のコンピューターにログオンすると、Kerberos 認証によって認証され、マップ削減ジョブが送信されます (図の説明を読んでください。5 分もかかりません)ステップ(太字) 黄色の背景の数字はフロー全体を表します (番号 1 ~ 19) DT (赤い背景) は委任トークンを表します BAT (緑の背景) はブロック アクセス トークンを表します JT (茶色の背景) はジョブ トークンを表します
ステップ 1、2、3、および 4 は次のことを表しています。 質問 1) KDC はどこにありますか? 私の名前ノードまたはジョブトラッカーが存在するマシン上にある可能性はありますか?
ステップ 5、6、7、8、および 9 は次のことを表しています。Name Node は Delegation Token (red) を発行します User は Token renewer について伝えます (この場合は Job Tracker です)
質問 2) ユーザーは、この委任トークンをジョブと共にジョブ トラッカーに送信します。委任トークンはタスク トラッカーと共有されますか?
ステップ 10、11、12、13、および 14 は、次のことを表しています。- Job tracker のサービス チケットを要求し、KDC からサービス チケットを取得します。このチケットを Job Tracker に表示し、JobTracker から ACK を取得します。Job Tracker に Job + Delegation Token を送信します。
ステップ 15、16、および 17 は次のことを表しています。 - ブロック アクセス トークンを生成し、すべてのデータ ノードに分散します。blockID と Block Access Token を Job Tracker に送信すると、Job Tracker はそれを TaskTracker に渡します。
質問 3) 誰が Name Node から BlockAccessToken と Block ID を要求しますか? JobTracker または TaskTracker
すみません、間違えて18番を見逃してしまいました。Step19 は以下を表します:- ジョブ トラッカーはジョブ トークン (茶色) を生成し、それを TaskTracker に渡します。
質問 4) クラスタ全体に配布されるユーザーごとに 1 つの委任トークンがあり、ジョブごとに 1 つのジョブ トークンがあると結論付けてもよろしいですか? したがって、ユーザーは委任トークンを 1 つだけ持ち、多くのジョブ トークン (彼が送信したジョブの数に等しい) を持ちます。
何かを見逃していたり、説明のどこかで間違っていたりした場合は教えてください。
c++ - Kerberos 認証を使用してユーザーを偽装する際の ODBC 接続の作成
クライアント アプリケーション/ブラウザは、Kerberos を使用してサーバーに対して認証します。サーバーは Apache/Tomcat を実行し、サーバー上で実行される私のサービスと通信します。私のサービスは、別のマシン上の別のサービスに作業を分散できるため、制約付き委任を設定する必要があります。サーバー (サーバー マシンまたは他のマシン) 上のサービスは、ODBC を使用して SQL Server データベースと通信する必要があります。エンド ユーザーになりすます (AD で)。オンラインで読むと、エンド ユーザーを偽装するには、エンド ユーザーを偽装するスレッドで SQLDriverConnect を ODBC ドライバーに呼び出すだけでよいようです。
ユーザーが既に認証されていて、サービスで何らかのトークン (TGT?) を取得できる場合、エンド ユーザーになりすますためにサービス スレッドでどの API を呼び出す必要がありますか? ImpersonateLoggedOnUser と ImpersonateSecurityContext が可能性の高いオプションだと思いますが、私の場合にどれが適用されるのか、ここで具体的に必要なチケット/トークンはわかりません。
また、ユーザーが既に認証されている場合、 SetThreadToken もオプションになることがわかります。それは...ですか?
私のサービスは C++ であり、環境は Windows (7 またはサーバー) です。
google-app-engine - アプリ エンジン + Java + keberos トークン
JAAS を使用した統合 Windows 認証をサポートする Google アプリ エンジン アプリケーションを開発しました。
Mozilla firefox で統合認証を有効にするために、次の構成を行いました
私のアプリケーションは ntlm をサポートしていないため、それに関連する構成を行っていません。
すべてがローカルで正常に動作します。つまり、ブラウザーは kerberos サービス トークンを取得してアプリケーションに送信できます。
しかし、Google App Engineにデプロイしたとき。その後、ブラウザは kerberos トークンを送信できません。私は常にNTLMトークンを取得しています。
以下にフローを示します。 1. ローカル ネットワークから mozilla ブラウザから信頼できる URL にアクセスします。2. 私のアプリケーションは、401 ネゴシエート チャレンジでブラウザにサービス トークンを要求します。 3. ブラウザはサービス トークンを取得しようとします。4. NTLM トークンを送信していることを確認しました。
ブラウザーが NTLM トークンをアプリ エンジンに送信する理由と、そのようなシナリオをどのように処理すればよいかを知りたいですか?
c - krb5 ライブラリを使用した Kerberos の制約付き委任が失敗し、エラー メッセージ GSS_S_BAD_MECH が表示される
krb5 ライブラリを使用して、Unix システムに Kerberos Constrained Delegation を実装しようとしています。概念は、「信頼できる」ユーザーがシステム内の別のユーザーに代わって kerberos チケットを取得できるというものです。このコードを実装のベースとして使用しています: http://fossies.org/dox/krb5-1.11.5/t__s4u_8c_source.html
現時点では、信頼できるユーザーに代わってチケットを生成できます。チケットは交換サーバーによって受け入れられたようですが、ここで説明されているようにサーバーがチャレンジを送り返す最後のステップがあり、残念ながら私にとっては失敗しています: https://www.rfc-editor.org/rfc/rfc4559 (たとえば、第 5 章を参照してください)
サーバーから「Negotiate」タグを受け取り、それをデコードする必要があります。
「クライアントは gssapi-data をデコードし、これを Gss_Init_security_context に渡し、新しい gssapi-data をサーバーに返します。」
そのために、「Negotiate」文字列の後のデータをデコード (base64) し、次の構造にキャストします。
};
これが私がこのデータを使ってやっていることです:
これは次のエラー メッセージで失敗します: GSS_S_BAD_MECH...
これは mech_data が間違っていることを示しているようですが、その理由はよくわかりません。何が間違っている可能性がありますか?サーバーからトークンをデコードし、それを gss_api 構造にキャストしてから、これを使用して gss_init_sec_context を呼び出す必要があると想定するのは正しいですか?
ご助力ありがとうございます。不明な点がありましたら、お問い合わせください。詳細をお知らせします。
apache - Web サーバーでリモート ユーザー ID としてコマンドを実行する
Tomcat7 と apache Httpd サーバーで Web アプリケーションを実行しています。ユーザー アカウントがリモート ユーザー アカウントとは異なる Web サーバー上で、リモート ユーザーまたはクライアント ユーザーとしてコマンドを実行するユース ケースがあります。現在、ルートユーザーとしてWebサーバーを実行し、サーバー側でコマンドを実行するためにルートユーザーがリモートユーザーとしてsudoできるようにすることで、この要件を処理しています。
これを処理するためのより良い安全な方法があれば教えてください。
ありがとう。
jdbc - jdbc での kerberos 認証と接続プーリング
SPNEGO/Kerberos 経由で SSO を使用して Tomcat で Java Web アプリケーションを実行しています。ケルベロス チケットをデータベース (私の場合は Oracle DB) に渡したい (MS 製品での偽装など)。実装の例を見つけました( http://docs.oracle.com/cd/B28359_01/java.111/b31224/clntsec.htm ):
しかし、新しい接続を作成することはコストのかかる操作であることが知られています。この問題を解決するために、一般的に使用される接続プール (c3p0 など) を使用しますが、上記のコードと接続プールを組み合わせる方法の例が見つかりません。例はありますか?
hadoop - クライアントは [TOKEN, KERBEROS] 経由で認証できません
プログラムでジョブを開始するために YarnClient を使用しています。私が実行しているクラスターは kerberos 化されています。
「yarn jar examples.jar wordcount...」を介して送信された法線マップ削減ジョブが機能します。
プログラムで送信しようとしているジョブは送信されません。次のエラーが表示されます。
14/09/04 21:14:29 エラー client.ClientService: アプリケーションの送信中にエラーが発生しました: appattempt_1409863263326_0002_000002 の AM コンテナーが原因で 2 回失敗しましたIOException: org.apache.hadoop.security.AccessControlException: クライアントは [トークン、KERBEROS] 経由で認証できません。ホストの詳細: ローカル ホストは次のとおりです: "yarn-c1-n1.clouddev.snaplogic.com/10.184.28.108"; 宛先ホストは: "yarn-c1-cdh.clouddev.snaplogic.com":8020; .この試みに失敗しました.. アプリケーションに失敗しました。14/09/04 21:14:29 エラー client.YClient: アプリケーションの送信に失敗しました
コードは次のようになります。
私は、おそらく次の効果に何かを追加すると考えていました。
おそらく私の悩みを和らげることができるかもしれませんが、それも役に立たないようです. どんな助けでも大歓迎です。