Qgelm

Shell-Zugriff per Webbrowser » LinuxCommunity

Originalartikel

Backup

<html> <div class=„attribute-content“ readability=„41“>

	
	
	 
			    
					    <p>    Eine Shell im Browser? PHPshell und Shell in a Box machen es m&#246;glich und erleichtern damit das Verwalten von Webservern auch ohne SSH-Zugang &#8211; beispielsweise aus dem n&#228;chsten Internet-Caf&#233;.</p>
		    </div><div class="block" readability="140"><p>

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&#252;gung, auf dem man keine zus&#228;tzliche Software installieren kann oder darf. H&#228;ufig agiert auch die Firewall so restriktiv, dass au&#223;er HTTP(S) nichts hindurch kommt. PHP Shell und Shell in a Box erm&#246;glichen in diesem Fall trotzdem den Shell-Zugriff auf den Server. </p> <a name=„eztoc0_0_1“ id=„eztoc0_0_1“></a><h4>PHP Shell</h4><p> PHP Shell erm&#246;glicht den Shell-Zugang zu Servern, wo die Firewall den Zugang blockiert oder Sie keine Software im Dateisystem installieren k&#246;nnen. Ein PHP-f&#228;higer Webserver gen&#252;gt, um Shell-Befehle auszuf&#252;hren. Dazu darf der <a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_gsafe-mode“ title=„Safe-Mode|Der (als veraltet geltende) Safe-Mode ist ein Versuch, PHP auf Webservern, die viele verschiedene Sites hosten (sogenannte &quot;Shared Server&quot;), durch Einschr&#228;nkungen gewisser Befehle sicher zu machen.“ target=„_self“ class=„glossary“>Safe-Mode</a> von PHP nicht aktiviert sein. </p> <p> Die Installation von PHP Shell funktioniert recht einfach: Sie laden die aktuelle Version von der PHP-Shell-Homepage&#160; herunter und entpacken das ZIP-Archiv in ein Verzeichnis auf dem Webspace. Dann setzen Sie ein Passwort, wozu Sie die URL

http://<i class="replaceable">Server</i>/phpshell/pwhash.php

aufrufen. Dort geben Sie die gew&#252;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&#246;nnen Sie auch mehrere Benutzer anlegen. Neben Benutzernamen und Passwort lassen sich in

config.php

noch Shell-Aliases sowie ein Home-Verzeichnis f&#252;r PHP Shell festlegen. </p> <div class=„box textbox“ id=„article_xtipp“ readability=„62“> <p> Das verschl&#252;sselte Abspeichern des Passworts mithilfe von

pwhash.php

verhindert zwar unberechtigte Logins, falls einem Angreifer die Konfigurationsdatei in die H&#228;nde fallen sollte. Sie sollten PHP Shell aber grunds&#228;tzlich &#252;ber eine per SSL verschl&#252;sselte Verbindung (HTTPS) aufrufen &#8211; andernfalls k&#246;nnte ein Angreifer die eingegebenen Kommandos und Ausgaben im Klartext mitlesen. </p> </div><p> Nun steht PHP Shell zum Einsatz bereit. Sie rufen es &#252;ber die URL

https://<i class="replaceable">Server</i>/phpshell/phpshell.php

auf, melden sich mit Benutzernamen und Passwort an &#8211; und die Shell-Sitzung im Webbrowser kann beginnen. Sie geben nun Kommandos im PHP-Shell-Fenster ein (<a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_f1“ target=„_self“ class=„figure“>Abbildung&#160;1</a>). Nach dem Bet&#228;tigen von [Eingabe] oder einem Klick auf Execute Command werden diese ausgef&#252;hrt, das Ergebnis erscheint wiederum im Shell-Fenster. </p> <div class=„object-center“ id=„article_f1“ readability=„31“>

  
  
  
      	                    
<div class="jquerylightbox" readability="12">
    <a href="http://www.linux-community.de/var/ezwebin_site/storage/images/internal/artikel/print-artikel/linuxuser/2011/04/shell-zugriff-per-webbrowser/abbildung-1/1458712-1-ger-DE/Abbildung-1_lightbox.png" rel="lightbox[image]" title="Abbildung 1: PHP Shell ist unschwer als Webanwendung zu erkennen.">
	<img src="http://www.linux-community.de/var/ezwebin_site/storage/images/internal/artikel/print-artikel/linuxuser/2011/04/shell-zugriff-per-webbrowser/abbildung-1/1458712-1-ger-DE/Abbildung-1_large.png" alt="" /></a>
    <p>

Abbildung 1: PHP Shell ist unschwer als Webanwendung zu erkennen. </p> </div>

  </div><p>

