2016-07-21 25 views
7

Die documentation beschreibt, wie man ein Kerberos-Endpunkt gesichert verbinden zeigt folgendes:Bei Verwendung von --nowotiate with curl ist eine Keytab-Datei erforderlich?

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

Die -u Flag bereitgestellt werden muss, sondern wird durch curl ignoriert.

Bietet die Option curl, um nach einem Keytab zu suchen, das zuvor mit dem Befehl kinit erstellt wurde, oder wird eine Eingabeaufforderung für die Anmeldeinformationen angezeigt?

Wenn nach einer Chiffrierschlüsseldatei gesucht wird, nach welchem ​​Dateinamen wird der Befehl gesucht?

+1

curl versucht, ein gültiges Ticket ** im Cache ** zu erhalten (vgl. Env Variable 'KRB5CCNAME' oder standardmäßig' FILE:/tmp/krb5cc _ $ (id -u) 'unter Unix /' API: 'on Windows) - es ist egal, wie das Ticket erstellt wurde. –

+0

Vorbehalt: Die Windows-Versionen von curl werden kompiliert, um die Microsoft SSPI-Bibliotheken zu unterstützen, nicht die GSSAPI-Bibliotheken, die von Hadoop-REST-Diensten benötigt werden. –

+0

BTW eine Keytab ist eine Datei mit einem Hash-Passwort, erstellt von 'ktutil' auf Linux oder durch ein Active Directory-Dienstprogramm wie' ktpass.exe'. Es ist ** verwendet ** von 'kinit', nicht ** erstellt **. –

Antwort

16

Ein einmal-in-einem-Weile-Beitrag zu curl in diesem Bereich sein. Hier ist, was Sie wissen müssen:

curl(1) selbst weiß nichts über Kerberos und wird weder mit Ihrem Credential-Cache noch Ihre Keytab-Datei interagieren. Es wird alle Aufrufe an eine GSS-API-Implementierung delegieren, die die Magie für Sie tun wird. Welche Magie hängt von der Bibliothek, Heimdal und MIT Kerberos ab.

Basierend auf Ihrer Frage nehme ich an, dass Sie wenig Wissen über Kerberos haben und API-Aufrufe an REST-Endpunkte automatisieren möchten, die von SPNEGO gesichert werden.

Hier ist, was Sie tun müssen:

  1. Haben Sie einen Unix-artigen Betriebssystem
  2. mindestens Installieren MIT Kerberos 1,11
  3. mindestens curl 7.38.0 gegen MIT Kerberos
  4. installieren Stellen Sie sicher, dies mit curl --version Erwähnung GSS-API und SPNEGO und mit ldd gegen Ihre MIT Kerberos-Version verknüpft.
  5. erstellen Client keytab für den Dienstprinzipal mit ktutil oder mskutil
  6. Versuchen Sie, eine TGT mit diesem Client keytab von kinit -k -t <path-to-keytab> <principal-from-keytab>
  7. Stellen Sie sicher, mit klist, dass Sie ein Ticket-Cache zu erhalten

Die Umgebung ist nun bereit:

  1. Export KRB5CCNAME=<some-non-default-path>
  2. Export KRB5_CLIENT_KTNAME=<path-to-keytab>
  3. Invoke curl --negotiate -u : <URL>

MIT Kerberos erkennt, dass beide Umgebungsvariablen gesetzt sind, prüfen sie, automatisch ein TGT mit Ihrem keytab erhalten, fordern Sie auf curl eine Service-Ticket und Pass. Du bist fertig.

Hinweis: Dies funktioniert nicht mit Heimdal.

3
  1. prüfen curl Version

    $ curl -V - Es sollte die Funktion unterstützen "GSS-Verhandeln"

  2. Login kinit

    $ kinit <user-id>

  3. Verwenden kräuseln

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

    "--negotiate" Option ermöglicht SPNEGO

    Option "-u" benötigt wird, aber ignoriert (das Prinzip während kinit angegeben verwendet wird)

    "-b" & "-c" Optionen werden verwendet, um http-Cookies zu speichern und zu senden.

+0

Es sollte 'GSS-Negotiate' nicht unterstützen, da alle diese Versionen vor der Version 7.38.0 gebrochen sind. Es muss 'SPNEGO' unterstützen. –

+0

Das funktioniert gut für mich und ist viel weniger Setup/Problem als die angenommene Antwort. Curl 7.35.0, kein SPNEGO, nur GSS-Negotiate. – BobDoolittle

+0

Sind die Cookie-Optionen für einen grundlegenden Verbindungstest erforderlich? Wenn ja, warum? – peedee