Einfache Serververwaltung mit PHP und MySQL: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Projekt: Einfache Serververwaltung mit PHP und MySQL =
 
 
 
== Ziel des Projekts ==
 
== Ziel des Projekts ==
 
Dieses Projekt zeigt, wie eine einfache Serververwaltungs-Webseite aufgebaut wird. Dabei lernen die Teilnehmer die grundlegende Interaktion zwischen PHP, MySQL und einer Web-Oberfläche.
 
Dieses Projekt zeigt, wie eine einfache Serververwaltungs-Webseite aufgebaut wird. Dabei lernen die Teilnehmer die grundlegende Interaktion zwischen PHP, MySQL und einer Web-Oberfläche.
Zeile 13: Zeile 11:
  
 
Zusätzlich wird eine Benutzerverwaltung integriert:
 
Zusätzlich wird eine Benutzerverwaltung integriert:
* Bestimmte Benutzer dürfen Daten eintragen und ändern
+
* Bestimmte Benutzer dürfen Daten eintragen, ändern und löschen
 
* Andere Benutzer dürfen nur Daten lesen
 
* Andere Benutzer dürfen nur Daten lesen
 
* Am Ende wird die Webseite mit HTTPS gesichert
 
* Am Ende wird die Webseite mit HTTPS gesichert
Zeile 21: Zeile 19:
  
 
Pakete aktualisieren:
 
Pakete aktualisieren:
* apt update && apt upgrade -y
+
* '''apt update && apt upgrade -y'''
  
 
Benötigte Software installieren:
 
Benötigte Software installieren:
* apt install apache2 mariadb-server php php-mysql libapache2-mod-php -y
+
* '''apt install apache2 mariadb-server php php-mysql libapache2-mod-php -y'''
  
 
Apache und MariaDB starten und aktivieren:
 
Apache und MariaDB starten und aktivieren:
* systemctl enable --now apache2 mariadb
+
* '''systemctl enable --now apache2 mariadb'''
  
 
Datenbank absichern:
 
Datenbank absichern:
* mysql_secure_installation
+
* '''mysql_secure_installation'''
 
   (Fragen zur Absicherung beantworten und Root-Passwort setzen)
 
   (Fragen zur Absicherung beantworten und Root-Passwort setzen)
  
==Einlogen auf der Datenbanl==
+
== Anmeldung an der Datenbank ==
*mysql -u root
+
* '''mysql -u root'''
 +
 
 
== Einrichtung der Datenbank ==
 
== Einrichtung der Datenbank ==
Nun wird eine MySQL-Datenbank eingerichtet, um die Serverinformationen zu speichern.
 
 
 
Datenbank erstellen:
 
Datenbank erstellen:
* create database serververwaltung;
+
* '''create database serververwaltung;'''
  
 
Zur neuen Datenbank wechseln:
 
Zur neuen Datenbank wechseln:
* use serververwaltung;
+
* '''use serververwaltung;'''
  
 
Tabelle für die Serverdaten anlegen:
 
Tabelle für die Serverdaten anlegen:
* create table server (
+
<pre>
 +
create table server (
 
   id int auto_increment primary key,
 
   id int auto_increment primary key,
 
   rechnername varchar(50) not null,
 
   rechnername varchar(50) not null,
Zeile 54: Zeile 52:
 
   hauptdienst varchar(50) not null
 
   hauptdienst varchar(50) not null
 
);
 
);
 +
</pre>
  
 
Tabelle für die Benutzerverwaltung anlegen:
 
Tabelle für die Benutzerverwaltung anlegen:
* create table benutzer (
+
<pre>
 +
create table benutzer (
 
   id int auto_increment primary key,
 
   id int auto_increment primary key,
 
   benutzername varchar(50) not null unique,
 
   benutzername varchar(50) not null unique,
Zeile 62: Zeile 62:
 
   rolle enum('admin', 'user') not null
 
   rolle enum('admin', 'user') not null
 
);
 
);
 +
</pre>
  
== PHP-Skript für Datenbankverbindung ==
+
== Benutzer anlegen ==
Ein PHP-Skript wird erstellt, um sich mit der Datenbank zu verbinden.
+
* '''insert into benutzer (benutzername, passwort, rolle) values ('admin', password('radler'), 'admin');'''
 +
* '''insert into benutzer (benutzername, passwort, rolle) values ('kit', password('kit'), 'user');'''
  
 +
== Speicherort der Skripte ==
 +
; Die Skripte werden im Verzeichnis '''/var/www/server''' abgelegt.
 +
 +
== Dateien ==
 +
===db.php===
 +
* Dieses Skript stellt eine Verbindung zur MySQL-Datenbank `serververwaltung` her. 
 +
* Es verwendet die mysqli-Klasse, um eine Verbindung mit dem Server localhost herzustellen. 
 +
* Falls die Verbindung fehlschlägt, wird eine Fehlermeldung ausgegeben und das Skript gestoppt. 
 +