Die Kommandozeile, die PHP Shell im Browser zur Verf&#252;gung stellt, unterliegt dabei einigen Einschr&#228;nkungen: </p> <ul><li>Jeder Befehl muss ohne weitere Benutzereingabe auskommen, interaktive Programme lassen sich nicht bedienen.</li> <li>Jedes Kommando muss in eine Zeile passen. PHP Shell erkennt nicht, dass ein Kommando noch fortgesetzt werden m&#252;sste. So gelingt beispielsweise die Eingabe einer For-Schleife in mehreren Zeilen (wie in der normalen Shell) nicht.</li> <li>Die Befehle m&#252;ssen innerhalb einer bestimmten Zeitspanne abgearbeitet sein, &#252;blicherweise binnen 30 Sekunden. Hier handelt es sich jedoch nicht um eine durch PHP Shell bedingte Einschr&#228;nkung: Sowohl der Webserver (meist Apache) als auch PHP brechen nach einer gewissen Zeit die Verarbeitung ab. Sie konfigurieren die entsprechenden Limits in Apache &#252;ber die

Timeout

-Direktive, in PHP mittels der Einstellung

max_execution_time

in

php.ini

.</li> </ul><p> PHP-Shell f&#252;hrt die Kommandos unter der User- und Group-ID des Webservers aus, wie sich unschwer mit dem

id

-Kommando &#252;berpr&#252;fen l&#228;sst. Das kann zuweilen recht n&#252;tzlich sein &#8211; etwa, wenn man ein Verzeichnis anlegen m&#246;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. </p> <p> PHP Shell bietet eine einfache History-Funktion, &#252;ber die Sie mit den Cursortasten in den zuletzt ausgef&#252;hrten Kommandos vor- und zur&#252;ckbl&#228;ttern. Umfangreichere History-Funktionen wie eine Suche unterst&#252;tzt PHP Shell jedoch nicht. Die Gr&#246;&#223;e des „Shell-Fensters“ &#228;ndern Sie gegebenenfalls via Size: rechts unterhalb des Eingabebereichs. Dort tragen Sie einfach die gew&#252;nschten Werte ein und f&#252;hren dann den n&#228;chsten Befehl aus. PHP Shell beinhaltet auch einen einfachen Editor (

editor <i class="replaceable">Datei</i>

), mit dessen Hilfe Sie alle Dateien &#228;ndern k&#246;nnen, auf die der Webserver schreiben zugreifen darf). </p> <a name=„eztoc0_0_2“ id=„eztoc0_0_2“></a><h4>Shell in a Box</h4><p> Shell in a Box (<a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_f2“ target=„_self“ class=„figure“>Abbildung&#160;2</a>) eignet sich dann, wenn Sie zwar Shell-Zugang zum Server haben und dort eigene Programme einrichten k&#246;nnen, aber als Client einen Webbrowser verwenden wollen oder m&#252;ssen. Das Projekt stellt neben dem Quellcode auf seinen Webseiten&#160; auch DEB-Pakete zur Verf&#252;gung. Benutzer von Debian und dessen Derivaten sowie Ubuntu-User installieren die Bin&#228;rpakete bequem &#252;ber den Paketmanager. Verwenden Sie eine andere Distribution, entpacken Sie nach dem Herunterladen den Quellcode-Tarball in ein beliebiges Verzeichnis und &#252;bersetzen ihn dort mittels

./configure ; make

. Anschlie&#223;end installieren Sie Shell in a Box mit dem Befehl

make install

als Root. Der Aufruf richtet das Programm unterhalb von

/usr/local

ein. </p> <div class=„object-center“ id=„article_f2“ readability=„31“>

  
  
  
      	                    
<div class="jquerylightbox" readability="12">
    <a href="http://www.linux-community.de/var/ezwebin_site/storage/images/internal/artikel/print-artikel/linuxuser/2011/04/shell-zugriff-per-webbrowser/abbildung-2/1458719-1-ger-DE/Abbildung-2_lightbox.png" rel="lightbox[image]" title="Abbildung 2: Shell in a Box wirkt auf den ersten Blick wie die echte Kommandozeile.">
	<img src="http://www.linux-community.de/var/ezwebin_site/storage/images/internal/artikel/print-artikel/linuxuser/2011/04/shell-zugriff-per-webbrowser/abbildung-2/1458719-1-ger-DE/Abbildung-2_large.png" alt="" /></a>
    <p>

Abbildung 2: Shell in a Box wirkt auf den ersten Blick wie die echte Kommandozeile. </p> </div>

  </div><p>

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&#252;gung stellen, die Sie nach dem Schema </p>

  <pre class="auto">shellinaboxd -s <i class="replaceable">Webpfad</i>:<i class="replaceable">Dienst</i></pre><p>

starten. F&#252;r erste Versuche k&#246;nnen Sie dabei mit der zus&#228;tzlichen Option

-t

oder in der Langform

--disable-ssl

