Harry: SSH-Login zur Anmeldung auf Webseite

Holladiewaldfee,

nach dem mein Physik-Studium ja soooo locker ist, habe ich irgendwann mal in einer freien Minute über Anmeldemechanismen für Webseiten nachgedacht.

Neben den zwei altbekannten, Formular und HTTP-401 (<- oder wie immer man das auch nennen soll, htaccess ist ja auch nicht ganz richtig) ist mir dabei die Idee gekommen, eine Anmeldung an einer SSH als Login-Voraussetzung herzunehmen.

Mangels tiefergreifender Kenntnisse was die SSH, sshd und Konsorten angeht konnte ich mir diese Frage aber nicht selbst richtig beantworten:

Ist es irgendwie möglich, über eine Anmeldung an einer SSH eine Authorisierung für einen geschützten Webbereich zu realisieren, also: User meldet sich an SSH an, greift danach mit seinem Browser auf die Webseite zu (Webserver und der Anmeldeserver sind identisch) und wird dann als angemeldet erkannt?

Ich denke mal, daß die Grundlage dafür wäre, daß ein serverseitiges Script irgendwie mit dem SSH-Clienten des Users kommunizieren könnte. Zur Not auch in der Form: Ausgabe einer ID beim User (über seine Shell), die dieser dann (manuell) in den Webbrowser eingeben muß, daß dürfte ja ziemlich sicher gehn, aber schöner wäre natürlich eine automatische Erkennung.

Was meinen Wissensstand angeht, so würde ich sagen: Mit manueller ID-Eingabe ja, automatisch nein, aber da weiß ich eben nicht ganz genau bescheid.

Die Frage ist freilich rein theoretischer Natur, ob das Ganze eine sinnvolle Anwendung besitzt weiß ich nicht (ich tendiere aber stark Richtung "nein", eine Möglichkeit wäre es halt, statt über Passwörter die Authorisierung mit Schlüsseln vorzunehmen).

Ciao,

Harry