* Diese Datei wird in anderen Skripten eingebunden, um eine zentrale Datenbankverbindung zu gewährleisten.
 
<pre>
 
<pre>
 
<?php
 
<?php
$servername = "localhost";
+
$servername = "127.0.0.1";
 
$username = "root";
 
$username = "root";
$password = "passwort";
+
$password = "radler";
 
$dbname = "serververwaltung";
 
$dbname = "serververwaltung";
  
Zeile 81: Zeile 92:
 
</pre>
 
</pre>
  
== Formular für das Eintragen neuer Server ==
+
===index.html===
Ein einfaches HTML-Formular ermöglicht das Eintragen neuer Server.
+
* Diese Datei ist die Startseite der Serververwaltung und wird beim Aufruf der Webseite geladen. 
 +
* Sie bietet zwei Hauptoptionen: Die Anzeige der Serverliste und die Anmeldung für registrierte Benutzer. 
 +
* Gäste können die Serverliste aufrufen, aber keine Änderungen vornehmen. 
 +
* Angemeldete Benutzer erhalten Zugriff auf zusätzliche Verwaltungsfunktionen.
 +
<pre>
 +
<!DOCTYPE html>
 +
<html>
 +
<head>
 +
    <meta charset="UTF-8">
 +
    <title>Serververwaltung</title>
 +
</head>
 +
<body>
 +
    <h2>Willkommen zur Serververwaltung</h2>
 +
    <p><a href="liste.php">Serverliste anzeigen</a></p>
 +
    <p><a href="login.html">Anmelden</a></p>
 +
</body>
 +
</html>
 +
</pre>
 +
===liste.php===
 +
* Dieses Skript ruft alle Serverdaten aus der Datenbank ab und zeigt sie als Tabelle an. 
 +
* Es wird ausschließlich für **nicht angemeldete Benutzer** genutzt, die nur Leserechte haben. 
 +
* Falls Server vorhanden sind, werden ihre Details in einer strukturierten HTML-Tabelle dargestellt. 
 +
* Falls keine Server existieren, wird eine Meldung „Keine Server gefunden.“ ausgegeben.
 +
<pre>
 +
<?php
 +
include 'db.php';
 +
 
 +
$result = $conn->query("SELECT * FROM server");
 +
 
 +
if ($result->num_rows > 0) {
 +
    echo "<table border='1'>
 +
            <tr><th>ID</th><th>Rechnername</th><th>IP-Adresse</th><th>Betriebssystem</th><th>Festplatte (GB)</th><th>RAM (GB)</th><th>Hauptdienst</th></tr>";
 +
    while($row = $result->fetch_assoc()) {
 +
        echo "<tr><td>" . $row["id"] . "</td><td>" . $row["rechnername"] . "</td><td>" . $row["ip_adresse"] . "</td><td>" . $row["betriebssystem"] . "</td><td>" . $row["festplattenspeicher"] . "</td><td>" . $row["ram"] . "</td><td>" . $row["hauptdienst"] . "</td></tr>";
 +
    }
 +
    echo "</table>";
 +
} else {
 +
    echo "Keine Server gefunden.";
 +
}
 +
?>
 +
</pre>
 +
 
 +
===login.html===
 +
* Diese Datei stellt ein einfaches Login-Formular für Benutzer bereit. 
 +
* Die eingegebenen **Benutzerdaten werden per POST an login.php gesendet**. 
 +
* Erfolgreiche Anmeldungen ermöglichen Zugriff auf geschützte Funktionen wie das Eintragen und Löschen von Servern. 
 +
* Falls die Anmeldedaten falsch sind, erfolgt keine Weiterleitung, und der Benutzer bleibt auf der Seite.
 +
<pre>
 +
<!DOCTYPE html>
 +
<html>
 +
<head>
 +
    <meta charset="UTF-8">
 +
    <title>Login</title>
 +
</head>
 +
<body>
 +
    <h2>Login</h2>
 +
    <form method="post" action="login.php">
 +
        Benutzername: <input type="text" name="benutzername" required><br>
 +
        Passwort: <input type="password" name="passwort" required><br>
 +
        <input type="submit" value="Anmelden">
 +
    </form>
 +
</body>
 +
</html>
 +
</pre>
 +
 
 +
===login.php===
 +
* Dieses Skript verarbeitet die Login-Daten und überprüft die Benutzeranmeldung in der Datenbank. 
 +
* Falls die Anmeldedaten korrekt sind, wird eine Session gestartet und der Benutzer weitergeleitet. 
 +
* Die Session speichert den angemeldeten Benutzer, sodass er auf geschützte Funktionen zugreifen kann. 
 +
* Falls die Anmeldedaten falsch sind, wird eine Fehlermeldung ausgegeben und der Benutzer bleibt auf der Login-Seite.
 +
<pre>
 +
<?php
 +
session_start(); // Muss ganz oben stehen!
 +
include 'db.php';
 +
 
 +
