LAMP-Control

Linux Konsolen-Programme zur Steuerung eines LAMP Servers

Ein Standard LAMP-Server für ein typisches lokales Netzwerk umfasst Linux Betriebssystem, Apache Webserver, MySQL Datenbank Server und die Programmiersprache(n) Perl + PHP. Hier wird vorgestellt, mit dem man die wichtigsten Komponenten eines LAMP-Servers mit Hilfe einfacher Konsolen-Programme fernsteuern kann.
LAMP-Server Standard-Server mit Linux + Apache + MySQL + Perl + PHP
LAMP-Steuerung Möglichkeiten zur Fernsteuerung eines Standard LAMP-Servers
Debian Perl Script-Programm zur Steuerung eines Debian- oder Ubuntu-Servers
OpenSuSE Shell Script-Programm zur Steuerung eines OpenSuSE-Servers
SSH-Client Steuerung an einem beliebigen Arbeits-(Client)-PC

LAMP-Steuerung

LAMP-Server

Ein typisches lokales Netzwerk umfasst einige PC (unterschiedlicher Betriebssysteme), meist ein eigenes (LAN-, WLAN)-Router-Gerät und einen Server.
Als Server-PC eignet sich jeder handelsübliche PC, lediglich größere Unternehmen verwenden teure Hochleistungs-PC. Am Server-PC laufen mehrere (Hintergrund)-Programme, welche ihre Dienste im Netzwerk anbieten.
Jeder an das Netzwerk angeschlossene PC kann die Dienste des Servers nutzen. Dazu gehört auch die Möglichkeit zur Fernsteuerung des Servers, die auf dieser Seite vorgestellt wird.
Der eigene → LAMP-Server ist normalerweise nur im lokalen Netzwerk erreichbar, nicht aus dem Internet. Das ist empfehlenswert, bietet mehr Sicherheit und eine saubere Trennung vom öffentlichen Internet.

Server-Programme

An einem LAMP-Server laufen meist wesentlich mehr als die namens-gebenden Dienste, z.B. Webserver, Datenbank-Server, Fileserve, Printserver, Mailserver, Zeitserver, DHCP-Server, FTP-Server, SSH-Server und andere.

Rechte

Das Recht zum Starten oder Anhalten von Server-Programmen ist normalerweise dem Linux-Administrator root vorbehalten. Es hängt von der jeweiligen Konfiguration ab, welche User sich an einer entfernten SSH-Konsole anmelden dürfen, und welche Rechte sie dabei erhalten.

Fernsteuerung

Ein Server-PC ist aus guten Gründen kein Arbeitsplatz. Die administrativen Arbeiten werden meist per Fernsteuerung von einem beliebigen PC des Netzwerks erledigt. Dazu kann man eine der hier kurz vorgestellten Technologien verwenden:

Secure Shell (SSH)

An jedem Linux-Server ist ein SSH-Server-Programm installiert, normalerweise OpenSSH. Dieser Server ermöglicht u.a. die Fernsteuerung der Linux → Shell-Konsole.

An einem (entfernten) Client (Arbeits-PC) braucht man zur Fernsteuerung ein SSH-Client-Programm. An jedem Linux-Client-PC kann man dazu ohne weitere Installation die normale Shell-Konsole (Terminal) verwenden. An einem Windows-Client-PC muss man ein Programm installieren, z. B. PuTTY (kostenfrei, auch auf USB-Stick portabel, sofort ohne Installation verwendbar).

Diese Art der Fernsteuerung ist rasch und sicher, erfordert jedoch entsprechende Kenntnisse der Linux Shell-Konsole.

Die auf dieser Seite vorgestellten Beispiele verwenden diese Technologie, bieten dazu jedoch ein minimales User-Interface.
Man kann damit die Vorteile der SSH-Fernsteuerung nutzen, braucht sich jedoch keine der dazu notwendigen Anweisungen (Befehlszeilen) merken.

Alternative: X-Window (X11)

Mit jedem Linux Desktop-PC kann man einen Linux-Server mit den gewohnten Fenstern fernsteuern, und zwar ohne Installation einer besonderen Software, nur mit Hilfe des → X11-Servers (der automatisch mit jedem Linux Desktop installiert wird).
Mit dem kostenfreien Programm Xming kann man die Fernsteuerung auch von jedem Windows-PC aus durchführen. Damit kann man allerdings nur Server-PC mit Desktop steuern und keinen jener besonders schnellen Server, die man am besten ohne Desktop einrichtet.

Alternative: Browser (HTTP)