die Verschl&#252;sselung via <a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_gssl“ title=„SSL|Secure Sockets Layer. Eine Zwischenschicht, die auf das TCP/IP-Protokoll aufsetzt und dortexistierende Protokolle (HTTP, POP3, IMAP, &#8230;) verschl&#252;sselt.“ target=„_self“ class=„glossary“>SSL</a> (dazu sp&#228;ter mehr) vorl&#228;ufig deaktivieren. Welche grunds&#228;tzlichen M&#246;glichkeiten es gibt, f&#252;hrt die <a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_tfunktionen_von_shell_in_a_box“ target=„_self“ class=„table“>Tabelle „Funktionen von Shell in a Box“</a> auf. Ein

shellinaboxd

-Prozess kann dabei durchaus mehrere Services zur Verf&#252;gung stellen, wie beispielsweise das Login zu mehreren Rechnern: </p>

  <pre class="auto">$ shellinaboxd -s /host1/:SSH:host.example.com  -s /host2/:SSH:host2.example.com</pre><p>

So verbinden Sie sich unter der URL

http://localhost:4200/host1/

zu

host.example.com

verbinden, unter der URL

http://localhost:4200/host2/

&#246;ffnen Sie eine SSH-Verbindung zum Rechner

host2.example.com

. </p> <div class=„box table“ readability=„5“> <div class=„boxtitle“ readability=„6“> <p> Funktionen von Shell in a Box </p> </div> <table class=„renderedtable“ cellpadding=„2“ cellspacing=„0“ id=„article_tfunktionen_von_shell_in_a_box“ readability=„31“><tr><th valign=„top“> Kommando

</th><th valign="top">  Funktion
</th></tr><tr class="bglight" readability="2"><td valign="top">  <code>shellinaboxd -s /:LOGIN</code>
</td>

<td valign=„top“> Stellt eine Login-Shell am lokalen System unter dem Pfad

http://localhost:4200/

zur Verf&#252;gung.

</td>

</tr><tr class=„bgdark“ readability=„3“><td valign=„top“>

shellinaboxd -s /:SSH
</td>

<td valign=„top“> Stellt ein SSH-Login am lokalen System unter dem Pfad

http://localhost:4200/

zur Verf&#252;gung. Dazu muss ein SSH-Server (zumindest am Loopback-Device) laufen.

</td>

</tr><tr class=„bglight“ readability=„5“><td valign=„top“>

shellinaboxd -s /<i class="replaceable">Bezeichner</i>/:SSH:host.example.com
</td>

<td valign=„top“> Stellt einen SSH-Login f&#252;r den entfernten Rechner

host.example.com

am lokalen System unter dem Pfad

http://localhost:4200/<i class="replaceable">Bezeichner</i>/

zur Verf&#252;gung. Dazu muss ein SSH-Server laufen. Auf diese Weise l&#228;sst sich Shell in a Box auch als Gateway zu sonst unerreichbaren Rechnern verwenden.

</td>

</tr><tr class=„bgdark“ readability=„3“><td valign=„top“>

shellinaboxd -s /systemstatus/:<i class="replaceable">User</i>:<i class="replaceable">Gruppe</i>:/:<i class="replaceable">Programm</i>
</td>

<td valign=„top“> L&#228;sst unter

http://localhost:4200/systemstatus/

ein Programm mit den Rechten des angegebenen Users und der Gruppe laufen. Als Arbeitsverzeichnis dient das Wurzelverzeichnis.

</td>

