Ubuntu-Server 14.04.3 LTS in VirtualBox als Testumgebung einrichten

Wenn man dynamische Websites programmieren möchte, z.B. mit PHP, dann benötigt man eine Testumgebung, in der man die Anwendungen testen kann. Eine sehr schöne Möglichkeit hierfür bieten virtuelle Maschinen. Der Vorteil dabei ist, dass sie den realen Bedingungen am ehesten entsprechen und trotzdem eine gewisse Sicherheit vorhanden ist, da auf dem lokalen Rechner normalerweise keine unbefugten Personen Zugriff haben. Würde man direkt im Internet einen Server bei einem Webhoster mieten, bedeutet das prinzipiell ein Sicherheitsrisiko, da im Grunde jeder über das Internet auf den Server zugreifen könnte. In der Lernphase, in der die PHP-Anwendungen nicht unbedingt sicher sind, kann das fatale Folgen haben.

Man kann auf dem lokalen Rechner einen virtuellen Server einrichten, konfigurieren und warten, so wie man sie später in einer realen Umgebung bei einem Webhoster vorfindet. Nachfolgend ist eine Beispiel-Einrichtung von Ubuntu 14.04.3 LTS in VirtualBox mit Hilfe von Bildergalerien beschrieben, sodass man die einzelnen Schritte nachvollziehen kann. Die Einrichtung umfasst grob betrachtet die folgenden drei Schritte. Das Vorhandensein von Virtualbox wird dabei vorausgesetzt.

Ubuntu-Server downloaden und virtuelle Maschine einrichten

Zunächst muss das Ubuntu-Paket als ISO-Datei von der Herstellerseite heruntergeladen werden.

Danach muss in VirtualBox die virtuelle Maschine eingerichtet werden. In diesem Beispiel wurden 40 GB Festplattenspeicher (Format .vdi) und 2 GB Arbeitsspeicher gewählt. Als Grafikspeicher wird nichts besonderes benötigt, da der Server normalerweise über die Konsole bedient wird. Das heruntergeladene Ubuntu-Paket muss als CD/DVD-Laufwerk eingebunden werden, damit davon gestartet wird und die Installation durchgeführt werden kann. Als Anschluss für Adapter 2 wird NAT gewählt, damit Updates aus dem Internet heruntergeladen werden können. Dieser wird später deaktiviert, sodass der virtuelle Server keine Internetverbindung hat. Dafür wird später Adapter 1 aktiviert, damit man auf den Server vom lokalen Rechner aus zugreifen kann.

  • Neue virtuelle Maschine in VirtualBox

    Schritt 1: Über die Schaltfläche "Neu" eine neue virtuelle Maschine erstellen.

  • Virtuelle Festplatte erzeugen

    Schritt 2: Angaben für die zu erstellende virtuelle Festplatte machen.

  • Einstellungen für die virtuelle Maschine ändern

    Schritt 3: Zum Einbinden der Ubuntu ISO-Datei die Einstellungen für die virtuelle Maschine ändern.

  • Neues CD/DVD-Laufwerk hinzufügen

    Schritt 4: Neues CD/DVD-Laufwerk hinzufügen auswählen.

  • ISO-Datei als Medium auswählen

    Schritt 5: Über die Schaltfläche "Medium auswählen" die Ubuntu ISO-Datei angeben.

  • Eingebundene ISO-Datei in der Liste

    Schritt 6: Die ISO-Datei sollte in der Liste zu sehen sein.

  • Netzwerkeinstellung der virtuellen Maschine

    Schritt 7: In diesem Beispiel wurde für Adapter 2 als Netzwerkanschluss NAT gewählt, damit man Updates herunterladen kann. Nach der Installation wird Adapter 1 hinzugefügt, damit man vom lokalen Rechner auf den Server zugreifen kann.

  • Virtuelle Maschine in VirtualBox starten

    8. Schritt: Die virtuelle Maschine kann gestartet werden.

Ubuntu-Server installieren

Nach dem Start der virtuellen Maschine sollte automatisch vom CD/DVD-Laufwerk bzw. von der ISO-Datei gebootet werden. Man wird Schritt für Schritt durch die einzelnen Installationsschritte geführt. Diese umfassen grob betrachtet die folgenden Punkte.

  • Sprache, Installationssprache, Standort, Tastaturkonfiguration
  • Netzwerkeinrichtung
  • Benutzereinrichtung
  • Zeitzone
  • Festplattenpartition
  • Einstellungen zu Updates
  • Software-Auswahl, z.B. LAMP, DNS-Server, Mailserver, OpenSSH
  • Mailserver-Konfiguration
  • Installation des Bootloaders GRUB
  • Abschluss und Neustart des Systems