Alle häufig verwendeten Dienste bieten heute ein Interface aus dynamischen Webseiten, d.h. man kann sie mit jedem beliebigen Browser steuern. Auch fertig konfektionierte Geräte (LAN-Router, Modems, LAN-Drucker, LAN-Festplatten, ...) werden mit Webseiten gesteuert und enthalten dazu einen eigenen Mini-LAMP-Server.

Webmin
Das kostenfreie Programm-Paket Webmin bietet Möglichkeiten zur Fernsteuerung aller wichtigen System-Funktionen und Dienste eines LAMP-Servers mit einem Browser. Das umfangreiche Paket umfasst allerdings mehr als 15000 Dateien und wird nur selten in kleinen Netzwerken verwendet.

VNC
Der VNC-Server exportiert den Desktop eines (Server)-PC. Die Fernsteuerung erfolgt entweder mit einem Browser oder mit einem Java-Programm. Das ursprünglich kostenfreie Programm wurde schrittweise kommerzialisiert und ist in der Original-Version selten geworden. Auf allen gängigen Linux-Systemen sind heute freie Varianten verfügbar. Damit kann man normalerweise nur Server-PC mit Desktop steuern.

Standard Steuerungs-Scripts

An einem Standard Linux-(Server)-System befinden sich in diesem Verzeichnis Script-Programme zur Steuerung der Server-Programme (Hintergrund-Programme, services):
/etc/init.d
Diese Shell-Script-Programme bieten je nach Linux-Distribution einen unterschiedlichen Befehls-Umfang, z.B. start, stop, restart, manchmal auch status und andere.

Wenn man die Programme ohne Argument startet, dann wird meist ein Hilfe-Text angezeigt, z.B. (Steuer-Programm für den Apache Webserver):
# /etc/init.d/apache2

Zum Starten oder Anhalten verwendet man z.B.
# /etc/init.d/apache2 start
# /etc/init.d/apache2 start
Die auf dieser Seite vorgestellten Programme verwenden die in /etc/init.d enthaltenen Script-Programme zur Steuerung und - wenn möglich - auch zur Anzeige des aktuellen Status.

Prozesse

Die Konsolen-Programme ps und grep werden zur Anzeige der laufenden Prozesse verwendet.
Anzeige aller laufenden Prozesse:
# ps -A
Die Ausgabe kann umfangreich ausfallen. So wird die Prozess-Liste gefiltert, z.B. um nur die Prozesse des Apache Webservers oder des MySQL Datenbank-Servers anzuzeigen:
# ps -A | grep httpd
# ps -A | grep mysql
Als wichtiges Detail erhält man dabei die Prozess-Nummer (PID), die man für weitere Arbeiten nutzen kann.

PID
Viele Server-Prozesse schreiben beim Start ihre Prozess-Nummer in eine kleine Text-Datei, normalerweise im Verzeichnis /var/run, z.B.
/var/run/httpd2.pid
/var/run/samba/smdb.pid
/var/run/mysql/mysqld.pid
Wenn dies Dateien existieren und eine gültige PID-Nr angeben, dann ist der betreffende Dienst normalerweise in Betrieb.

Restart von Server-Programmen

Ein Server-Programm liest seine Konfigurations-Datei (im Verzeichnis /etc) normalerweise nur einmal beim Start. Eine Änderung der Konfiguration wird erst nach einem Neustart des Server-Programms wirksam.

Bei Verwendung der Apache-Module für die Programmiersprachen Perl oder PHP wird auch deren Konfiguration nur bei einem Apache-Restart berücksichtigt.

Daher ist es gelegentlich notwendig, z.B. den → Apache Webserver oder den → Samba Fileserver (+Printserver +Domain Controller) neu zu starten.

Die übrigen Server-Programme laufen mit einer vernünftig eingestellten Konfiguration oft jahrelang ohne Änderung.

Restart des Server-PC

Der Restart des gesamten Betriebssystems ist eine radikale Maßnahme, die nur sehr selten notwendig sein sollte. Sie können die Anweisung auch von jedem anderen PC per ↓ SSH-Fernsteuerung erteilen, z.B. mit einer Vorlaufzeit von 300 Sekunden:
# shutdown -r 300
Es hängt von der Konfiguration ab, welche User einen Shutdown ausführen dürfen.

Wenn ihr Server-PC per Fernsteuerung (irrtümlich) abgeschaltet wird, dann kann man ihn nur bei direktem räumlichen Zugang wieder starten. Es gibt allerdings Geräte, mit denen man auch den Einschalt-Vorgang fernsteuern kann, z.B. per Telefon.

Steuerung eines Debian-Servers