if ($_SERVER["REQUEST_METHOD"] == "POST") {
 +
    $benutzername = $_POST["benutzername"];
 +
    $passwort = $_POST["passwort"];
 +
 
 +
    $sql = "SELECT * FROM benutzer WHERE benutzername='$benutzername' AND passwort=password('$passwort')";
 +
    $result = $conn->query($sql);
 +
 
 +
    if ($result->num_rows == 1) {
 +
        $_SESSION["benutzername"] = $benutzername;
 +
        header("Location: auswahl.html");
 +
    } else {
 +
        echo "Falsche Anmeldedaten.";
 +
    }
 +
}
 +
?>
 +
</pre>
  
 +
===auswahl.html===
 +
* Diese Datei dient als Menü für angemeldete Benutzer, um eine Aktion auszuwählen. 
 +
* Der Benutzer kann einen neuen Server eintragen oder einen vorhandenen Server löschen. 
 +
* Nur angemeldete Benutzer mit einer aktiven Session haben Zugriff auf diese Seite. 
 +
* Die Buttons leiten zur jeweiligen Funktion weiter, ohne zusätzliche Eingaben zu benötigen.
 
<pre>
 
<pre>
<form method="post" action="eintragen.php">
+
<!DOCTYPE html>
     Rechnername: <input type="text" name="rechnername" required><br>
+
<html>
    IP-Adresse: <input type="text" name="ip_adresse" required><br>
+
<head>
     Betriebssystem: <input type="text" name="betriebssystem" required><br>
+
    <meta charset="UTF-8">
     Festplattenspeicher (GB): <input type="number" name="festplattenspeicher" required><br>
+
     <title>Aktion waehlen</title>
    RAM (GB): <input type="number" name="ram" required><br>
+
</head>
     Hauptdienst: <input type="text" name="hauptdienst" required><br>
+
<body>
    <input type="submit" value="Speichern">
+
     <h2>Wähle eine Aktion</h2>
</form>
+
     <form action="eintragen.html" method="get">
 +
        <input type="submit" value="Neuen Server eintragen">
 +
    </form>
 +
     <form action="loeschen_liste.php" method="get">
 +
        <input type="submit" value="Server loeschen">
 +
    </form>
 +
</body>
 +
</html>
 +
 
 
</pre>
 
</pre>
  
== PHP-Skript zur Verarbeitung des Formulars ==
+
===eintragen.html===
Das Skript speichert die eingegebenen Daten in die Datenbank.
+
* Diese Datei enthält ein Formular zum Eintragen eines neuen Servers in die Datenbank. 
 +
* Die Zeichenkodierung UTF-8 wird im meta-Tag gesetzt, um Sonderzeichen und Umlaute korrekt darzustellen. 
 +
* Das Formular sendet die Eingabedaten per POST an eintragen.php, wo sie verarbeitet und gespeichert werden. 
 +
* Unterhalb des Formulars wird die aktuelle Serverliste über ein iframe aus liste.php eingebunden, damit Änderungen sofort sichtbar sind. 
 +
* Zusätzlich gibt es einen Button zur Lösch-Funktion, um direkt zu loeschen_liste.php zu gelangen.
 +
<pre>
 +
<!DOCTYPE html>
 +
<html>
 +
<head>
 +
    <meta charset="UTF-8">
 +
    <title>Server eintragen</title>
 +
</head>
 +
<body>
 +
    <h2>Neuen Server eintragen</h2>
 +
    <form method="post" action="eintragen.php">
 +
        Rechnername: <input type="text" name="rechnername" required><br>
 +
        IP-Adresse: <input type="text" name="ip_adresse" required><br>
 +
        Betriebssystem: <input type="text" name="betriebssystem" required><br>
 +
        Festplattenspeicher (GB): <input type="number" name="festplattenspeicher" required><br>
 +
        RAM (GB): <input type="number" name="ram" required><br>
 +
        Hauptdienst: <input type="text" name="hauptdienst" required><br>
 +
        <input type="submit" value="Speichern">
 +
    </form>
 +
 
 +
    <h2>Aktuelle Serverliste</h2>
 +
    <iframe src="liste.php" width="100%" height="300"></iframe>
  
 +
    <br>
 +
    <form action="loeschen_liste.php" method="get">
 +
        <input type="submit" value="Server löschen">
 +
    </form>
 +
</body>
 +
</html>
 +
 +
</pre>
 +
 +
===eintragen.php===
 +
* Dieses Skript verarbeitet die Formulardaten für das Eintragen eines neuen Servers und speichert sie in der Datenbank. 
 +
* Durch session_start(); wird die bestehende Benutzer-Session geladen, um sicherzustellen, dass der Benutzer angemeldet ist. 
 +
* Falls der Benutzer nicht eingeloggt ist, erfolgt eine automatische Weiterleitung zur Login-Seite. 
 +
* Das Skript überprüft, ob die Anfrage per POST-Methode erfolgt, um unautorisierte Zugriffe zu verhindern. 
 +
* Die übermittelten Werte werden in die Datenbank-Tabelle server eingefügt. 
 +