</tr></table></div><p> Anders als bei PHP Shell (wo eine Zeile komplett eingegeben, diese dann verarbeitet und das Ergebnis an den Browser zur&#252;ckgeschickt wird), erm&#246;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&#252;ck, meist sp&#252;rt man jedoch keine gro&#223;en Einschr&#228;nkungen. </p> <p> Shell in a Box stellt noch eine ganze Reihe weitere Optionen zur Verf&#252;gung, ein Blick in die Dokumentation beziehungsweise auf die Webseite lohnt sich. </p> <p> W&#228;hrend erste Experimente mit Shell in a Box am lokalen Rechner durchaus ohne Verschl&#252;sselung erfolgen k&#246;nnen, empfiehlt es sich dringend, im produktiven Einsatz alle Verbindungen mittels <a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_gssl“ title=„SSL|Secure Sockets Layer. Eine Zwischenschicht, die auf das TCP/IP-Protokoll aufsetzt und dortexistierende Protokolle (HTTP, POP3, IMAP, &#8230;) verschl&#252;sselt.“ target=„_self“ class=„glossary“>SSL</a> abzusichern. Dazu ben&#246;tigen Sie ein Zertifikat, das sich im entweder im aktuellen Verzeichnis befinden muss oder dessen Speicherort Sie durch die Option

--cert=<i class="replaceable">Verzeichnis</i>

angeben. N&#228;heres erl&#228;utert der <a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_xverschl_sselung_und_zertifikate“ target=„_self“ class=„textbox“>Kasten „Verschl&#252;sselung und Zertifikate“</a>.&#160; </p> <div class=„box textbox“ id=„article_xverschl_sselung_und_zertifikate“ readability=„82“> <div class=„boxtitle“ readability=„6“> <p> Verschl&#252;sselung und Zertifikate </p> </div> <p> Die Verschl&#252;sselung von Passw&#246;rtern und Daten zwischen Sender und Empf&#228;nger sorgt daf&#252;r, dass kein Unberechtigter mitlesen kann. Dazu braucht man Zertifikate, wie man sie von diversen Webseiten (oder auch Mailservern) kennt &#8211; 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&#228;chlich derjenige ist, f&#252;r den er sich dem Client gegen&#252;ber ausgibt. Anderenfalls k&#246;nnte sich ein Angreifer zum Abfangen des Datenverkehrs einfach als berechtigte Gegenstelle ausgeben. </p> <p> Zertifikate bekommt man einerseits von kommerziellen, kostenpflichtigen Zertifizierungstellen: Sie verifizieren die Identit&#228;t des Antragstellers und geben dann ein Zertifikat f&#252;r einen Hostnamen aus. Der Browser erkennt das dann automatisch als korrekt: Er vertraut bestimmten, eingebaute Zertifizierungstellen. Eine Alternative bietet die Community-L&#246;sung CACert&#160;. </p> <p> Schlie&#223;lich besteht die M&#246;glichkeit, mithilfe von OpenSSL selbst signierte Zertifikate&#160; auszustellen &#8211; <a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_l1“ target=„_self“ class=„listing“>Listing&#160;1</a> f&#252;hrt die dazu notwendigen Schritte auf. Wenn Sie solche verwenden (<a href=„http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2011/04/Shell-Zugriff-per-Webbrowser#article_f3“ target=„_self“ class=„figure“>Abbildung&#160;3</a>) und von anderen Rechnern aus &#252;ber das Internet auf derart gesicherte Dienste zugreifen, sollten Sie sich dabei auf jeden Fall das Zertifikat anschauen und die zugeh&#246;rigen MD5/SHA1-Fingerprints vergleichen. </p> <div class=„object-center“ id=„article_f3“ readability=„31“>

  
  
  
      	                    
<div class="jquerylightbox" readability="12">
    <a href="http://www.linux-community.de/var/ezwebin_site/storage/images/internal/artikel/print-artikel/linuxuser/2011/04/shell-zugriff-per-webbrowser/abbildung-3/1458726-1-ger-DE/Abbildung-3_lightbox.png" rel="lightbox[image]" title="Abbildung 3: Ein selbst signiertes Zertifikat im Webbrowser.">
	<img src="http://www.linux-community.de/var/ezwebin_site/storage/images/internal/artikel/print-artikel/linuxuser/2011/04/shell-zugriff-per-webbrowser/abbildung-3/1458726-1-ger-DE/Abbildung-3_large.png" alt="" /></a>
    <p>

Abbildung 3: Ein selbst signiertes Zertifikat im Webbrowser. </p> </div>

  </div>

</div><div class=„box listingbox“ id=„article_l1“ readability=„39“> <div class=„boxname“> <p> Listing 1 </p> </div> <p> Key erzeugen: </p>

  <pre class="auto"># openssl genrsa -des3 -out server.key 1024</pre><p>

Certificate Signing Request (CSR) erzeugen: </p>

  <pre class="auto"># openssl req -new -key server.key -out server.csr</pre><p>

Passwort vom Schl&#252;ssel entfernen: </p>

  <pre class="auto"># cp server.key server.key.org</pre>    <pre class="auto"># openssl rsa -in server.key.org -out server.key</pre><p>

CSR signieren und Zertifikat erzeugen: </p>

  <pre class="auto"># openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

cat server.crt server.key &gt; certificate.pem</pre> </div><div class=„box glossarybox“> <div class=„boxtitle“> <p> Glossar </p> </div><dl readability=„5“><dt id=„article_gsafe-mode“><p> Safe-Mode </p> </dt><dd readability=„6“><p> Der (als veraltet geltende) Safe-Mode ist ein Versuch, PHP auf Webservern, die viele verschiedene Sites hosten (sogenannte „Shared Server“), durch Einschr&#228;nkungen gewisser Befehle sicher zu machen. </p> </dd><dt id=„article_gssl“><p> SSL </p> </dt><dd readability=„6“><p> Secure Sockets Layer. Eine Zwischenschicht, die auf das TCP/IP-Protokoll aufsetzt und dortexistierende Protokolle (HTTP, POP3, IMAP, &#8230;) verschl&#252;sselt. </p> </dd></dl></div></div> </html>

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information