Das Beispiel rechts zeigt ein kleines Programm in der Programmiersprache → Perl, die auf jedem Linux Server installiert ist.
Das Programm wird vom Perl-Interpreter-Programm ausgeführt. Das bedeutet:
Das gezeigte Script-Programm ist in einer einfachen Text-Datei enthalten und wird bei Verwendung Live übersetzt und sofort ausgeführt.

Das Programm dient zur Steuerung eines LAMP-Servers auf Basis von Debian-Linux, Ubuntu, Ubuntu Server, oder ähnlicher Betriebssysteme. Zur Anwendung wird das Programm an einer Shell-Konsole (lokal) oder an einer SSH-Konsole (eines entfernten PC) gestartet.

Der Text ist lediglich ein Beispiel und muss vor Verwendung adaptiert werden. Alle Angaben sind ohne Gewähr, die Anwendung erfolgt auf eigenes Risiko.
Perl Script-Programm lamp.pl zur Konsolen-Steuerung eines LAMP-Servers:

Installation

Wenn sie das vorgestellte Perl Script-Programm (auf eigenes Risiko) verwenden wollen, dann müssen sie einige Vorarbeiten ausführen:

(1) Pfad
Das Programm soll die Verwaltung des Servers vereinfachen. Es wäre sinnlos, dazu einen ähnlich komplizierten Pfad anzugeben wie zur Ausführung der Standard-Scripts in /etc/init.d
Daher wird das Programm in einem jener Verzeichnisse installiert, die von der Umgebungs-Variablen PATH angegeben werden.
So wird der Wert von PATH angezeigt:
# export | grep " PATH"

Dieser Pfad wird für das Programm empfohlen:
Ändern sie den Pfad auf ihrem Server-PC nach Bedarf. Der Datei-Name wird gekürzt und braucht auf Linux keine Datei-Erweiterung:
/usr/local/bin/lamp

Damit wird die Sicherheit etwas verringert, weil die - ansonsten geforderte - Eingabe der absoluten Pfade umgangen wird. Die Konfiguration wird allerdings nicht geändert, d.h. nach Abschalten oder Entfernen des Programms lamp.pl ist die ursprüngliche Sicherheit wiederhergestellt.

(2) Shebang-Zeile
Die Leerzeile am Beginn des Textes muss gelöscht werden. Die erste Text-Zeile muss die Zeichen #! (Shebang) und danach den Pfad zum Interpreter-Programm enthalten. Vor der Shebang-Marke sind keine anderen Zeichen zulässig, auch keine Leer-Zeilen oder -Zeichen.

(3) PID-Pfade
Die im Programm verwendeten Pfade zu den PID-Dateien unterscheiden sich je nach System geringfügig. Öffnen sie das Verzeichnis /var/run ihres LAMP-Servers und kontrollieren sie die Pfade. Korrigieren sie allenfalls die Zeilen
$pid=get_pid('/var/run/...');

(4) Rechte
Stellen sie die Zugangs-Rechte der Datei ein: Alle zugelassenen User brauchen die Rechte zum Lesen (read) und Ausführen (execute). Empfehlung: user=root, Rechte=700
Wenn sie eine Administrations-Gruppe definiert haben, dann Rechte=750

Test

Öffnen sie am Linux Server-PC eine Shell-Konsole (Terminal) und geben sie ein:
# lamp
Das Programm sollte eine kurze Übersicht der angegeben Server-Programme anzeigen, z.B.
-----LAMP-Server--------------------PID-
(1) Apache Webserver
(2) VSFTPD FTP-Server
(3) MySQL DB-Server
(4) Samba SMB/CIFS-Fileserver
(5) SSH Secure Shell Server
Enter Service Nr [1-5] or <return>
Wenn ein Server-Programm als 'laufend' erkannt wurde, dann ist rechts seine PID-Nummer angegeben, ansonsten die Zahl 0
Quittieren sie mit der <return>-Taste.

Konfiguration

Im Abschnitt List of Services des Programms werden alle Server-Programme angegeben, die mit dem Programm verwaltet werden sollen.

Server-Anzeige hinzufügen
Orientieren sie sich an den Mustern. Für jedes Programm wird mit get_pid() seine PID-Nr ermittelt. Danach wird mit frm() die Status-Zeile ausgegeben. Zuletzt werden der angezeigte Name (display_name) und der Name des Standard-Scripts in das Array @srva eingetragen.

Server-Anzeige löschen
Schalten sie die Anweisungen für das Server-Programm mit vorangestellten # Kommentar-Zeichen ab.

Server-Reihenfolge ändern
Vertauschen sie einfach die Zeilen zweier Server im Abschnitt List of Services

