AA_beach-shells_123rf-7032192_CsehIoan.jpg

© Cseh Ioan, 123rf.com

Shell-Zugriff per Webbrowser

Muschelspiel

Eine Shell im Browser? PHPshell und Shell in a Box machen es möglich und erleichtern damit das Verwalten von Webservern auch ohne SSH-Zugang – beispielsweise aus dem nächsten Internet-Café.

Die Verwaltung eines externen Webservers gestaltet sich per Secure Shell einfach, dank X-Forwarding kann man bei entsprechender Netzanbindung sogar grafische Programme zur Verwaltung am heimischen Rechner bedienen. Oft steht aber zur Administration nur ein Rechnern zur Verfügung, auf dem man keine zusätzliche Software installieren kann oder darf. Häufig agiert auch die Firewall so restriktiv, dass außer HTTP(S) nichts hindurch kommt. PHP Shell und Shell in a Box ermöglichen in diesem Fall trotzdem den Shell-Zugriff auf den Server.

PHP Shell

PHP Shell ermöglicht den Shell-Zugang zu Servern, wo die Firewall den Zugang blockiert oder Sie keine Software im Dateisystem installieren können. Ein PHP-fähiger Webserver genügt, um Shell-Befehle auszuführen. Dazu darf der Safe-Mode von PHP nicht aktiviert sein.

Die Installation von PHP Shell funktioniert recht einfach: Sie laden die aktuelle Version von der PHP-Shell-Homepage [1] herunter und entpacken das ZIP-Archiv in ein Verzeichnis auf dem Webspace. Dann setzen Sie ein Passwort, wozu Sie die URL http://Server/phpshell/pwhash.php aufrufen. Dort geben Sie die gewünschte Kombination von Benutzernamen und Passwort ein. Sie erhalten als Ausgabe eine Zeile, die sie im Abschnitt [users] der Konfigurationsdatei config.php eintragen. Bei Bedarf können Sie auch mehrere Benutzer anlegen. Neben Benutzernamen und Passwort lassen sich in config.php noch Shell-Aliases sowie ein Home-Verzeichnis für PHP Shell festlegen.

TIPP

Das verschlüsselte Abspeichern des Passworts mithilfe von pwhash.php verhindert zwar unberechtigte Logins, falls einem Angreifer die Konfigurationsdatei in die Hände fallen sollte. Sie sollten PHP Shell aber grundsätzlich über eine per SSL verschlüsselte Verbindung (HTTPS) aufrufen – andernfalls könnte ein Angreifer die eingegebenen Kommandos und Ausgaben im Klartext mitlesen.

Nun steht PHP Shell zum Einsatz bereit. Sie rufen es über die URL https://Server/phpshell/phpshell.php auf, melden sich mit Benutzernamen und Passwort an – und die Shell-Sitzung im Webbrowser kann beginnen. Sie geben nun Kommandos im PHP-Shell-Fenster ein (Abbildung 1). Nach dem Betätigen von [Eingabe] oder einem Klick auf Execute Command werden diese ausgeführt, das Ergebnis erscheint wiederum im Shell-Fenster.

Abbildung 1: PHP Shell ist unschwer als Webanwendung zu erkennen.

Die Kommandozeile, die PHP Shell im Browser zur Verfügung stellt, unterliegt dabei einigen Einschränkungen:

  • Jeder Befehl muss ohne weitere Benutzereingabe auskommen, interaktive Programme lassen sich nicht bedienen.
  • Jedes Kommando muss in eine Zeile passen. PHP Shell erkennt nicht, dass ein Kommando noch fortgesetzt werden müsste. So gelingt beispielsweise die Eingabe einer For-Schleife in mehreren Zeilen (wie in der normalen Shell) nicht.
  • Die Befehle müssen innerhalb einer bestimmten Zeitspanne abgearbeitet sein, üblicherweise binnen 30 Sekunden. Hier handelt es sich jedoch nicht um eine durch PHP Shell bedingte Einschränkung: Sowohl der Webserver (meist Apache) als auch PHP brechen nach einer gewissen Zeit die Verarbeitung ab. Sie konfigurieren die entsprechenden Limits in Apache über die Timeout-Direktive, in PHP mittels der Einstellung max_execution_time in php.ini.