* Falls der Eintrag erfolgreich ist, wird der Benutzer zur Serverliste weitergeleitet (liste.php). 
 +
* Falls ein Fehler auftritt, wird eine entsprechende Fehlermeldung ausgegeben. 
 
<pre>
 
<pre>
 
<?php
 
<?php
 
include 'db.php';
 
include 'db.php';
 +
session_start();
 +
 +
if (!isset($_SESSION["benutzername"])) {
 +
    header("Location: login.html");
 +
    exit;
 +
}
  
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
Zeile 115: Zeile 277:
  
 
     if ($conn->query($sql) === TRUE) {
 
     if ($conn->query($sql) === TRUE) {
        echo "Server erfolgreich eingetragen.";
+
      header("Location: liste.php");
 +
      exit;
 
     } else {
 
     } else {
 
         echo "Fehler: " . $conn->error;
 
         echo "Fehler: " . $conn->error;
Zeile 121: Zeile 284:
 
}
 
}
 
?>
 
?>
 +
 
</pre>
 
</pre>
  
== Anzeige der Serverliste ==
+
===loeschen_liste.php===
Eine Liste aller Server wird als HTML-Tabelle ausgegeben.
+
* Dieses Skript zeigt eine Liste aller Server an, die gelöscht werden können. 
 
+
* Durch session_start(); wird die bestehende Benutzer-Session geladen, um sicherzustellen, dass der Benutzer angemeldet ist. 
 +
* Falls der Benutzer nicht eingeloggt ist, erfolgt eine automatische Weiterleitung zur Login-Seite. 
 +
* Die Serverdaten werden aus der Datenbank abgerufen und in einer Tabelle dargestellt. 
 +
* Jeder Server kann über ein Radio-Button-Feld ausgewählt und über das Formular an loeschen.php gesendet werden. 
 +
* Falls keine Server vorhanden sind, wird eine entsprechende Meldung ausgegeben.
 +
* Zusätzlich gibt es einen Button, um zur Eintragungsseite zurückzukehren.
 
<pre>
 
<pre>
 
<?php
 
<?php
 
include 'db.php';
 
include 'db.php';
 +
session_start();
 +
 +
// Prüfen, ob der Benutzer eingeloggt ist
 +
if (!isset($_SESSION["benutzername"])) {
 +
    header("Location: login.html");
 +
    exit;
 +
}
  
 +
// Serverliste abrufen
 
$result = $conn->query("SELECT * FROM server");
 
$result = $conn->query("SELECT * FROM server");
  
 
if ($result->num_rows > 0) {
 
if ($result->num_rows > 0) {
     echo "<table border='1'>
+
    echo "<h2>Server löschen</h2>";
            <tr><th>ID</th><th>Rechnername</th><th>IP-Adresse</th><th>Betriebssystem</th><th>Festplatte (GB)</th><th>RAM (GB)</th><th>Hauptdienst</th></tr>";
+
    echo "<form method='post' action='loeschen.php'>";
     while($row = $result->fetch_assoc()) {
+
     echo "<table border='1'>";
         echo "<tr><td>" . $row["id"] . "</td><td>" . $row["rechnername"] . "</td><td>" . $row["ip_adresse"] . "</td><td>" . $row["betriebssystem"] . "</td><td>" . $row["festplattenspeicher"] . "</td><td>" . $row["ram"] . "</td><td>" . $row["hauptdienst"] . "</td></tr>";
+
    echo "<tr><th>ID</th><th>Rechnername</th><th>IP-Adresse</th><th>Betriebssystem</th><th>Festplatte (GB)</th><th>RAM (GB)</th><th>Hauptdienst</th><th>Auswahl</th></tr>";
 +
 
 +
     while ($row = $result->fetch_assoc()) {
 +
         echo "<tr>";
 +
        echo "<td>" . $row["id"] . "</td>";
 +
        echo "<td>" . $row["rechnername"] . "</td>";
 +
        echo "<td>" . $row["ip_adresse"] . "</td>";
 +
        echo "<td>" . $row["betriebssystem"] . "</td>";
 +
        echo "<td>" . $row["festplattenspeicher"] . "</td>";
 +
        echo "<td>" . $row["ram"] . "</td>";
 +
        echo "<td>" . $row["hauptdienst"] . "</td>";
 +
        echo "<td><input type='radio' name='id' value='" . $row["id"] . "' required></td>";
 +
        echo "</tr>";
 
     }
 
     }
 +
 
     echo "</table>";
 
     echo "</table>";
 +
    echo "<input type='submit' value='Ausgewählten Server löschen'>";
 +
    echo "</form>";
 +
    echo "<br><form action='eintragen.html' method='get'>";
 +
    echo "<input type='submit' value='Neuen Server eintragen'>";
 +
    echo "</form>";
 +
 +
 
} else {
 
} else {
 
     echo "Keine Server gefunden.";
 
     echo "Keine Server gefunden.";
 
}
 
}
 +
 +
$conn->close();
 
?>
 
