Linux Debian 12 als Web Server installieren

Windows 10 wird nur noch bis Oktober 2025 von Microsoft unterstützt und Windows 11 läuft nicht auf der schon etwas älteren Hardware. Alten Laptop entsorgen? Für mich der Zeitpunkt sich wieder einmal mit Linux zu beschäftigen. Inzwischen gibt es ein fast unüberschaubare Anzahl von Linux Derivaten. Aber welche ist für meinen Zweck geeignet? Ich benötige keine grafische Oberfläche, da ich den alten Laptop (ein HP 250 G3 aus dem Jahr 2015 mit 4 GB Hauptspeicher) als Web Server im lokalen Netzwerk betreiben möchte. Letztendlich habe ich mich für Debian entschieden, da diese Linux Version auch auf dem Raspberry Pi eingesetzt wird.

Download von Debian als ISO Datei. Aktuell (Februar 2025) ist die Version 12.9. Die ISO Datei ist ca. 632 MB groß. Mit einem geeigneten Tool (ich nutze Rufus) einen bootbaren USB Stick (alternativ eine CD/DVD) erstellen. USB Stick mit dem Laptop verbinden und diesen einschalten. Während des Startvorganges Esc drücken, um ins Bootmenü zu kommen. USB Stick auswählen und bestätigen.


Nach dem Neustart des Computers meldet sich das Betriebssystem mit:

Debian GNU/Linux 12 debian tty1

debian login:

Eine Anmeldung mit dem Systemadministrator Konto root oder dem im Rahmen der Installation angelegten Benutzer uli ist jetzt möglich.

Alternativ ist auch die Anmeldung von einem Windows Computer mit einem SSH Client möglich. Ich nutze dafür PuTTY. Die Verbindung erfolgt entweder über die IP Adresse (z.B. 192.168.0.10) oder den Rechnernamen debian (siehe oben). Beim erstmaligen Zugriff erscheint eine Sicherheitswarnung, die mit Accept bestätigt wird. Die Anmeldung erfolgt mit dem Benutzer uli. Aus Sicherheitsgründen ist eine Anmeldung über SSH mit dem Systemadministrator root deaktiviert.

login as: uli
uli@debian's password:
Linux debian 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07)
x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
uli@debian:~$

System aktualisieren


Grundsätzlich ist es immer empfehlenswert das Betriebssystem und die Anwendungen aktuell zu halten. Mit dem über SSH angemeldeten Benutzer uli ist das nicht möglich. Es werden root Berechtigungen benötigt. Folgende Optionen sind möglich:


uli@debian:~$ su
Passwort:
root@debian:/home/uli# apt update
OK:1 http://security.debian.org/debian-security bookworm-security InRelease
OK:2 http://deb.debian.org/debian bookworm InRelease
OK:3 http://deb.debian.org/debian bookworm-updates InRelease
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Alle Pakete sind aktuell.
root@debian:/home/uli#

In diesem Fall ist nichts zu tun. Alle Pakete sind aktuell. Sollten Pakete zur Aktualisierung anstehen, erreicht man das mit:

apt upgrade

Durch Eingabe von exit wird man wieder zum "normalen" Benutzer.

root@debian:/home/uli# exit
exit
uli@debian:~$

Web Server


Bei der Installation von Debian wurde auch web server ausgewählt. Installiert wurde der Apache Web Server - einer der am weitesten verbreiteten Web Server weltweit. Dieser Web Server steht bereits zur Verfügung. Das lässt sich einfach durch Eingabe der IP Adresse in einem Browser überprüfen:

Apache Default Page

In welchem Verzeichnis finde ich den Quellcode?

Das Standard Verzeichnis ist hier zu finden: /var/www/html

cd /var/www/html
ls
index.html

cd (change directory) wechselt in das gewünschte Verzeichnis, ls (list) zeigt den Inhalt des Verzeichnisses an. Es existiert aktuell nur die Startseite index.html. Wird im Browser eine Adresse angegeben (hier: 192.168.0.10), sucht Apache automatisch nach einer Datei mit dem Namen index.html. Ist diese vorhanden, wird der HTML Code an den Browser übertragen. Besitzt diese Datei einen anderen Namen, muss dieser in der Adresse angegeben werden, z.B. http://192.168.0.10/startseite.html.