PHP-Shell führt die Kommandos unter der User- und Group-ID des Webservers aus, wie sich unschwer mit dem id-Kommando überprüfen lässt. Das kann zuweilen recht nützlich sein – etwa, wenn man ein Verzeichnis anlegen möchte, in das nur der Webserver schreiben darf. Das klappt via FTP meist nicht, da man in diesem Fall unter einer anderen User-ID operiert und daher oft lediglich global beschreibbare Verzeichnisse anlegen kann. Mit PHP Shell klappt das dagegen problemlos.

PHP Shell bietet eine einfache History-Funktion, über die Sie mit den Cursortasten in den zuletzt ausgeführten Kommandos vor- und zurückblättern. Umfangreichere History-Funktionen wie eine Suche unterstützt PHP Shell jedoch nicht. Die Größe des "Shell-Fensters" ändern Sie gegebenenfalls via Size: rechts unterhalb des Eingabebereichs. Dort tragen Sie einfach die gewünschten Werte ein und führen dann den nächsten Befehl aus. PHP Shell beinhaltet auch einen einfachen Editor (editor Datei), mit dessen Hilfe Sie alle Dateien ändern können, auf die der Webserver schreiben zugreifen darf).

Shell in a Box

Shell in a Box (Abbildung 2) eignet sich dann, wenn Sie zwar Shell-Zugang zum Server haben und dort eigene Programme einrichten können, aber als Client einen Webbrowser verwenden wollen oder müssen. Das Projekt stellt neben dem Quellcode auf seinen Webseiten [2] auch DEB-Pakete zur Verfügung. Benutzer von Debian und dessen Derivaten sowie Ubuntu-User installieren die Binärpakete bequem über den Paketmanager. Verwenden Sie eine andere Distribution, entpacken Sie nach dem Herunterladen den Quellcode-Tarball in ein beliebiges Verzeichnis und übersetzen ihn dort mittels ./configure ; make. Anschließend installieren Sie Shell in a Box mit dem Befehl make install als Root. Der Aufruf richtet das Programm unterhalb von /usr/local ein.

Abbildung 2: Shell in a Box wirkt auf den ersten Blick wie die echte Kommandozeile.

Shell in a Box bringt anders als PHP Shell einen eigenen Webserver mit, der in der Vorgabe auf Port 4200 lauscht. Dabei kann das Programm eine Reihe von Diensten zur Verfügung stellen, die Sie nach dem Schema

shellinaboxd -s Webpfad:Dienst

starten. Für erste Versuche können Sie dabei mit der zusätzlichen Option -t oder in der Langform --disable-ssl die Verschlüsselung via SSL (dazu später mehr) vorläufig deaktivieren. Welche grundsätzlichen Möglichkeiten es gibt, führt die Tabelle "Funktionen von Shell in a Box" auf. Ein shellinaboxd-Prozess kann dabei durchaus mehrere Services zur Verfügung stellen, wie beispielsweise das Login zu mehreren Rechnern:

$ shellinaboxd -s /host1/:SSH:host.example.com  -s /host2/:SSH:host2.example.com

So verbinden Sie sich unter der URL http://localhost:4200/host1/ zu host.example.com verbinden, unter der URL http://localhost:4200/host2/ öffnen Sie eine SSH-Verbindung zum Rechner host2.example.com.

Funktionen von Shell in a Box