Damit nach einer erfolgreichen Installation beim Hochfahren keine erneute Installation gestartet wird, sollte man die Verbindung zur ISO-Datei wieder trennen. Nachfolgend sind die einzelnen Schritte in einer Bildergalerie abgebildet. Optional kann man danach auf der virtuellen Maschine Updates einspielen, bevor man die Netzwerkeinstellungen anpasst.

  • Sprachauswahl nach dem Booten

    Schritt 1: Nach dem Booten von der ISO-Datei erfolgt zunächst die Sprachauswahl.

  • Ubuntu Server installieren auswählen

    Schritt 2: Der Punkt "Ubuntu Server installieren" sollte bereits ausgewählt sein.

  • Installationssprache

    Schritt 3: Die Sprache für den Installationsprozess kann im nächsten Schritt angegeben werden.

  • Bestätigen der Installationssprache

    Schritt 4: Es kann sein, dass eine Installationssprache nicht vollständig ist. In dem Fall erfolgt eine Abfrage, ob die Sprache trotzdem verwendet werden soll.

  • Angabe des Standorts

    Schritt 5: Im nächsten Schritt wird der Standort abgefragt.

  • Erkennung des Tastaturmodells

    Schritt 6: Es erfolgt eine Abfrage, ob das Tastaturmodell anhand von Eingaben erkannt werden soll.

  • Tastatureingaben für die Erkennung vornehmen

    Schritt 7: Für die Erkennung des Tastaturmodells erfolgen einige Abfragen über Tasten, die man tippen muss.

  • Rechnernamen für das Netzwerk

    Schritt 8: Es erfolgt eine Abfrage über den Namen des Rechners im Netzwerk.

  • Namen eines Benutzers eingeben

    Schritt 9: Für die Einrichtung eines Benutzerkontos wird der Name des Benutzers abgefragt. In diesem Beispiel heißt der Benutzer loginusr.

  • Benutzername zum Einloggen

    Schritt 10: Für das Benutzerkonto muss ein Benutzername angegeben werden, mit dem der Benutzer sich anmelden kann. In diesem Beispiel wird dafür ebenfalls loginusr verwendet.

  • Passwort für das Benutzerkonto

    Schritt 11: Im nächsten Schritt muss 2x das Passwort für das Benutzerkonto angegeben werden.

  • Abfrage zum Verschlüsseln des persönlichen Ordners

    Schritt 12: Es wird abgefragt, ob der persönliche Ordner verschlüsselt werden soll.

  • Zeitzone angeben

    Schritt 13: Als nächstes muss die Zeitzone angegeben werden.

  • Partitionierungsmethode auswählen

    Schritt 14: Danach erfolgt eine Abfrage zur Partitierungsmethode der Festplatte.

  • Zu partitionierende Festplatte auswählen

    Schritt 15: Die Festplatte, die partitioniert werden soll, muss ausgewählt werden.

  • Partitionsaufteilung auf Festplatte schreiben

    Schritt 16: Es erfolgt eine Abfrage, ob die Änderungen auf die Speichergeräte geschrieben und LVM eingerichtet werden soll.

  • Größe der Volume Group angeben

    Schritt 17: Der zu nutzende Anteil der Volume Group für die Partitionierung kann angepasst werden.

  • Übersicht über die Festplattenänderungen

    Schritt 18: Zuletzt wird eine Übersicht über die Änderungen angezeigt, die auf die Festplatte geschrieben werden.

  • Angaben zum Proxy

    Schritt 19: Als nächstes kann bei Bedarf ein Proxy angegeben werden.

  • Update-Einstellungen für Ubuntu-Server

    Schritt 20: Aus einer Liste kann ausgewählt werden, ob und wie Updates installiert werden sollen.

  • Software für den Server auswählen

    Schritt 21: Mit der Leertaste kann die Software ausgewählt werden, die installiert werden soll. Für die Testumgebung, um mit PHP zu programmmieren, ist vor allem OpenSSH, LAMP und DNS sinnvoll.

  • MySQL Root-Passwort festlegen

    Schritt 22: Für MySQL wird ein Root-Passwort benötigt, der 2x angegeben werden muss.

  • Postfix-Konfiguration angeben

    Schritt 23: Wurde als Software E-Mailserver gewählt, wird die Angabe über die Art der E-Mailkonfiguration mit Postfix benötigt.

  • System-Emailname angeben

    Schritt 24: Im nächsten Schritt wird der Domainname für die E-Mailkonfiguration benötigt. In diesem Beispiel wurde ubuntuexample.com gewählt.

  • Selbstsigniertes SSL-Zertifikat erstellen

    Schritt 25: Danach kann gewählt werden, dass ein selbstsigniertes SSL-Zertifikat erstellt werden soll, damit man IMAP und POP3 über SSL/TLS nutzen kann.

  • Rechnernamen für das SSL-Zertifikat angeben

    Schritt 26: Für das Feld des commonName des erzeugten SSL-Zertifikats wird der Rechnername benötigt.

  • GRUB-Bootloader in den MBR schreiben

    Schritt 27: Es erfolgt eine Abfrage, ob der GRUB-Bootloader in den MBR geschrieben werden soll.

  • Abschluss der Installation

    Schritt 28: Danach wird die Installation abgeschlossen und das System neu gestartet.

  • Neustart und erstes Login am System

    Schritt 29: Mit dem erstellten Benutzernamen und Passwort sollte man sich nach dem Neustart am System anmelden können.