Anwendung:

Wenn sie auf die Frage nach der Service-Nr eine gültige Zahl eingeben, dann erhalten sie z.B. diesen Text
Apache [0->stop, 1->start, 2->restart]
Geben sie eine Zahl 0..2 ein, um die betreffende Anweisung auszuführen.
Tipp: Starten sie das Programm unmittelbar danach nochmals, um den (allenfalls geänderten) Status erneut anzuzeigen.

Programmierung

Das Programm ist im üblichen Ausmaß kommentiert und (da Geschwindigkeit keine Rolle spielt) eher verständlich als kompakt abgefasst. Änderungen sollten schon mit bescheidenen Kenntnissen von → Perl möglich sein; Bezeichnen sie diese jedoch bitte deutlich (insbesondere bei Weitergabe des Programms). Das Programm ist nicht portabel, da es an eine spezielle Linux-Distribution angepasst ist.
Details zur Programmierung mit Perl finden sie in diesem Web und in sehr zahlreichen Internet-Seiten.

Steuerung eines SuSE-Servers

Das Beispiel rechts zeigt ein kleines → Shell-Script-Programm.
Das Programm wird vom Linux Shell-Interpreter-Programm ausgeführt. Das bedeutet:
Das gezeigte Script-Programm ist in einer einfachen Text-Datei enthalten und wird bei Verwendung Live übersetzt und sofort ausgeführt.

Das Programm dient zur Steuerung eines LAMP-Servers auf Basis von OpenSuSE-Linux, oder ähnlicher Betriebssysteme. Zur Anwendung wird das Programm an einer Shell-Konsole (lokal) oder an einer SSH-Konsole (eines entfernten PC) gestartet.

Der Text ist lediglich ein Beispiel und muss vor Verwendung adaptiert werden. Alle Angaben sind ohne Gewähr, die Anwendung erfolgt auf eigenes Risiko.
Shell Script-Programm lamp.sh zur Konsolen-Steuerung eines LAMP-Servers:

Installation

Wenn sie das vorgestellte Shell Script-Programm (auf eigenes Risiko) verwenden wollen, dann müssen sie einige Vorarbeiten ausführen:

(1) Pfad
Das Programm soll die Verwaltung des Servers vereinfachen. Es wäre sinnlos, dazu einen ähnlich komplizierten Pfad anzugeben wie zur Ausführung der Standard-Scripts in /etc/init.d
Daher wird das Programm in einem jener Verzeichnisse installiert, die von der Umgebungs-Variablen PATH angegeben werden.
So wird der Wert von PATH angezeigt:
# export | grep " PATH"

Dieser Pfad wird für das Programm empfohlen:
Ändern sie den Pfad auf ihrem Server-PC nach Bedarf. Der Datei-Name wird gekürzt und braucht keine Dateie-Erweiterung mehr:
/usr/local/bin/lamp

Damit wird die Sicherheit etwas verringert, weil die - ansonsten geforderte - Eingabe der absoluten Pfade umgangen wird. Die Konfiguration wird allerdings nicht geändert, d.h. nach Abschalten oder Entfernen des Programms lamp.pl ist die ursprüngliche Sicherheit wiederhergestellt.

(2) Shebang-Zeile
Die Leerzeile am Beginn des Textes muss gelöscht werden. Die erste Text-Zeile muss die Zeichen #! (Shebang) und danach den Pfad zum Interpreter-Programm enthalten. Vor der Shebang-Marke sind keine anderen Zeichen zulässig, auch keine Leer-Zeilen oder -Zeichen.

(3) Rechte
Stellen sie die Zugangs-Rechte der Datei ein: Alle zugelassenen User brauchen die Rechte zum Lesen (read) und Ausführen (execute). Empfehlung: user=root, Rechte=700
Wenn sie eine Administrations-Gruppe definiert haben, dann Rechte=750

Test

Öffnen sie am Linux Server-PC eine Shell-Konsole (Terminal) und geben sie ein:
# lamp
Das Programm sollte eine kurze Übersicht der angegeben Server-Programme anzeigen, z.B.
LAMP Server status:
1 Apache:
2 DHCP:
3 FTP:
4 MySQL:
5 Samba:
6 SSH:
Enter service nr>
Von jedem Server-Programm wird rechts sein Status angegeben, z.B. running, unused
Quittieren sie mit der <return>-Taste.

Konfiguration