Damit der Benutzer uli HTML Dokumente bearbeiten kann, müssen die Berechtigungen angepasst werden. Zuerst wird der Eigentümer mit chown (change owner) geändert. Für diese Aufgabe sind root Rechte erforderlich!

chown uli:uli /var/www

Der Eigentümer der bereits existierenden Datei index.html ist allerdings noch root. Der Benutzer uli kann diese Datei nicht bearbeiten.

ls -l
-rw-r--r-- 1 root root 10701 12. Feb 11:04 index.html

chown uli:uli index.html
chmod ug+rwx index.html

In der ersten Zeile wird der Eigentümer der Datei index.html geändert. Die zweite Zeile ändert die Berechtigungen für Eigentümer uli und Gruppe uli auf Lesen (r) und Schreiben (w). Die Berechtigungen anderer Benutzer (o = other) bleiben auf r.

-rw-rw-r-- 1 uli uli 10701 12. Feb 11:04 index.html

Viele dynamische Webseiten werden mit der Scriptsprache PHP programmiert. Ein ganz einfaches PHP Script soll einen Text am Browser ausgeben. Dazu muss eine PHP Datei mit einem Texteditor (z.B: nano) erstellt werden.

nano /var/www/html/test.php

Sehr einfaches PHP Script

<?php
echo "Hello world";
?>

PHP Code im Quellcode wird eingebettet in <?php und ?>. Der eigentliche PHP Code besteht also nur aus einer Zeile: echo "Hello world"; und gibt den Text Hello world am Browser aus.

Quellcode speichern ([Strg]+X, mit J bestätigen). Im Browser die Adresse 192.168.0.10/test.php eingeben und bestätigen. Das Browserfenster bleibt aber leer. Warum? Die Erklärung ist einfach: PHP steht noch nicht zur Verfügung und muss erst installiert werden (Version 8.2).

apt install php8.2

Anschließend den Web Serer neu starten:

/etc/init.d/apache2 stop
/etc/init.d/apache2 start

Im Browser liefert 192.168.0.10/test.php jetzt das gewünschte Ergebnis und gibt "Hello world" aus.

Sehr hilfreich ist ein sehr einfaches Script, das umfangreiche Informationen zu PHP und dem Apache Server ausgibt:

<?php
echo phpinfo();
?>

Anpassungen am Apache2 Web Server können über die Konfigurationsdatei /etc/apache2/apache2.conf vorgenommen werden. Die Apache2 Logfiles liegen in /var/log/apache2.

Von Windows auf das Dateisystem von Linux zugreifen


Eine Methode, die unter Linux immer möglich ist, ist FTP (File Transfer Protocol). Entwickelt man Internetseiten mit HTML oder PHP, wäre es viel einfacher über den Windows Explorer auf das Dateisystem von Linux zuzugreifen. Genau für diesen Zweck wurde Samba entwickelt, das erst einmal installiert werden muss:

apt-get install samba

Die Samba Konfigurationsdatei ist umfangreich. Es ist einfacher diese umzubenennen und eine neue Datei anzulegen.

mv /etc/samba/smb.conf /etc/samba/smb.org
nano /etc/samba/smb.conf

[global]
workgroup = smb
security = user
map to guest = Bad Password

[homes]
comment = Home Directories
browsable = yes
read only = no
create mode = 0750

[www]
path = /var/www/html/
public = yes
writable = yes
comment = smb share
printable = no
guest ok = yes

Datei speichern, anschließend den Samba Service neu starten und optional Status abfragen.

systemctl restart smbd.service
systemctl status smbd.service

Jetzt müssen wir noch einen Samba User hinzufügen.

smbpasswd -a uli
New SMB password:
Retype new SMB password:
Added user uli.

Aus einer Windows Umgebung heraus kann jetzt über die Eingabeaufforderung auf den Share zugegriffen werden:

net use W: \\192.168.0.10\www

Samba User und Passwort eingeben. Alternativ über den Windows Explorer mit der rechten Maustaste auf Netzwerk klicken und Netzwerklaufwerk verbinden... auswählen:

in Windows Netzlaufwerk verbinden

Netzlaufwerk verbinden: Benutzername eingeben