?>
 +
 
</pre>
 
</pre>
  
== Benutzerverwaltung ==
+
===loeschen.php===
Ein Registrierungs- und Login-System wird integriert, um Benutzerrechte zu verwalten. Nur Admins können Einträge bearbeiten oder hinzufügen.
+
* Dieses Skript verarbeitet die Anforderung zum Löschen eines Servers, indem die übermittelte ID geprüft und in der Datenbank entfernt wird.
 
+
* Durch session_start(); wird sichergestellt, dass nur angemeldete Benutzer Zugriff auf die Löschfunktion haben. 
Benutzer registrieren:
+
* Falls keine Server-ID übergeben wurde, gibt das Skript eine Meldung aus, dass kein Server ausgewählt wurde. 
* insert into benutzer (benutzername, passwort, rolle) values ('admin', password('adminpass'), 'admin');
+
* Nach erfolgreichem Löschen oder einer Fehlermeldung wird ein Link angezeigt, um zur Serverliste zurückzukehren.
* insert into benutzer (benutzername, passwort, rolle) values ('user', password('userpass'), 'user');
 
 
 
Benutzeranmeldung in PHP prüfen:
 
 
<pre>
 
<pre>
 
<?php
 
<?php
 +
include 'db.php';
 
session_start();
 
session_start();
include 'db.php';
 
  
if ($_SERVER["REQUEST_METHOD"] == "POST") {
+
if (!isset($_SESSION["benutzername"])) {
    $benutzername = $_POST["benutzername"];
+
    header("Location: login.html");
     $passwort = $_POST["passwort"];
+
    exit;
      
+
}
     $sql = "SELECT * FROM benutzer WHERE benutzername='$benutzername' AND passwort=password('$passwort')";
+
 
     $result = $conn->query($sql);
+
// Prüfen, ob eine ID übergeben wurde
 +
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["id"])) {
 +
     $id = intval($_POST["id"]); // Sicherheit: ID in eine Zahl umwandeln
 +
 
 +
     // Sichere SQL-Abfrage mit Prepared Statements
 +
     $stmt = $conn->prepare("DELETE FROM server WHERE id = ?");
 +
     $stmt->bind_param("i", $id);
 
      
 
      
     if ($result->num_rows == 1) {
+
     if ($stmt->execute()) {
        $_SESSION["benutzername"] = $benutzername;
+
         echo "<p>Server erfolgreich gelöscht.</p>";
         echo "Erfolgreich eingeloggt.";
 
 
     } else {
 
     } else {
         echo "Falsche Anmeldedaten.";
+
         echo "<p>Fehler beim Löschen: " . $stmt->error . "</p>";
 
     }
 
     }
 +
} else {
 +
    echo "<p>Kein Server ausgewählt.</p>";
 
}
 
}
 +
 +
// Zurück zur Admin-Liste
 +
echo "<p><a href='loeschen_liste.php'>Zurück zur Serverliste</a></p>";
 +
 +
$conn->close();
 
?>
 
?>
 +
 
</pre>
 
</pre>
  
== Verschlüsselung mit HTTPS ==
+
===session.php===
Die gesamte Seite wird auf HTTPS umgestellt, um die Sicherheit zu erhöhen.
+
* Diese Datei überprüft, ob eine gültige Session existiert, indem session_start(); verwendet wird.
 
+
* Falls keine Session vorhanden ist, wird eine Meldung ausgegeben, und ein Link zur Anmeldung ( login.html) angeboten. 
== Fazit ==
+
* Falls eine gültige Session existiert, wird der aktuell angemeldete Benutzer ausgegeben. 
Dieses Projekt zeigt, wie eine dynamische Webanwendung für die Serververwaltung entsteht. Durch die einfache Struktur können alle Teilnehmer den Zusammenhang zwischen Datenbank, PHP und HTML verstehen.
+
* Diese Datei kann zur Fehlersuche und Überprüfung der aktiven Session genutzt werden.
 +
<pre>
 +
<?php
 +
session_start();
 +
if (!isset($_SESSION["benutzername"])) {
 +
    echo "Session existiert nicht! <a href='login.html'>Neu anmelden</a>";
 +
    exit;
 +
}
 +
echo "Session gefunden: " . $_SESSION["benutzername"];
 +
?>
 +
</pre>

Aktuelle Version vom 25. März 2025, 16:41 Uhr

Ziel des Projekts

Dieses Projekt zeigt, wie eine einfache Serververwaltungs-Webseite aufgebaut wird. Dabei lernen die Teilnehmer die grundlegende Interaktion zwischen PHP, MySQL und einer Web-Oberfläche.

Die Webseite soll folgende Daten verwalten:

  • Rechnername
  • IP-Adresse mit Netzmaske
  • Betriebssystem
  • Festplattenspeicher
  • RAM
  • Hauptdienst

Zusätzlich wird eine Benutzerverwaltung integriert:

  • Bestimmte Benutzer dürfen Daten eintragen, ändern und löschen
  • Andere Benutzer dürfen nur Daten lesen
  • Am Ende wird die Webseite mit HTTPS gesichert