Das Programm ist primitiv. Es zählt nicht, daher müssen sie die zur Auswahl angegebenen Zahlen selbst verwalten.
Jedes zu verwaltende Server-Programm ist 3mal anzugeben:
Beginn der Ausgabe-Zeile mit echo
Ende der Ausgabe-Zeile mit Aufruf des Standard-Programms + Argument status
Eintragung im Block case ... esac

Änderung: Schalten sie nicht verwendete Zeilen mit einem vorangestellten # Zeichen ab, und fügen sie neue oder geänderte Zeilen ein.

Debug:

Aktivieren sie die mit # abgeschalteten echo-Zeilen.

Anwendung:

Wenn sie auf die Frage nach der Service-Nr eine gültige Zahl eingeben, dann erhalten sie z.B. diesen Text
Apache [0->stop, 1->start, 2->restart]
Geben sie eine Zahl 0..2 ein, um die betreffende Anweisung auszuführen.
Tipp: Starten sie das Programm unmittelbar danach nochmals, um den (allenfalls geänderten) Status erneut anzuzeigen.

Programmierung

Änderungen sollten schon mit bescheidenen → Shell Kenntnissen möglich sein, insbesondere wenn man sich an das Muster hält.
Das Programm ist nicht portabel, da es an eine spezielle Linux-Distribution angepasst ist.
Details zur Shell Programmierung finden sie (spärlich) in diesem Web und in sehr zahlreichen Internet-Seiten.

Fernsteuerung durch einen SSH-Client

Voraussetzung

Das Konsolen-Programm lamp ist installiert, konfiguriert und an der eigenen Konsole des Server-PC getestet.
Wenn sie zusätzlich zum Linux-Administrator root noch weitere User zur LAMP-Verwaltung zulassen, dann sollten sie sich entsprechend anmelden und die Funktion prüfen. Melden sie sich auch als einfacher (nicht zur Administration berechtigter) User an und stellen sie sicher, dass das Programm für solche User nicht verwendbar ist.

SSH

Der SSH-Server kann die Zugangs-Rechte von entfernten Usern weiter einschränken. Kontrollieren sie die Konfiguration, z.B. in
/etc/ssh/sshd.conf
Manuals bei OpenSSH

Linux

Auf einem Linux Arbeits-PC öffnen sie eine Shell-Konsole (Terminal):
# ssh root@192.168.0.1
Ersetzen sie den UserNamen root optional durch einen anderen Administrations-User.
Ersetzen sie die angegebene IP-Adresse durch den Namen oder die Adresse ihres entfernten LAMP-Servers.

Wenn die Verbindung klappt, dann erhalten sie die Aufforderung zur Eingabe des Passworts:
Password:
Achtung: Der eingegebene Passwort-Text wird nicht (!) angezeigt.

Wenn Name und Passwort korrekt sind, dann können sie direkt an der Konsole des entfernten Servers weiterarbeiten und jede beliebige Shell-Anweisung erteilen, z.B.
servername # lamp

Verlassen sie die Konsole des entfernten LAMP-Servers mit
servername # exit
In diesem Fall kehren sie zur Konsole des eigenen Linux Arbeits-PC zurück.

Windows

Auf einem Windows Arbeits-PC starten sie das Programm PuTTY. Dazu gibt es mehrere Möglichkeiten, z.B. Anklicken des Programm-Icons.
Im Programmfenster sollte links Category=Session markiert sein. In diesem Fall geben sie rechts ein: Ersetzen sie die angegebene IP-Adresse durch den Namen oder die Adresse ihres entfernten LAMP-Servers.
Ändern sie keine der Standard-Vorgaben und Klicken sie OK

Bei der ersten Verbindung erhalten sie das Fenster PuTTY Security Alert, weil die Identifikation des entfernten Servers noch unbekannt ist. Quittieren sie mit Yes/Ja. Wenn dieses Fenster ohne Änderung der Konfiguration nochmals auftauchen sollte, dann wurde ihr Server möglicherweise manipuliert. Sie sollten in diesem Fall sofort die Verbindung zum Internet trennen, die Situation analysieren und geeignete Maßnahmen treffen.

Wenn die Verbindung klappt, dann erhalten sie die Aufforderung zur Eingabe des Namens, anschließend des Passworts:
login as: root
Password:
Achtung: Der eingegebene Passwort-Text wird nicht (!) angezeigt.

Wenn Name und Passwort korrekt sind, dann können sie direkt an der Konsole des entfernten Servers weiterarbeiten und jede beliebige Shell-Anweisung erteilen, z.B.
servername # lamp

Verlassen sie die Konsole des entfernten LAMP-Servers mit
servername # exit
In diesem Fall wird das PuTTY-Fenster geschlossen und das Programm beendet.