Aus Sicherheitsgründen sollte man Anmeldedaten nicht speichern. In einer Testumgebung ist das allerdings vertretbar.

sudo installieren und konfigurieren


Bereits zu Beginn des Artikels wurde der sudo Befehl erwähnt, der es einem Benutzer mit eingeschränkten Rechten ermöglicht, Befehle auszuführen, die Systemadministratorrechte (root) erfordern. In vielen Linux Distributionen ist sudo bereits enthalten, hier muss der Befehl erst installiert werden.

apt-get install sudo

Damit der Benutzer uli auch sudo nutzen kann, müssen noch Berechtigungen vergeben werden.

usermod -aG sudo uli

sudo kann jetzt genutzt werden, allerdings muss jedes Mal das Passwort eingegeben werden. Das kann in der Konfigurationsdatei /etc/sudoers geändert werden. Die Datei kann nicht direkt editiert werden. Zum Ändern wird der Befehl visudo benötigt.

Die Zeile:

%sudo ALL=(ALL:ALL) ALL

... wird auskommentiert (# voranstellen) und eine neue Zeile eingefügt:

%sudo ALL=(ALL) NOPASSWD:ALL

Nützliche Befehle


IP Adresse in Linux herausfinden


ip a

Hier nur der Teil vom WLAN Adapter (ohne IP 6):

3: wlp2s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 2c:33:7a:64:e4:7b brd ff:ff:ff:ff:ff:ff
inet 192.168.0.10/24 brd 192.168.0.255 scope global dynamic wlp2s0f0
valid_lft 31526795sec preferred_lft 31526795sec

PHP Version abfragen


php -v
PHP 8.2.26 (cli) (built: Nov 25 2024 17:21:51) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.26, Copyright (c) Zend Technologies
with Zend OPcache v8.2.26, Copyright (c), by Zend Technologies

Gruppenzugehörigkeit


Abfragen, in welchen Gruppen man Mitglied ist:

groups

Passwort ändern


Eigenes Passwort ändern:

passwd

Der root User kann auch Passwörter für andere Benutzer setzen:

passwd uli

Bildschirminhalt löschen


clear

Textdateien anzeigen


Um den Inhalt von Textdateien anzuzeigen, gibt es mehrere Möglichkeiten.

cat /etc/apache2/apache2.conf

Der Inhalt der Apache2 Konfigurationsdatei wird ausgegeben. Die komplette Datei ist in der Regel länger als die Bildschirmhöhe. Es wäre vorteilhaft den Inhalt seitenweise anzuzeigen. Für diesen Einsatzzweck steht der more Befehl zur Verfügung.

more /etc/apache2/apache2.conf

Mit der Leertaste wird seitenweise geblättert, mit der Enter-Taste zeilenweise, b (back) springt seitenweise zurück und q (quit) bricht die Anzeige ab.

less ist ein weiterer Befehl zum Anzeigen von Textdateien, kennt aber wesentlich mehr Optionen (Anzeige der Optionen mit: less --help).

Gerade Logfiles können sehr groß werden und häufig interessieren nur die letzten Einträge.

tail /var/log/dpkg.log

Die letzten 10 Zeilen der Logging Informationen der Paketverwaltung werden angezeigt. Um mehr Zeilen anzuzeigen kann der -n Parameter genutzt werden, z.B. die letzten 20 Zeilen:

tail -n 20 /var/log/dpkg.log

Suchen in Textdateien


grep "libapache2-mod" /var/log/dpkg.log

Durchsucht die Datei dpkg.log im Verzeichnis /var/log nach Zeilen, die libapache2-mod enthalten.

Kombination von Befehlen


Sehr praktisch in Linux Umgebungen ist die Möglichkeit das Ergebnis einer Anzeige an einen anderen Befehl als Input weiterzugeben. Realisiert wird das mit der Pipe |.

apt list --installed | grep "samba"

Der erste Teil gibt alle installierten Pakete aus. Das Ergebnis wird mit grep nach dem Vorkommen von samba durchsucht.

Linux beenden


Genau wie bei Windows sollte auch Linux sauber heruntergefahren werden, bevor der Computer ausgeschaltet wird.

shutdown -h now

-h now bewirkt, dass der Computer sofort heruntergefahren wird.