Installation der benötigten Pakete

Zuerst müssen die notwendigen Pakete installiert werden:

Pakete aktualisieren:

  • apt update && apt upgrade -y

Benötigte Software installieren:

  • apt install apache2 mariadb-server php php-mysql libapache2-mod-php -y

Apache und MariaDB starten und aktivieren:

  • systemctl enable --now apache2 mariadb

Datenbank absichern:

  • mysql_secure_installation
 (Fragen zur Absicherung beantworten und Root-Passwort setzen)

Anmeldung an der Datenbank

  • mysql -u root

Einrichtung der Datenbank

Datenbank erstellen:

  • create database serververwaltung;

Zur neuen Datenbank wechseln:

  • use serververwaltung;

Tabelle für die Serverdaten anlegen:

create table server (
  id int auto_increment primary key,
  rechnername varchar(50) not null,
  ip_adresse varchar(50) not null,
  betriebssystem varchar(50) not null,
  festplattenspeicher int not null,
  ram int not null,
  hauptdienst varchar(50) not null
);

Tabelle für die Benutzerverwaltung anlegen:

create table benutzer (
  id int auto_increment primary key,
  benutzername varchar(50) not null unique,
  passwort varchar(255) not null,
  rolle enum('admin', 'user') not null
);

Benutzer anlegen

  • insert into benutzer (benutzername, passwort, rolle) values ('admin', password('radler'), 'admin');
  • insert into benutzer (benutzername, passwort, rolle) values ('kit', password('kit'), 'user');

Speicherort der Skripte

Die Skripte werden im Verzeichnis /var/www/server abgelegt.

Dateien

db.php

  • Dieses Skript stellt eine Verbindung zur MySQL-Datenbank `serververwaltung` her.
  • Es verwendet die mysqli-Klasse, um eine Verbindung mit dem Server localhost herzustellen.
  • Falls die Verbindung fehlschlägt, wird eine Fehlermeldung ausgegeben und das Skript gestoppt.
  • Diese Datei wird in anderen Skripten eingebunden, um eine zentrale Datenbankverbindung zu gewährleisten.
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "radler";
$dbname = "serververwaltung";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
?>

index.html

  • Diese Datei ist die Startseite der Serververwaltung und wird beim Aufruf der Webseite geladen.
  • Sie bietet zwei Hauptoptionen: Die Anzeige der Serverliste und die Anmeldung für registrierte Benutzer.
  • Gäste können die Serverliste aufrufen, aber keine Änderungen vornehmen.
  • Angemeldete Benutzer erhalten Zugriff auf zusätzliche Verwaltungsfunktionen.
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Serververwaltung</title>
</head>
<body>
    <h2>Willkommen zur Serververwaltung</h2>
    <p><a href="liste.php">Serverliste anzeigen</a></p>
    <p><a href="login.html">Anmelden</a></p>
</body>
</html>

liste.php

  • Dieses Skript ruft alle Serverdaten aus der Datenbank ab und zeigt sie als Tabelle an.
  • Es wird ausschließlich für **nicht angemeldete Benutzer** genutzt, die nur Leserechte haben.
  • Falls Server vorhanden sind, werden ihre Details in einer strukturierten HTML-Tabelle dargestellt.
  • Falls keine Server existieren, wird eine Meldung „Keine Server gefunden.“ ausgegeben.
<?php
include 'db.php';

$result = $conn->query("SELECT * FROM server");

if ($result->num_rows > 0) {
    echo "<table border='1'>
            <tr><th>ID</th><th>Rechnername</th><th>IP-Adresse</th><th>Betriebssystem</th><th>Festplatte (GB)</th><th>RAM (GB)</th><th>Hauptdienst</th></tr>";
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>" . $row["id"] . "</td><td>" . $row["rechnername"] . "</td><td>" . $row["ip_adresse"] . "</td><td>" . $row["betriebssystem"] . "</td><td>" . $row["festplattenspeicher"] . "</td><td>" . $row["ram"] . "</td><td>" . $row["hauptdienst"] . "</td></tr>";
    }
    echo "</table>";
} else {
    echo "Keine Server gefunden.";
}
?>

login.html

  • Diese Datei stellt ein einfaches Login-Formular für Benutzer bereit.
  • Die eingegebenen **Benutzerdaten werden per POST an login.php gesendet**.
  • Erfolgreiche Anmeldungen ermöglichen Zugriff auf geschützte Funktionen wie das Eintragen und Löschen von Servern.
  • Falls die Anmeldedaten falsch sind, erfolgt keine Weiterleitung, und der Benutzer bleibt auf der Seite.
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <h2>Login</h2>
    <form method="post" action="login.php">
        Benutzername: <input type="text" name="benutzername" required><br>
        Passwort: <input type="password" name="passwort" required><br>
        <input type="submit" value="Anmelden">
    </form>
</body>
</html>

