Apparmor Apache2: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Die apparmor-utils sollten installiert sein=
+
=Absicherung eines Apache2-Webservers mit AppArmor auf Debian=
*apt-get install apparmor-utils
+
 
=Installation dem Apache2 Modules=
+
==Ziel==
*apt install libapache2-mod-apparmor
+
* Reduzierung der Angriffsfläche durch Zugriffsbeschränkungen auf Dateisystemebene.
=Aktivieren des Moduls=
+
* 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
 +
 
 +
<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
 
*aa-enforce /etc/apparmor.d/usr.sbin.apache2
=Konfiguration von Apache2=
 
*a2enmod mpm_prefork
 
*a2enmod apparmor
 
 
*systemctl restart apache2
 
*systemctl restart apache2
  
=Quellen=
+
==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

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