Apparmor Apache2: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
=Absicherung eines Apache2-Webservers mit AppArmor auf Debian= | =Absicherung eines Apache2-Webservers mit AppArmor auf Debian= | ||
==Ziel== | ==Ziel== | ||
| − | * | + | * Reduzierung der Angriffsfläche durch Zugriffsbeschränkungen auf Dateisystemebene. |
| − | * | + | * Der Apache2-Prozess darf nur auf explizit erlaubte Dateien und Verzeichnisse zugreifen. |
| − | * Schutz vor Webshells, | + | * Schutz vor Webshells, ungewolltem Zugriff auf /etc/, /root/, etc. |
==Voraussetzungen== | ==Voraussetzungen== | ||
| − | * Debian- | + | * Debian 12 oder aktuelles Ubuntu-System mit Apache2 |
| − | + | * root-Zugriff | |
| − | * | ||
| − | == | + | ==Installation der AppArmor-Werkzeuge== |
| + | *apt install apparmor apparmor-utils apparmor-profiles apparmor-profiles-extra | ||
| − | + | ==AppArmor-Status prüfen== | |
| − | + | *systemctl status apparmor | |
| + | *aa-status | grep apache2 | ||
| − | + | ==Funktionsfähiges Apache2-Profil erstellen== | |
| − | + | *nano /etc/apparmor.d/usr.sbin.apache2 | |
| − | + | <pre> | |
| + | #include <tunables/global> | ||
| − | + | profile /usr/sbin/apache2 flags=(complain) { | |
| − | + | /usr/sbin/apache2 mr, | |
| + | /etc/apache2/** r, | ||
| + | /var/www/ r, | ||
| + | /var/www/** r, | ||
| + | /run/apache2/** rw, | ||
| + | /var/log/apache2/** rw, | ||
| + | /tmp/** rw, | ||
| + | /dev/null rw, | ||
| + | /dev/log w, | ||
| + | /usr/share/zoneinfo/** r, | ||
| + | /etc/passwd r, | ||
| + | /etc/group r, | ||
| + | /etc/host.conf r, | ||
| + | /etc/nsswitch.conf r, | ||
| + | /etc/resolv.conf r, | ||
| + | /lib/** mr, | ||
| + | /usr/lib/** mr, | ||
| + | /lib64/** mr, | ||
| + | /usr/lib64/** mr, | ||
| + | /lib/x86_64-linux-gnu/ld-*.so mr, | ||
| + | network inet stream, | ||
| + | network inet6 stream, | ||
| + | network inet dgram, | ||
| + | network inet6 dgram, | ||
| + | network netlink raw, | ||
| + | capability net_bind_service, | ||
| + | capability setuid, | ||
| + | capability setgid, | ||
| + | capability sys_chroot, | ||
| + | } | ||
| + | </pre> | ||
| − | + | ==Profil aktivieren (zunächst im Lernmodus)== | |
| − | + | *apparmor_parser -r /etc/apparmor.d/usr.sbin.apache2 | |
| − | + | *aa-complain /etc/apparmor.d/usr.sbin.apache2 | |
| + | *systemctl restart apache2 | ||
| − | == | + | ==Traffic erzeugen und Log beobachten== |
| + | *Im Browser verschiedene Seiten und Funktionen der Website aufrufen | ||
| + | *journalctl -xe | grep DENIED | ||
| − | * | + | ==Profil anpassen und verfeinern== |
| − | + | *aa-logprof | |
| + | *Empfohlene Regeln prüfen und anwenden | ||
| − | * | + | ==Profil in Durchsetzungsmodus setzen== |
| − | + | *aa-enforce /etc/apparmor.d/usr.sbin.apache2 | |
| + | *systemctl restart apache2 | ||
| − | + | ==Beispiel: Zugriff auf benutzerdefiniertes Webroot erlauben== | |
| − | + | Füge im Profil hinzu, wenn z. B. /srv/www genutzt wird: | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | ==Beispiel: Zugriff auf | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
/srv/www/ r, | /srv/www/ r, | ||
/srv/www/** r, | /srv/www/** r, | ||
| − | == | + | ==Beispiel: Schreibzugriffe auf Upload-Verzeichnis erlauben== |
| − | |||
| − | |||
/var/www/html/uploads/ rw, | /var/www/html/uploads/ rw, | ||
/var/www/html/uploads/** rw, | /var/www/html/uploads/** rw, | ||
| − | == | + | ==Fehlersuche== |
| + | *journalctl -xe | grep DENIED | ||
| + | *aa-logprof | ||
| + | *aa-status | ||
| − | * | + | ==Hinweis== |
| − | + | *Das Paket libapache2-mod-apparmor ist veraltet und nicht notwendig. | |
| + | *AppArmor-Module im Apache selbst müssen nicht aktiviert werden. | ||
| − | + | ==Abschluss== | |
| − | + | *aa-enforce /etc/apparmor.d/usr.sbin.apache2 | |
| − | + | *systemctl restart apache2 | |
| − | == | + | *Funktion der Website vollständig prüfen |
| − | |||
| − | * | ||
| − | |||
Aktuelle Version vom 24. Juni 2025, 16:41 Uhr
Absicherung eines Apache2-Webservers mit AppArmor auf Debian
Ziel
- Reduzierung der Angriffsfläche durch Zugriffsbeschränkungen auf Dateisystemebene.
- Der Apache2-Prozess darf nur auf explizit erlaubte Dateien und Verzeichnisse zugreifen.
- Schutz vor Webshells, ungewolltem Zugriff auf /etc/, /root/, etc.
Voraussetzungen
- Debian 12 oder aktuelles Ubuntu-System mit Apache2
- root-Zugriff
Installation der AppArmor-Werkzeuge
- apt install apparmor apparmor-utils apparmor-profiles apparmor-profiles-extra
AppArmor-Status prüfen
- systemctl status apparmor
- aa-status | grep apache2
Funktionsfähiges Apache2-Profil erstellen
- nano /etc/apparmor.d/usr.sbin.apache2
#include <tunables/global>
profile /usr/sbin/apache2 flags=(complain) {
/usr/sbin/apache2 mr,
/etc/apache2/** r,
/var/www/ r,
/var/www/** r,
/run/apache2/** rw,
/var/log/apache2/** rw,
/tmp/** rw,
/dev/null rw,
/dev/log w,
/usr/share/zoneinfo/** r,
/etc/passwd r,
/etc/group r,
/etc/host.conf r,
/etc/nsswitch.conf r,
/etc/resolv.conf r,
/lib/** mr,
/usr/lib/** mr,
/lib64/** mr,
/usr/lib64/** mr,
/lib/x86_64-linux-gnu/ld-*.so mr,
network inet stream,
network inet6 stream,
network inet dgram,
network inet6 dgram,
network netlink raw,
capability net_bind_service,
capability setuid,
capability setgid,
capability sys_chroot,
}
Profil aktivieren (zunächst im Lernmodus)
- apparmor_parser -r /etc/apparmor.d/usr.sbin.apache2
- aa-complain /etc/apparmor.d/usr.sbin.apache2
- systemctl restart apache2
Traffic erzeugen und Log beobachten
- Im Browser verschiedene Seiten und Funktionen der Website aufrufen
- journalctl -xe | grep DENIED
Profil anpassen und verfeinern
- aa-logprof
- Empfohlene Regeln prüfen und anwenden
Profil in Durchsetzungsmodus setzen
- aa-enforce /etc/apparmor.d/usr.sbin.apache2
- systemctl restart apache2
Beispiel: Zugriff auf benutzerdefiniertes Webroot erlauben
Füge im Profil hinzu, wenn z. B. /srv/www genutzt wird:
/srv/www/ r, /srv/www/** r,
Beispiel: Schreibzugriffe auf Upload-Verzeichnis erlauben
/var/www/html/uploads/ rw, /var/www/html/uploads/** rw,
Fehlersuche
- journalctl -xe | grep DENIED
- aa-logprof
- aa-status
Hinweis
- Das Paket libapache2-mod-apparmor ist veraltet und nicht notwendig.
- AppArmor-Module im Apache selbst müssen nicht aktiviert werden.
Abschluss
- aa-enforce /etc/apparmor.d/usr.sbin.apache2
- systemctl restart apache2
- Funktion der Website vollständig prüfen