login.php

  • Dieses Skript verarbeitet die Login-Daten und überprüft die Benutzeranmeldung in der Datenbank.
  • Falls die Anmeldedaten korrekt sind, wird eine Session gestartet und der Benutzer weitergeleitet.
  • Die Session speichert den angemeldeten Benutzer, sodass er auf geschützte Funktionen zugreifen kann.
  • Falls die Anmeldedaten falsch sind, wird eine Fehlermeldung ausgegeben und der Benutzer bleibt auf der Login-Seite.
<?php
session_start(); // Muss ganz oben stehen!
include 'db.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $benutzername = $_POST["benutzername"];
    $passwort = $_POST["passwort"];

    $sql = "SELECT * FROM benutzer WHERE benutzername='$benutzername' AND passwort=password('$passwort')";
    $result = $conn->query($sql);

    if ($result->num_rows == 1) {
        $_SESSION["benutzername"] = $benutzername;
        header("Location: auswahl.html");
    } else {
        echo "Falsche Anmeldedaten.";
    }
}
?>

auswahl.html

  • Diese Datei dient als Menü für angemeldete Benutzer, um eine Aktion auszuwählen.
  • Der Benutzer kann einen neuen Server eintragen oder einen vorhandenen Server löschen.
  • Nur angemeldete Benutzer mit einer aktiven Session haben Zugriff auf diese Seite.
  • Die Buttons leiten zur jeweiligen Funktion weiter, ohne zusätzliche Eingaben zu benötigen.
<!DOCTYPE html>
<html>
<head>
     <meta charset="UTF-8">
    <title>Aktion waehlen</title>
</head>
<body>
    <h2>Wähle eine Aktion</h2>
    <form action="eintragen.html" method="get">
        <input type="submit" value="Neuen Server eintragen">
    </form>
    <form action="loeschen_liste.php" method="get">
        <input type="submit" value="Server loeschen">
    </form>
</body>
</html>

eintragen.html

  • Diese Datei enthält ein Formular zum Eintragen eines neuen Servers in die Datenbank.
  • Die Zeichenkodierung UTF-8 wird im meta-Tag gesetzt, um Sonderzeichen und Umlaute korrekt darzustellen.
  • Das Formular sendet die Eingabedaten per POST an eintragen.php, wo sie verarbeitet und gespeichert werden.
  • Unterhalb des Formulars wird die aktuelle Serverliste über ein iframe aus liste.php eingebunden, damit Änderungen sofort sichtbar sind.
  • Zusätzlich gibt es einen Button zur Lösch-Funktion, um direkt zu loeschen_liste.php zu gelangen.
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Server eintragen</title>
</head>
<body>
    <h2>Neuen Server eintragen</h2>
    <form method="post" action="eintragen.php">
        Rechnername: <input type="text" name="rechnername" required><br>
        IP-Adresse: <input type="text" name="ip_adresse" required><br>
        Betriebssystem: <input type="text" name="betriebssystem" required><br>
        Festplattenspeicher (GB): <input type="number" name="festplattenspeicher" required><br>
        RAM (GB): <input type="number" name="ram" required><br>
        Hauptdienst: <input type="text" name="hauptdienst" required><br>
        <input type="submit" value="Speichern">
    </form>

    <h2>Aktuelle Serverliste</h2>
    <iframe src="liste.php" width="100%" height="300"></iframe>

    <br>
    <form action="loeschen_liste.php" method="get">
        <input type="submit" value="Server löschen">
    </form>
</body>
</html>

eintragen.php

  • Dieses Skript verarbeitet die Formulardaten für das Eintragen eines neuen Servers und speichert sie in der Datenbank.
  • Durch session_start(); wird die bestehende Benutzer-Session geladen, um sicherzustellen, dass der Benutzer angemeldet ist.
  • Falls der Benutzer nicht eingeloggt ist, erfolgt eine automatische Weiterleitung zur Login-Seite.
  • Das Skript überprüft, ob die Anfrage per POST-Methode erfolgt, um unautorisierte Zugriffe zu verhindern.
  • Die übermittelten Werte werden in die Datenbank-Tabelle server eingefügt.
  • Falls der Eintrag erfolgreich ist, wird der Benutzer zur Serverliste weitergeleitet (liste.php).
  • Falls ein Fehler auftritt, wird eine entsprechende Fehlermeldung ausgegeben.
<?php
include 'db.php';
session_start();

if (!isset($_SESSION["benutzername"])) {
    header("Location: login.html");
    exit;
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $rechnername = $_POST["rechnername"];
    $ip_adresse = $_POST["ip_adresse"];
    $betriebssystem = $_POST["betriebssystem"];
    $festplattenspeicher = $_POST["festplattenspeicher"];
    $ram = $_POST["ram"];
    $hauptdienst = $_POST["hauptdienst"];

    $sql = "INSERT INTO server (rechnername, ip_adresse, betriebssystem, festplattenspeicher, ram, hauptdienst)
            VALUES ('$rechnername', '$ip_adresse', '$betriebssystem', '$festplattenspeicher', '$ram', '$hauptdienst')";

    if ($conn->query($sql) === TRUE) {
      header("Location: liste.php");
      exit;
    } else {
        echo "Fehler: " . $conn->error;
    }
}
?>