Kommando Funktion
shellinaboxd -s /:LOGIN Stellt eine Login-Shell am lokalen System unter dem Pfad http://localhost:4200/ zur Verfügung.
shellinaboxd -s /:SSH Stellt ein SSH-Login am lokalen System unter dem Pfad http://localhost:4200/ zur Verfügung. Dazu muss ein SSH-Server (zumindest am Loopback-Device) laufen.
shellinaboxd -s /Bezeichner/:SSH:host.example.com Stellt einen SSH-Login für den entfernten Rechner host.example.com am lokalen System unter dem Pfad http://localhost:4200/Bezeichner/ zur Verfügung. Dazu muss ein SSH-Server laufen. Auf diese Weise lässt sich Shell in a Box auch als Gateway zu sonst unerreichbaren Rechnern verwenden.
shellinaboxd -s /systemstatus/:User:Gruppe:/:Programm Lässt unter http://localhost:4200/systemstatus/ ein Programm mit den Rechten des angegebenen Users und der Gruppe laufen. Als Arbeitsverzeichnis dient das Wurzelverzeichnis.

Anders als bei PHP Shell (wo eine Zeile komplett eingegeben, diese dann verarbeitet und das Ergebnis an den Browser zurückgeschickt wird), ermöglicht Shell in a Box das textbasierte interaktive Arbeiten, beispielsweise mit einem Editor wie Vi oder Joe. Die Performance bleibt dabei etwas hinter jener im "normalen" Terminal zurück, meist spürt man jedoch keine großen Einschränkungen.

Shell in a Box stellt noch eine ganze Reihe weitere Optionen zur Verfügung, ein Blick in die Dokumentation beziehungsweise auf die Webseite [2] lohnt sich.

Während erste Experimente mit Shell in a Box am lokalen Rechner durchaus ohne Verschlüsselung erfolgen können, empfiehlt es sich dringend, im produktiven Einsatz alle Verbindungen mittels SSL abzusichern. Dazu benötigen Sie ein Zertifikat, das sich im entweder im aktuellen Verzeichnis befinden muss oder dessen Speicherort Sie durch die Option --cert=Verzeichnis angeben. Näheres erläutert der Kasten "Verschlüsselung und Zertifikate"

Verschlüsselung und Zertifikate

Die Verschlüsselung von Passwörtern und Daten zwischen Sender und Empfänger sorgt dafür, dass kein Unberechtigter mitlesen kann. Dazu braucht man Zertifikate, wie man sie von diversen Webseiten (oder auch Mailservern) kennt – meist nimmt man sie erst dann wahr, wenn der Browser ein Zertifikatsproblem meldet. Diese Zertifikate sollen sicherstellen, dass der Server auf der Gegenseite auch tatsächlich derjenige ist, für den er sich dem Client gegenüber ausgibt. Anderenfalls könnte sich ein Angreifer zum Abfangen des Datenverkehrs einfach als berechtigte Gegenstelle ausgeben.

Zertifikate bekommt man einerseits von kommerziellen, kostenpflichtigen Zertifizierungstellen: Sie verifizieren die Identität des Antragstellers und geben dann ein Zertifikat für einen Hostnamen aus. Der Browser erkennt das dann automatisch als korrekt: Er vertraut bestimmten, eingebaute Zertifizierungstellen. Eine Alternative bietet die Community-Lösung CACert [3].

Schließlich besteht die Möglichkeit, mithilfe von OpenSSL selbst signierte Zertifikate [4] auszustellen – Listing 1 führt die dazu notwendigen Schritte auf. Wenn Sie solche verwenden (Abbildung 3) und von anderen Rechnern aus über das Internet auf derart gesicherte Dienste zugreifen, sollten Sie sich dabei auf jeden Fall das Zertifikat anschauen und die zugehörigen MD5/SHA1-Fingerprints vergleichen.

Abbildung 3: Ein selbst signiertes Zertifikat im Webbrowser.

Listing 1

Key erzeugen:

# openssl genrsa -des3 -out server.key 1024

Certificate Signing Request (CSR) erzeugen:

# openssl req -new -key server.key -out server.csr

Passwort vom Schlüssel entfernen:

# cp server.key server.key.org
# openssl rsa -in server.key.org -out server.key