Netzwerkeinstellungen des virtuellen Server anpassen

Zum Schluss müssen noch die Netzwerkeinstellungen angepasst werden, damit der Zugriff auf den virtuellen Server vom lokalen Rechner aus funktioniert. Hierbei gibt es mehrere Möglichkeiten. In diesem Beispiel wurde in den Einstellungen von VirtualBox der Adapter 1 aktiviert und dabei Host-only Adapter gewählt. Auf dem virtuellen Server wurde außerdem die Datei /etc/network/interfaces geändert, damit beide Adapter im System verfügbar sind. Das Editieren erfolgte dabei mit vim. Hierbei ist vor allem wichtig, dass man mit der Taste i in den Einfügemodus wechselt, mit der ESC-Taste den Einfügemodus beendet und mit :wq oder :wq! die Datei speichert und schließt. Nach eine Neustart sollte mit ifconfig die zweite Netzwerkkarte angezeigt werden.

Bei laufendem Serverbetrieb kann man über die Kommandozeile mit ping prüfen, ob der Zugriff über den lokalen Rechner funktioniert. Man kann die IP-Adresse auch über den Browser aufrufen und prüfen, ob die Standardseite des Ubuntu-Servers angezeigt wird. Damit die Standardseite des Servers auch über einen Domainnamen erreichbar ist, muss die lokale Datei hosts geändert werden, die sich in der Regel unter C:\Windows\System32\drivers\etc befindet. Dabei wird zu einem frei wählbaren Domainnamen die IP-Adresse des Servers eingetragen. Danach sollte der Zugriff auf die Standardseite auch über den Domainnamen möglich sein. Es versteht sich von selbst, dass der frei wählbare Domainname nur für die Testumgebung auf dem virtuellen Server gilt und man einen Domainnamen wählen sollte, den man sonst im Internet nicht verwendet.

