ssh nutzen mit unpriviligiertem Benutzer ohne Passwort

  • Hallo Zusammen

    Folgende Ausgangslage:

    Raspberry Pi 3, aktuelles OS (Buster)

    Zusatzsoftware: Apache

    Problemstellung

    Wie schaff ich es dass unter dem User www-data (der kein Passowrt und Home-Verzeichnis hat) automatisch eine ssh Verbindung (zu einem anderen Server) aufzubauen.

    Gerne mit ssh-Keys.

    Da der User kein Passwort hat, kann ich mich grundsätzlich nicht mit dem User anmelden. Dem User ein Passwort zu setzen ist ungünstig.

    Das nächste Problem ist, da kein Home Verzeichnis vorhanden ist, können die erzeugten ssh Schlüssel nicht abgelegt werden.

    Wer hat eine Idee / einen Lösungsansatz?:helpnew:

    Freundliche Grüsse

    Daniel

  • ssh nutzen mit unpriviligiertem Benutzer ohne Passwort? Schau mal ob du hier fündig wirst!

  • Von den System-Usern UID 0 - 999 hat nur der User root, UID=0 eine (Login-)Shell [in /etc/passwd] definiert.

    Die Eintragung von

    www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

    in /etc/passwd wird in < man 5 passwd > erklärt.

    Diese Eintragung solltest Du auf keinen Fall ändern.

    Wenn Du einen realen User (UID > 1000) neu anlegst und nach dem Login sofort ein "sudo -u www-data .." mitgibst (z.B. über die .bashrc), sollte der neue, angemeldete User als www-data substituiert werden.

    Ist aber ein nicht empfehlenswertes und unsicheres Workaround.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Hallo zusammen

    Auf dem Pi läuft ein Webserver der übers Netzwerk (später internet) aufgerufen werden kann.

    Je nach Empfang (inkl. entsprechender Validierung) soll auf einem entfernen Server per ssh eine Aktion ausgeführt werden. (aktuell sollte das andere System sauber heruntergefahren werden).

    Wenn ich lokal auf dem Pi bin, kann ich mich mit ssh verbinden, sprich gleich noch das Kommando zum runtergefahren mit geben und gut ist.

    Das möchte nun auch mit www-data (also über den Web-Server) (über ssh) können.

    Freundliche Grüsse

    Daniel

  • Stichworte für die Recherche:

    - ssh restricted key

    - key forced-commands-only

    Wäre es nicht einfacher, auf dem Webserver je nach Zustand z.B. eine Datei/einen Wert abrufbar zu halten und den Server, der abgeschaltet werden soll, diesen pollen zu lassen? Je nach Ergebnis, führt der entfernte Server dann eine lokale Aktion aus.

    Oder irgendwas mit Sockets, auf deren Ansprechen mit einer Aktion reagiert wird.

    Wenn du nichts zu sagen hast, sag einfach nichts.

    • Offizieller Beitrag

    Wäre es nicht einfacher, auf dem Webserver je nach Zustand z.B. eine Datei/einen Wert abrufbar zu halten

    ... oder ein kleines Skript unabhängig vom Webserver auf dem RPi laufen zu lassen, das diesen Zustand (einer Datei) ausliest und bei Bedarf eine SSH-Verbindung zum Server herstellt, diesen dann runterfährt und die Datei zurücksetzt.

    Wenn der Webserver aus dem Internet erreichbar ist, dann würde ich dem nur so viele Rechte wie nötig und so wenig Rechte wie möglich geben.

  • Hallo zusammen

    Besten Fank für die Antworten.

    Das mit der Datei / den Scrioäpt geht - keine Frage nur ist das dann nicht mehr "synchron" (Ziel der Aktion ist quasi bei Erkennung sofort zu stoppen! Mit der neuen Lösung ist das dann nicht mehr der Fall, auf dem pi muss ein programm jede Minute prüfen, ob was zu machen ist. Schöner wäre aus meiner Sicht eben anders.

    Wie steht ihr dazu (dass auf dem PI jede Minute geprüft wird?

    Gruss

  • Such mal hier im Forum nach dem "sudowebscript" von meigrafd.

    Ist schon sehr alt.

    Damit kannst du von Webserver (www-data) per sudo ein script starten was unter root/pi/whatever aufgerufen wird.

    Von da an ist es kein Problem per SSH mittels Key-Auth auf einem enternten System winen Befehl auszuführen.

    EDIT: Hier der Link.
    RE: Sudo Befehle mit PHP absetzen

    Offizieller Schmier und Schmutzfink des Forum.
    Warum einfach wenn's auch schwer geht ?

    Kein Support per PN !
    Fragen bitte hier im Forum stellen. So hat jeder etwas davon.

  • Statt SSH dafür zu nutzen, bau dir einen Webservice auf dem System, welches das Frontend einfach per HTTP Client anspricht. Der Webservice kann dann den Rechner runterfahren. Und auch später andere Sachen machen. Und per Authentifizierung verhinderst du, dass irgendwer anders das kann, sondern nur dein www-data-User.

    • Offizieller Beitrag

    Wie steht ihr dazu (dass auf dem PI jede Minute geprüft wird?

    Das Skript könnte auch durchlaufen und z.B. mit einem kleinen sleep auch das System nicht weiter belasten, wäre also nich auf einen Aufruf pro Minute begrenzt. Aber das war ja nur eine Idee von vielen. ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!