CSR signieren und Zertifikat erzeugen:

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cat server.crt server.key > certificate.pem

Glossar

Safe-Mode

Der (als veraltet geltende) Safe-Mode ist ein Versuch, PHP auf Webservern, die viele verschiedene Sites hosten (sogenannte "Shared Server"), durch Einschränkungen gewisser Befehle sicher zu machen.

SSL

Secure Sockets Layer. Eine Zwischenschicht, die auf das TCP/IP-Protokoll aufsetzt und dortexistierende Protokolle (HTTP, POP3, IMAP, …) verschlüsselt.

Infos

[1] PHP Shell: http://phpshell.sourceforge.net

[2] Shell in a Box: http://code.google.com/p/shellinabox/

[3] CACert: http://www.cacert.org

[4] Eigenes SSL-Zertifikat: Florian Effenberger, "Brief und Siegel", LU 06/2009, S. 31, http://www.linux-community.de/18025

Der Autor

Der Systemadministrator Wolfgang Dautermann hat neben vielen Linux-Varianten auch schon diverse Unixe gebändigt, drunter Solaris, Irix und Tru64. Er zählt zu den Organisatoren der Grazer Linux-Tage.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Kernelentwickler verlieren Shell-Zugriff
    Während die Besucher von Kernel.org derzeit eine Wartungsmeldung begrüßt, hat H. Peter Anvin auf der Kernelmailingliste ein paar Zeilen zur Zukunft der Kernel-Server geschrieben.
  • PowerShell DSC für Linux in Version 1.1

    In Version 1.1 bietet Microsoft die PowerShell DSC für Linux mit den Features der Azure Automation DSC an.
  • Linux-Webserver Monkey HTTP Daemon in Version 0.10.0 erschienen
    Mit Version 0.10.0 des Monkey HTTP Daemon betritt ein neues Webserver-Leichtgewicht für statische Inhalte die Open-Source-Bühne.
  • Lebenszeichen
    Linux Dash und Cockpit helfen bei der Überwachung von Servern in kleinem und großem Rahmen. Fedoras Cockpit glänzt nicht nur als Monitoring-Lösung, sondern dient auch zum Verwalten von Servern über das Web.
  • env, export & Co.
    Wenn Sie auf der Konsole einen Befehl eingeben, weiß die Shell von selbst, wo sie nach dem Programm suchen muss. Starten Sie von einem entfernten Server ein X-Programm, weiß die Shell, auf welchem Desktop es angezeigt werden soll. Und Ihr IRC-Client weiß sogar, welchen IRC-Server Sie mit welchem Nick besuchen wollen – all das basiert auf richtig gesetzten Shell-Variablen.
Kommentare
Web-Browser Infografik
Matthias (unangemeldet), Freitag, 18. März 2011 23:57:16
Ein/Ausklappen

dazu passend die Geschichte der Web-Browser in einer tollen Infografik:
http://www.mobilemediabox.d...ik-geschichte-der-web-browser/


Bewertung: 310 Punkte bei 245 Stimmen.
Den Beitrag bewerten: Gut / Schlecht

Infos zur Publikation

LU 09/2016: Ciao, Windows!

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Aktuelle Fragen

KWord Quiz
Carl Garbe, 30.08.2016 16:19, 0 Antworten
KWord Quiz lässt sich bei mir (nach einem update auf Ubuntu 16.04 LTS) nicht mehr speichern, kann...
NOKIA N900 einziges Linux-Smartphone? Kein Support mehr
Wimpy *, 28.08.2016 11:09, 1 Antworten
Ich habe seit vielen Jahren ein Nokia N900 mit Maemo-Linux. Es funktioniert einwandfrei, aber ich...
Scannen nicht möglich
Werner Hahn, 19.08.2016 22:33, 3 Antworten
Laptop DELL Latitude E6510 mit Ubuntu 16,04, Canon Pixma MG5450. Das Drucken funktioniert, Scann...
Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...