AppArmor ist ein Mandatory Access Control (MAC)-System für Linux, das es ermöglicht, Prozesse gezielt in ihren Berechtigungen zu beschränken. Anders als klassische Unix-Dateirechte definiert AppArmor, welche Dateien, Verzeichnisse, Netzwerkports oder IPC-Objekte ein Prozess nutzen darf. Für Webserver wie Nginx, Apache oder PHP-FPM bietet AppArmor eine zusätzliche Sicherheitsebene, ohne dass die Komplexität unüberschaubar wird. In diesem Tutorial lernen Einsteiger, IT-Studierende und Junior Network Engineers praxisnah, wie AppArmor-Profile für den Web Stack erstellt, getestet und gepflegt werden.
Grundlagen von AppArmor
AppArmor arbeitet mit sogenannten Profilen, die bestimmte Prozesse isolieren. Jedes Profil legt fest, auf welche Ressourcen ein Prozess zugreifen darf. Standardmäßig liefert AppArmor bereits vordefinierte Profile für viele gängige Dienste.
Modi von AppArmor
- Enforce: Das Profil wird strikt angewendet und blockiert unzulässige Zugriffe.
- Complain: Verstöße werden protokolliert, aber nicht blockiert. Ideal für Tests.
- Disabled: Das Profil wird nicht geladen.
sudo aa-status
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
AppArmor-Profile für Webserver verstehen
Profile bestehen aus Pfad- und Rechteangaben. Typische Syntax:
/pfad/zu/datei r,
/pfad/zu/verzeichnis/** rwk,
network inet stream,
r: lesenw: schreibenx: ausführenk: mmap mit ausführbarem Codenetwork: Zugriff auf Netzwerkprotokolle
Beispiel: Nginx-Standardprofil
/usr/sbin/nginx {
# Leserechte auf Webinhalte
/var/www/html/** r,
# Schreibrechte für Logs
/var/log/nginx/** rw,
# Netzwerkzugriff
network inet stream,
}
Profile aktivieren und testen
Neue oder angepasste Profile müssen in AppArmor geladen werden. Standardmäßig liegen die Profile in /etc/apparmor.d/.
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
sudo systemctl restart apparmor
sudo aa-status
Für Testzwecke kann ein Profil in den Complain-Modus versetzt werden, um zu prüfen, welche Aktionen blockiert würden:
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
Fehleranalyse mit AppArmor
Wenn ein Webserver durch AppArmor blockiert wird, erscheinen Einträge in /var/log/syslog oder /var/log/kern.log:
tail -f /var/log/syslog | grep DENIED
Ein typisches Problem ist, dass Nginx oder PHP-FPM nicht auf Upload-Verzeichnisse oder temporäre Verzeichnisse zugreifen kann:
Mar 7 12:34:56 server kernel: [12345.678901] audit: type=1400 audit(1678181696.123:456): apparmor="DENIED" operation="open" profile="/usr/sbin/nginx" name="/var/www/html/uploads/file.tmp" pid=1234 comm="nginx" requested_mask="w" denied_mask="w" fsuid=33 ouid=33
Profile anpassen
Um Webserver korrekt zu isolieren, muss das Profil erweitert werden:
# Schreibrechte für Upload-Verzeichnis hinzufügen
/var/www/html/uploads/** rw,
# PHP-Temp-Verzeichnis
/var/lib/php/sessions/** rw,
Nach Änderungen das Profil erneut laden:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
sudo systemctl reload nginx
Best Practices für Web Stack Profile
- Profile im Complain-Modus testen, bevor sie enforced werden.
- Nur notwendige Verzeichnisse für Schreibzugriff freigeben.
- Logs regelmäßig prüfen, um neue DENIED-Meldungen zu erkennen.
- Für Multi-Tenant-Umgebungen separate Profile pro Website/Projekt verwenden.
- Temporäre Änderungen mit
aa-complainoderchroottesten, dauerhafte Änderungen in Profilen dokumentieren.
Integration mit Docker
Für containerisierte Webanwendungen können AppArmor-Profile direkt beim Start des Containers gesetzt werden:
docker run --security-opt apparmor=nginx-profile -v /var/www/html:/usr/share/nginx/html:Z nginx
Das :Z sorgt dafür, dass die Volume-Labels korrekt gesetzt werden, sodass der Container nur die erlaubten Pfade nutzen kann.
Audit und Maintenance
Regelmäßige Überprüfung der Logs hilft, neue Anforderungen zu erkennen. Bei wiederkehrenden Problemen können Profile modular angepasst werden:
sudo aa-logprof
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
Audit-Tools wie aa-logprof werten die Logs aus und schlagen Anpassungen der Profile vor.
Zusammenfassung
AppArmor bietet eine zusätzliche Sicherheitsebene für den Web Stack, ohne die Komplexität von SELinux. Durch gezieltes Setzen von Profilen für Nginx, Apache und PHP-FPM lassen sich Webanwendungen sicher betreiben. Die wichtigsten Schritte sind:
- Profile im Complain-Modus testen
- Nur notwendige Schreib- und Ausführungsrechte vergeben
- Netzwerkzugriffe auf erforderliche Ports beschränken
- Logs regelmäßig prüfen und Profile anpassen
- Integration mit Containern berücksichtigen
Mit diesem Ansatz bleibt der Web Stack flexibel, performant und sicher – ideal für Einsteiger, IT-Studierende und Junior Network Engineers, die in produktiven Umgebungen arbeiten.
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