--
  (There are only 10 types of people in this world: Those who understand binary and those who don't)
  1. Hi,

    Ist es irgendwie möglich, über eine Anmeldung an einer SSH eine Authorisierung für einen geschützten Webbereich zu realisieren, also: User meldet sich an SSH an, greift danach mit seinem Browser auf die Webseite zu (Webserver und der Anmeldeserver sind identisch) und wird dann als angemeldet erkannt?

    HTTP ist verbindungslos, d.h. es wird nicht eine beständige Verbindung zum Server aufgebaut, welche dann "einfach nur" legitimiert werden muss. Jeder Request steht völlig für sich alleine. Da zudem der Begriff "User" ohne die geringste Bedeutung ist, wirst Du Schwierigkeiten haben, zwar nicht unbedingt eine bestehende SSH-Connection zu erkennen, aber diese dann jemandem zuzuordnen. Oder anders gesagt: Wenn sich irgendjemand über SSH einloggt, dürften _alle_ auf die Seite.

    Ich denke mal, daß die Grundlage dafür wäre, daß ein serverseitiges Script irgendwie mit dem SSH-Clienten des Users kommunizieren könnte.

    Wenn dieser mit dem HTTP-Client desselben Users kommuniziert, wäre durchaus der Einsatz eines "altbekannten" Authentifizierungs-Mechanismus' möglich. Problem: Ich fürchte, Du wirst dem User je einen (von Dir zu entwickelnden) SSH- und HTTP-Client vorschreiben müssen. Über den Nutzen lässt sich dann natürlich streiten, aber es ist ja nur eine theoretische Betrachtung :-)

    Cheatah

    --
    X-Will-Answer-Email: No
    1. Holladiewaldfee,

      HTTP ist verbindungslos, d.h. es wird nicht eine beständige Verbindung zum Server aufgebaut, welche dann "einfach nur" legitimiert werden muss. Jeder Request steht völlig für sich alleine.

      Schon klar :-) Da müsste man dann halt wieder auf Sessions/Cookies zurückgreifen, also: User meldet sich über SSH an, schickt HTTP-Request, wird als "der" User erkannt, bekommt ein Cookie mit einer Session-ID geschickt und wird von da ab auch ohne SSH als "der" User erkannt. Oder man löst es halt so, daß der User einfach nur solange angemeldet ist wie auch die SSH-Verbindung besteht ...

      Da zudem der Begriff "User" ohne die geringste Bedeutung ist, wirst Du Schwierigkeiten haben, zwar nicht unbedingt eine bestehende SSH-Connection zu erkennen, aber diese dann jemandem zuzuordnen. Oder anders gesagt: Wenn sich irgendjemand über SSH einloggt, dürften _alle_ auf die Seite.

      Genau da liegt ja das Problem ... Wie kann ich die Verbindung einem HTTP-Request zuordnen? Ich schätze mal, daß das nicht wirklich möglich ist - oder eben nur mit den von Dir genannten Einschränkungen.

      Ciao,

      Harry

      --
        (There are only 10 types of people in this world: Those who understand binary and those who don't)
      1. Hi,

        User meldet sich über SSH an,

        okay.

        schickt HTTP-Request,

        Auch okay.

        wird als "der" User erkannt,

        Nicht okay. Durch welche Identifikation soll diese Erkennung geschehen? Wie gesagt existiert keine Definition des Begriffs "User", da erweist es sich durchaus als schwer, einen solchen auch zu erkennen :-)

        bekommt ein Cookie mit einer Session-ID geschickt

        Nach einer Erkennung, wäre der Rest kein Problem mehr, ja.

        Oder man löst es halt so, daß der User einfach nur solange angemeldet ist wie auch die SSH-Verbindung besteht ...

        "Einfach" ist gut :-) Es existiert kein Zusammenhang zwischen der SSH-Verbindung und dem HTTP-Request. Nur die beiden Clients wissen, dass sie auf der selben Maschine laufen; beim Server muss nicht einmal mehr die IP-Adresse übereinstimmen, geschweige denn dass die beiden TCP/IP-Connections als zusammengehörend erkannt werden können.

        Genau da liegt ja das Problem ... Wie kann ich die Verbindung einem HTTP-Request zuordnen? Ich schätze mal, daß das nicht wirklich möglich ist - oder eben nur mit den von Dir genannten Einschränkungen.

        Ja... ich sehe jedenfalls keinen Lösungsweg, der ohne spezielle Clients auskäme.

        Cheatah

        --
        X-Will-Answer-Email: No
        1. Holladiewaldfee,

          Genau da liegt ja das Problem ... Wie kann ich die Verbindung einem HTTP-Request zuordnen? Ich schätze mal, daß das nicht wirklich möglich ist - oder eben nur mit den von Dir genannten Einschränkungen.

          Ja... ich sehe jedenfalls keinen Lösungsweg, der ohne spezielle Clients auskäme.

          Also, wer erklärt sich freiwillig bereit, ein "SSH-Plugin" für diverse Browser zu schreiben? ;-)
          <I> scheidet mangels Fachwissen aus :-)))

          Ciao,

          Harry

          --
            (There are only 10 types of people in this world: Those who understand binary and those who don't)
          1. Hi,

            Also, wer erklärt sich freiwillig bereit, ein "SSH-Plugin" für diverse Browser zu schreiben? ;-)

            *lol* ein interessanter Lösungsansatz :-)

            Ob man wohl für Mozilla mit XUL... *grübel* ;-)

            Cheatah

            --
            X-Will-Answer-Email: No
  2. Hallo Harry!

    [...] eine Anmeldung an einer SSH als Login-Voraussetzung herzunehmen.

    Ich kenne mich damit auch nicht aus, aber eigentlich könnte man da doch ein paar Elemente kombinieren:
    Der User gibt in ein Formular Benutzername und Paßwort ein, dann überprüft Dein Script auf dem Server die Daten, indem es versucht sich mit den eingegebenen Daten per SSH am Server anzumelden (grad fiel mir auf, ob es nicht ein wenig "blöd" ist, wenn der Server zu sich selbe ne Verbindung aufbaut und sich mit dieser Verbindung dann auf sich selbst einzuloggen versucht ...), ob der Benutzer berechtigt ist oder nicht (wenn die Anmeldung klappt ist er berechtigt, wenn sie fehlschlägt nicht).
    Um den Benutzer dan auf den Folgeseite zu identifizieren könnte man wieder Sessions nehmen.

    Naja, aber ob das nun wirklich auch so funktionieren würde bzw. ob das sinnvoll sein könnte, weiß ich nicht.

    MfG
    Götz

  3. Moin,

    Neben den zwei altbekannten, Formular und HTTP-401 (<- oder wie immer man das auch nennen soll, htaccess ist ja auch nicht ganz richtig)

    HTTP Authentification (kurz HTTP Auth) ist durchaus nicht unüblich.

    Ist es irgendwie möglich, über eine Anmeldung an einer SSH eine Authorisierung für einen geschützten Webbereich zu realisieren, also: User meldet sich an SSH an, greift danach mit seinem Browser auf die Webseite zu (Webserver und der Anmeldeserver sind identisch) und wird dann als angemeldet erkannt?

    Nein, so nicht, das wurde schon erläutert.

    Ein Strohalm vielleicht: Du könntest über die SSH-Verbindung einen Port tunneln und den Browser durch diesen Tunnel auf den Webserver zugreifen lassen. Wenn SSHD und HTTPD auf dem selben Rechner laufen, müsste der HTTPD (ggbf. über ein Skript) herausfinden können, dass ein einlaufender Request durch den Tunnel kam (als anderes Ende wird ihm ja seine eigene IP-Addresse und ein Port mitgeteilt der dem SSHD gehört). Darauf aufbauend könnte man Anfragen annehmen oder eben nicht. Problem: Die Weiterleitung ist zwar normalerweise so eingestellt dass nur von dem Rechner auf dem der SSH-Client läuft der Tunnel benutzt werden kann, aber wenn andere Benutzer zu der Zeit auf den Rechner Zugriff haben, könnte das zum Sicherheitsbruch bereits reichen. Da könnte man ggbf. mit IPTables (unter Linux) oder ähnlichem und einer User-ID-Beschränkung für Verbindungen zu dem anderen Ende des Tunnels abhelfen.

    eine Möglichkeit wäre es halt, statt über Passwörter die Authorisierung mit Schlüsseln vorzunehmen).

    HTTPS sieht Client-Zertifikate vor mit denen sich ein User dem Server gegenüber authentifizieren kann. Du brauchst also gar nicht solche Umwege zu gehen.

    --
    Henryk Plötz
    Grüße aus Berlin
  4. Neben den zwei altbekannten, Formular und HTTP-401 (<- oder wie immer man das auch nennen soll,

    http://www.ietf.org/rfc/rfc2617.txt