web-dev-qa-db-ja.com

curlで--negotiateを使用する場合、keytabファイルは必要ですか?

Kerberosで保護されたエンドポイントへの接続方法を説明する documentation は、次のことを示しています。

curl -i --negotiate -u : "http://<Host>:<PORT>/webhdfs/v1/<PATH>?op=..."

-uフラグを指定する必要がありますが、curlでは無視されます。

--negotiateオプションを指定すると、curlはkinitコマンドで事前に作成されたキータブを検索しますか、それとも資格情報のプロンプトをcurlしますか?

キータブファイルを検索する場合、コマンドはどのファイル名を検索しますか?

23
Chris Snow

そのエリアでcurlに一度だけ貢献すること。知っておくべきことは次のとおりです。

curl(1)自体はKerberosについて何も認識していないため、資格情報キャッシュやキータブファイルとは相互作用しません。すべての呼び出しをGSS-API実装に委任します。GSS-API実装により、魔法が自動的に実行されます。どのような魔法がライブラリ、HeimdalおよびMIT Kerberos。

あなたの質問に基づいて、Kerberosについてほとんど知識がなく、SPNEGOで保護されたRESTエンドポイントへのAPI呼び出しを自動化するだけでよいと思います。

ここにあなたがする必要があるものがあります:

  1. UnixライクなOSを持っている
  2. 少なくともMIT Kerberos 1.11をインストールする
  3. MIT Kerberosに対して少なくともcurl 7.38.0をインストールする
  4. GSS-APIに言及するcurl --versionでこれを確認してくださいおよび SPNEGOと、MIT Kerberosバージョンに対してリンクされたlddで。
  5. ktutilまたはmskutilを使用して、サービスプリンシパルのclientキータブを作成します
  6. client keytab by kinit -k -t <path-to-keytab> <principal-from-keytab>でTGTを取得してください
  7. klistでチケットキャッシュがあることを確認します

環境の準備が整いました:

  1. エクスポートKRB5CCNAME=<some-non-default-path>
  2. エクスポートKRB5_CLIENT_KTNAME=<path-to-keytab>
  3. curl --negotiate -u : <URL>を呼び出します

MIT Kerberosは、両方の環境変数が設定されていることを検出し、それらを検査し、キータブでTGTを自動的に取得し、サービスチケットを要求してcurlに渡します。できました。

:これは、Heimdalでは機能しません。

41
Michael-O
  1. Curlバージョンを確認する

    $ curl -V-「GSS-Negotiate」機能をサポートする必要があります

  2. kinitを使用してログイン

    $ kinit <user-id>

  3. カールを使用

    $ curl --negotiate -u : -b ~/cookiejar.txt -c ~/cookiejar.txt http://localhost:14000/webhdfs/v1/?op=liststatus

    「--negotiate」オプションはSPNEGOを有効にします

    「-u」オプションは必須ですが無視されます(kinitで指定された原則が使用されます)

    「-b」および「-c」オプションは、HTTP Cookieの保存と送信に使用されます。

10
Avinash Reddy