loeschen_liste.php

  • Dieses Skript zeigt eine Liste aller Server an, die gelöscht werden können.
  • Durch session_start(); wird die bestehende Benutzer-Session geladen, um sicherzustellen, dass der Benutzer angemeldet ist.
  • Falls der Benutzer nicht eingeloggt ist, erfolgt eine automatische Weiterleitung zur Login-Seite.
  • Die Serverdaten werden aus der Datenbank abgerufen und in einer Tabelle dargestellt.
  • Jeder Server kann über ein Radio-Button-Feld ausgewählt und über das Formular an loeschen.php gesendet werden.
  • Falls keine Server vorhanden sind, wird eine entsprechende Meldung ausgegeben.
  • Zusätzlich gibt es einen Button, um zur Eintragungsseite zurückzukehren.
<?php
include 'db.php';
session_start();

// Prüfen, ob der Benutzer eingeloggt ist
if (!isset($_SESSION["benutzername"])) {
    header("Location: login.html");
    exit;
}

// Serverliste abrufen
$result = $conn->query("SELECT * FROM server");

if ($result->num_rows > 0) {
    echo "<h2>Server löschen</h2>";
    echo "<form method='post' action='loeschen.php'>";
    echo "<table border='1'>";
    echo "<tr><th>ID</th><th>Rechnername</th><th>IP-Adresse</th><th>Betriebssystem</th><th>Festplatte (GB)</th><th>RAM (GB)</th><th>Hauptdienst</th><th>Auswahl</th></tr>";

    while ($row = $result->fetch_assoc()) {
        echo "<tr>";
        echo "<td>" . $row["id"] . "</td>";
        echo "<td>" . $row["rechnername"] . "</td>";
        echo "<td>" . $row["ip_adresse"] . "</td>";
        echo "<td>" . $row["betriebssystem"] . "</td>";
        echo "<td>" . $row["festplattenspeicher"] . "</td>";
        echo "<td>" . $row["ram"] . "</td>";
        echo "<td>" . $row["hauptdienst"] . "</td>";
        echo "<td><input type='radio' name='id' value='" . $row["id"] . "' required></td>";
        echo "</tr>";
    }

    echo "</table>";
    echo "<input type='submit' value='Ausgewählten Server löschen'>";
    echo "</form>";
    echo "<br><form action='eintragen.html' method='get'>";
    echo "<input type='submit' value='Neuen Server eintragen'>";
    echo "</form>";


} else {
    echo "Keine Server gefunden.";
}

$conn->close();
?>

loeschen.php

  • Dieses Skript verarbeitet die Anforderung zum Löschen eines Servers, indem die übermittelte ID geprüft und in der Datenbank entfernt wird.
  • Durch session_start(); wird sichergestellt, dass nur angemeldete Benutzer Zugriff auf die Löschfunktion haben.
  • Falls keine Server-ID übergeben wurde, gibt das Skript eine Meldung aus, dass kein Server ausgewählt wurde.
  • Nach erfolgreichem Löschen oder einer Fehlermeldung wird ein Link angezeigt, um zur Serverliste zurückzukehren.
<?php
include 'db.php';
session_start();

if (!isset($_SESSION["benutzername"])) {
    header("Location: login.html");
    exit;
}

// Prüfen, ob eine ID übergeben wurde
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["id"])) {
    $id = intval($_POST["id"]); // Sicherheit: ID in eine Zahl umwandeln

    // Sichere SQL-Abfrage mit Prepared Statements
    $stmt = $conn->prepare("DELETE FROM server WHERE id = ?");
    $stmt->bind_param("i", $id);
    
    if ($stmt->execute()) {
        echo "<p>Server erfolgreich gelöscht.</p>";
    } else {
        echo "<p>Fehler beim Löschen: " . $stmt->error . "</p>";
    }
} else {
    echo "<p>Kein Server ausgewählt.</p>";
}

// Zurück zur Admin-Liste
echo "<p><a href='loeschen_liste.php'>Zurück zur Serverliste</a></p>";

$conn->close();
?>

session.php

  • Diese Datei überprüft, ob eine gültige Session existiert, indem session_start(); verwendet wird.
  • Falls keine Session vorhanden ist, wird eine Meldung ausgegeben, und ein Link zur Anmeldung ( login.html) angeboten.
  • Falls eine gültige Session existiert, wird der aktuell angemeldete Benutzer ausgegeben.
  • Diese Datei kann zur Fehlersuche und Überprüfung der aktiven Session genutzt werden.
<?php
session_start();
if (!isset($_SESSION["benutzername"])) {
    echo "Session existiert nicht! <a href='login.html'>Neu anmelden</a>";
    exit;
}
echo "Session gefunden: " . $_SESSION["benutzername"];
?>