Einfache Serververwaltung mit PHP und MySQL Verbesserung: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 87: Zeile 87:
 
?>
 
?>
 
</pre>
 
</pre>
Erläuterung: Stellt die Verbindung zur MySQL-Datenbank her.
 
  
 
=== index.html ===
 
=== index.html ===
Zeile 103: Zeile 102:
 
</html>
 
</html>
 
</pre>
 
</pre>
Erläuterung: Die Startseite mit Links zur Serverliste und Anmeldung.
+
 
 +
=== login.html ===
 +
<pre>
 +
<!DOCTYPE html>
 +
<html>
 +
<head>
 +
    <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 ===
 
=== login.php ===
Zeile 116: Zeile 132:
 
     if ($result->num_rows == 1) {
 
     if ($result->num_rows == 1) {
 
         $_SESSION["benutzername"] = $benutzername;
 
         $_SESSION["benutzername"] = $benutzername;
         header("Location: dashboard.php");
+
         header("Location: liste.php");
 
         exit;
 
         exit;
 
     } else {
 
     } else {
Zeile 124: Zeile 140:
 
?>
 
?>
 
</pre>
 
</pre>
Erläuterung: Prüft die Anmeldedaten und startet eine Session.
 
  
=== dashboard.php ===
+
=== eintragen.html ===
 
<pre>
 
<pre>
<?php
+
<form method="post" action="eintragen.php">
include 'db.php';
+
     Rechnername: <input type="text" name="rechnername" required><br>
session_start();
+
    IP-Adresse: <input type="text" name="ip_adresse" required><br>
if (!isset($_SESSION["benutzername"])) {
+
    Betriebssystem: <input type="text" name="betriebssystem" required><br>
    header("Location: login.html");
+
    Festplattenspeicher (GB): <input type="number" name="festplattenspeicher" required><br>
     exit;
+
    RAM (GB): <input type="number" name="ram" required><br>
}
+
    Hauptdienst: <input type="text" name="hauptdienst" required><br>
echo "<h2>Willkommen, " . $_SESSION["benutzername"] . "</h2>";
+
    <input type="submit" value="Speichern">
echo "<p><a href='liste.php'>Server anzeigen</a></p>";
+
</form>
echo "<p><a href='eintragen.html'>Server eintragen</a></p>";
 
echo "<p><a href='loeschen.php'>Server löschen</a></p>";
 
echo "<p><a href='logout.php'>Abmelden</a></p>";
 
?>
 
 
</pre>
 
</pre>
Erläuterung: Das Dashboard mit Links zum Eintragen und Löschen von Servern.
 
  
 
=== loeschen.php ===
 
=== loeschen.php ===
Zeile 153: Zeile 163:
 
     exit;
 
     exit;
 
}
 
}
$result = $conn->query("SELECT * FROM server");
+
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if ($result->num_rows > 0) {
+
     $id = $_POST["id"];
     echo "<form method='post' action='loeschen_verarbeitung.php'>";
+
     $sql = "DELETE FROM server WHERE id='$id'";
     echo "<select name='server_id'>";
+
     if ($conn->query($sql) === TRUE) {
     while ($row = $result->fetch_assoc()) {
+
         header("Location: liste.php");
         echo "<option value='" . $row["id"] . "'>" . $row["rechnername"] . "</option>";
+
        exit;
 +
    } else {
 +
        echo "Fehler: " . $conn->error;
 
     }
 
     }
    echo "</select>";
 
    echo "<input type='submit' value='Löschen'>";
 
    echo "</form>";
 
} else {
 
    echo "Keine Server zum Löschen.";
 
 
}
 
}
 
?>
 
?>
 
</pre>
 
</pre>
Erläuterung: Stellt eine Auswahl für das Löschen von Servern bereit.
 
  
=== loeschen_verarbeitung.php ===
+
=== liste.php ===
 
<pre>
 
<pre>
 
<?php
 
<?php
 
include 'db.php';
 
include 'db.php';
session_start();
+
$result = $conn->query("SELECT * FROM server");
if (!isset($_SESSION["benutzername"])) {
+
if ($result->num_rows > 0) {
     header("Location: login.html");
+
     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><th>Aktion</th></tr>";
     exit;
+
     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>";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
+
        if (isset($_SESSION["benutzername"])) {
    $server_id = $_POST["server_id"];
+
            echo "<td><form method='post' action='loeschen.php'><input type='hidden' name='id' value='" . $row["id"] . "'><input type='submit' value='Löschen'></form></td>";
    $sql = "DELETE FROM server WHERE id=$server_id";
+
         }
    if ($conn->query($sql) === TRUE) {
+
         echo "</tr>";
        header("Location: liste.php");
 
         exit;
 
    } else {
 
         echo "Fehler: " . $conn->error;
 
 
     }
 
     }
 +
    echo "</table>";
 +
} else {
 +
    echo "Keine Server gefunden.";
 
}
 
}
 
?>
 
?>
 
</pre>
 
</pre>
Erläuterung: Löscht einen ausgewählten Server aus der Datenbank.
 
 
 
 
== TLS-Absicherung ==
 
Es wird empfohlen, HTTPS zu aktivieren, um die Verbindung abzusichern. Dies kann mit Let's Encrypt oder einem eigenen SSL-Zertifikat erfolgen.
 
 
== Fazit ==
 
Mit diesen Verbesserungen ist die Serververwaltung sicherer und funktionaler. Administratoren können nun Server über eine Checkbox auswählen und löschen, während Eingaben validiert werden, um Missbrauch zu verhindern.
 

Version vom 15. März 2025, 15:29 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/html abgelegt.

Dateien

db.php

<?php
session_start();
$servername = "localhost";
$username = "root";
$password = "passwort";
$dbname = "serververwaltung";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Verbindung fehlgeschlagen: " . $conn->connect_error);
}
?>

index.html

<!DOCTYPE html>
<html>
<head>
    <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>

login.html

<!DOCTYPE html>
<html>
<head>
    <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

<?php
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: liste.php");
        exit;
    } else {
        echo "Falsche Anmeldedaten.";
    }
}
?>

eintragen.html

<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>

loeschen.php

<?php
include 'db.php';
session_start();
if (!isset($_SESSION["benutzername"])) {
    header("Location: login.html");
    exit;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $id = $_POST["id"];
    $sql = "DELETE FROM server WHERE id='$id'";
    if ($conn->query($sql) === TRUE) {
        header("Location: liste.php");
        exit;
    } else {
        echo "Fehler: " . $conn->error;
    }
}
?>

liste.php

<?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><th>Aktion</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>";
        if (isset($_SESSION["benutzername"])) {
            echo "<td><form method='post' action='loeschen.php'><input type='hidden' name='id' value='" . $row["id"] . "'><input type='submit' value='Löschen'></form></td>";
        }
        echo "</tr>";
    }
    echo "</table>";
} else {
    echo "Keine Server gefunden.";
}
?>