Nach den Updates kann aus Sicherheitsgründen der Adapter 2 in VirtualBox (NAT-Anschluss) wieder deaktiviert werden, sodass keine Internetverbindung besteht. Im dem Fall sollte man die Datei /etc/network/interfaces des virtuellen Servers ebenfalls bearbeiten und die Netzwerkkarte eth1 auskommentieren (mit #). Sonst wird beim Hochfahren immer versucht, die Netzwerkkarte eth1 zu konfigurieren. Nur wenn Updates eingespielt werden sollen, kann man den Adapter 2 aktivieren. Damit die IP-Adresse des virtuellen Servers sich nicht ständig ändert, sollte man außerdem die Netzwerkkarte eth0 (Adapter 1) auf static umstellen und die IP-Adresse manuell eintragen. Nachfolgend sind die einzelnen Schritte abgebildet.

  • Virtuelle Maschine auswählen und ändern

    Schritt 1: Virtuelle Maschine auswählen und über das Kontextmenü "Andern" auswählen.

  • Zweiten Netzwerkadapter aktivieren

    Schritt 2: Einen zweiten Netzwerkadapter aktivieren und beim Anschluss "Host-only Adapter" wählen.

  • ifconfig aufrufen

    Schritt 3: Virtuelle Maschine starten und ifconfig aufrufen.

  • Zweite Netzwerkkarte eth1 wird nicht aufgeführt

    Schritt 4: Trotz Aktivierung in Virtualbox dürfte die zweite Netzwerkkarte eth1 (Adapter 2/NAT) nicht aufgeführt werden. Hierfür muss zusätzlich die Datei /etc/network/interfaces geändert werden.

  • Mit vim die Datei interfaces öffnen

    Schritt 5: Mit dem Befehl sudo vim /etc/network/interfaces wird die Datei geöffnet.

  • Mit Taste i in den Einfügemodus wechseln

    Schritt 6: Mit der Taste i wird in den Einfügemodus gewechselt und die Einträge für die zweite Netzwerkkarte eth1 können vorgenommen werden.

  • Änderungen speichern und schließen

    Schritt 7: Mit :wq oder :wq! werden die Änderungen gespeichert und die Datei geschlossen. Das Ausrufezeichen erzwingt dabei das Speichern und Schließen.

  • Ubuntu-System neu starten

    Schritt 8: Danach kann mit sudo reboot das System neu gestartet werden.

  • Nach Neustart ifconfig erneut aufrufen

    Schritt 9: Nach dem Neustart und Einloggen sollte man ifconfig erneut aufrufen.

  • Netzwerkkarte eth1 ist aktiv

    Schritt 10: Die zweite Netzwerkkarte eth1 sollte nun aktiv sein und die IP-Adresse kann ausgelesen werden.

  • Zweite Netzwerkkarte anpingen

    Schritt 11: Über die Windows-Kommandozeile kann die IP-Adresse von Adapter 1 angepingt werden.

  • Anpingen des Domainnamens nicht möglich

    Schritt 12: Das Anpingen über den Domainnamen dürfte zunächst nicht erfolgreich sein.

  • IP-Adresse in Datei hosts eintragen

    Schritt 13: Damit der Zugriff auch über eine Domain funktioniert, kann die IP-Adresse hierfür in der Datei hosts eingetragen werden, die sich unter C:\Windows\System32\drivers\etc befindet.

  • Anpingen über Domainnamen erfolgreich

    Schritt 14: Danach sollte auch das Anpingen über den Domainnamen funktionieren.

  • Aufruf der Website des Servers

    Schritt 15: Die Standard-Website des Servers sollte danach auch über den Browser aufrufbar sein.

  • Deaktivieren des ersten Netzwerkadapters

    Schritt 16: Aus Sicherheitsgründen sollte man die zweite Netzwerkkarte (Adapter 2) deaktivieren, sodass die virtuelle Maschine keine Verbindung ins Internet hat und nur punktuell bei Updates aktivieren.

  • Zweite Netzwerkkarte in interfaces deaktivieren

    Schritt 17: Danach sollte man in /etc/network/interfaces die Netzwerkkarte eth1 deaktivieren (mit # auskommentieren) und die IP-Adresse von eth0 auf statisch umstellen, sodass man die Datei hosts nicht ständig ändern muss.

Ist bis hierher alles erfolgreich verlaufen, kann man den virtuellen Server als Testumgebung für PHP-Anwendungen (oder andere Programmiersprachen wie Python, Perl etc.) verwenden. Nebenbei kann man auch lernen, wie man einen Server konfiguriert, ohne dass man ein Live-System im Internet hierfür benötigt. Vor wichtigen Änderungen sollte man immer eine Sicherheitskopie (Snapshot) erstellen, sodass man sie bei Bedarf wieder einspielen kann.

Die nächsten Schritte

Mit der Einrichtung des virtuellen Servers ist zunächst eine Testumgebung geschaffen worden. Man kann damit fortfahren, den Server zu konfigurieren (Apache, PHP, DNS- und E-Mailserver etc.) und/oder mit weiteren Paketen einzurichten, z.B. PHPMyAdmin. Hierfür ist eine gründliche Einarbeitung notwendig.

Man kann sich stattdessen auch direkt mit serverseitiger Programmierung beschäftigen. Bei diesem Beispiel sollte man direkt mit PHP beginnen können. Für andere Programmiersprachen wie z.B. Perl sind in der Regel weitere Schritte notwendig. Der Pfad zur Standardseite des virtuellen Servers ist normalerweise

  • /var/www/html/

Über die Konsole navigiert man zu dem Ordner mit dem Befehl

  • cd /var/www/html/

Listet man den Inhalt des Ordners (mit dir) auf, müsste die darin befindliche Datei index.html zu sehen sein, die angezeigt wird, wenn man über den Browser den Server aufruft. Man kann an dieser Stelle über die Konsole die Datei löschen oder umbenennen und eine PHP-Datei erzeugen. Allerdings ist auf Dauer die Erstellung von PHP-Dateien über die Konsole zeitraubend.

Man kann an dieser Stelle zwar mit dem User, der bei der Installation angelegt wurde (in diesem Beispiel loginusr), sich mit einem SFTP-Client einloggen, z.B. WinSCP. Allerdings kann man aufgrund der Berechtigungen keine Dateien erstellen und bearbeiten. Mit dem User root wäre das zwar möglich. In der Standardinstallation ist der User root jedoch zunächst deaktiviert. Bei einer Testumgebung hätte man zwar kein besonderes Sicherheitsrisiko, wenn man den User root aktiviert. Allerdings sollte man sich von vornherein daran gewöhnen, ohne root zu arbeiten.

Man steht also vor dem Problem, dass man über WinSCP mit dem erstellten User keine Dateien erstellen und bearbeiten kann und auf der anderen Seite der User root deaktiviert ist. Eine mögliche Lösung an dieser Stelle ist, den erstellten User in die Gruppe aufzunehmen, in der auch der Apache-Webserver Mitglied ist. Das ist normalerweise die Gruppe www-data, kann aber auch eine andere sein. Außerdem kann man den User als Eigentümer für den Ordner /var/www/ setzen. Mit den entsprechenden Berechtigungen hat damit der Apache-Webserver die Möglichkeit, die Dateien zu lesen und auszuliefern und mit den Userberechtigungen kann man sich mit einem SFTP-Client auf dem Server einwählen (Übertragungsprotokoll SFTP) und bequem Dateien erstellen, hoch- und runterladen etc. Nachfolgend sind in der Bildergalerie die einzelnen Schritte abgebildet.

  • User in die Gruppe www-data aufnehmen

    Schritt 1: Den User in die Gruppe www-data aufnehmen.

  • Aufnahme in die Gruppe nach Passworteingabe

    Schritt 2: Nach der Eingabe des Passworts sollte der User in die Gruppe aufgenommen werden.

  • Eigentümer vom Hauptordner ändern

    Schritt 3: Mit chown kann der Eigentümer von /var/www geändert werden.

  • Dateiberechtigungen auf 0640 setzen

    Schritt 4: Danach kann man mit find alle Dateien suchen und die Berechtigungen auf 0640 setzen. In manchen Fällen kann auch eine andere Einstellung notwendig sein.

  • Berechtigungen für Ordner auf 2750 setzen

    Schritt 5: Die Berechtigungen für die Ordner können normalerweise auf 2750 gesetzt werden.

  • Einloggen mit WinSCP

    Schritt 6: Danach kann der SFTP-Client gestartet werden und man sollte sich mit dem User einwählen können.

  • Eigenschaften der Startseite anzeigen

    Schritt 7: Im Ordner /var/www/html befindet sich die index.html. Über das Kontextmenü kann man sich die Eigenschaften wie Gruppe, Eigentümer und Berechtigungen anzeigen lassen.

  • Ansicht Eigentümer und Berechtigungen

    Schritt 8: In diesem Beispiel sind die Berechtigungen, der Eigentümer und die Gruppe wie vorgegeben gesetzt.

  • Neue Datei index.php erstellen

    Schritt 9: Die Datei index.html kann man umbenennen und danach eine Datei mit dem Namen index.php erstellen.

  • PHP-Code in index.php einfügen

    Schritt 10: Danach fügt man einen einfachen PHP-Code ein, um die PHP-Seite testen zu können.

  • PHP-Startseite aufrufen

    Schritt 11: Ruft man im Browser die IP-Adresse oder den Domainnamen auf, der in der Datei hosts der IP-Adresse zugewiesen wurde, dann sollte die PHP-Seite mit der angegebenen Funktion aufgerufen werden.

Ist bis hierher alles wie gewünscht verlaufen, hat man eine gute Entwicklungsumgebung und man kann in Zukunft mit der PHP-Programmierung beginnen, bequem über den SFTP-Client Dateien hoch- und runtreladen, löschen, umbenennen etc.