
đ Aussi en: English · Deutsch · Español
â ïž Attention, cher humain (ou bot) :
Cet article est actuellement obsolÚte et mérite une bonne réécriture.
Certaines parties ne sont peut-ĂȘtre plus exactes, complĂštes ou Ă jour avec les derniĂšres rĂ©alitĂ©s techniques.
Une version entiĂšrement mise Ă jour et plus dĂ©taillĂ©e arrive bientĂŽtâą.
TL;DR : lecture Ă vos risques et pĂ©rils de geek â aucune garantie, aucune promesse, juste des vibes. đ€
Faire tourner Apache avec AppArmor sous Debian 12 nâa pas besoin dâĂȘtre un casse-tĂȘte. Oubliez mod_apparmor, oubliez les « hats » et ne vous aventurez pas dans le terrier des modules dynamiques. Nous allons sĂ©curiser notre serveur web avec un profil AppArmor statique, simple et facile Ă maintenir â Ă la maniĂšre des geeks.
đĄïž Quâest-ce quâAppArmor et pourquoi sây intĂ©resser ?
AppArmor est un module de sĂ©curitĂ© Linux qui restreint ce Ă quoi chaque application peut accĂ©der â fichiers, sockets, ressources systĂšme. Il sâappuie sur des profils par programme pour dĂ©finir les rĂšgles dâaccĂšs. Si un processus tente de faire quelque chose qui ne lui est pas permis, AppArmor peut le journaliser ou le bloquer. Cela limite lâimpact des exploits et des erreurs. Par exemple, mĂȘme si Apache est compromis, il ne pourra ni lire ni Ă©crire en dehors des rĂ©pertoires qui lui sont attribuĂ©s. AppArmor est lĂ©ger, plus simple Ă gĂ©rer que SELinux et parfaitement adaptĂ© aux serveurs Linux verrouillĂ©s.
đŻ Objectif
- â
Pas de
mod_apparmor - â Pas de « hats » par virtualhost
- â Juste un profil AppArmor statique tout simple
- â
Apache avec Nextcloud dans
/var/www/html/nextcloud - â
Stockage des données dans
/data - â
PHP-FPM via
/run/php/php8.2-fpm.sock
đ§© Le profil AppArmor
Placez ce fichier ici :
/etc/apparmor.d/usr.sbin.apache2
# AppArmor profile for Apache
#include <tunables/global>
profile /usr/sbin/apache2 {
# Apache binary and required libraries
/usr/sbin/apache2 mr,
/lib/** mr,
/lib64/** mr,
/usr/lib/** mr,
# Apache configuration
/etc/apache2/** r,
# Web root (Nextcloud)
/var/www/html/nextcloud/** r,
# Nextcloud data directory
/data/** rw,
# PHP-FPM socket communication
/run/php/php8.2-fpm.sock rw,
# Logging
/var/log/apache2/ rw,
/var/log/apache2/** rwk,
# Required capabilities
capability net_bind_service,
capability setuid,
capability setgid,
# OpenSSL configuration
/etc/ssl/openssl.cnf r,
# Stream socket access
network inet stream,
network inet6 stream,
network unix stream,
# System configuration files
/etc/ld.so.cache r,
/etc/gai.conf r,
/etc/nsswitch.conf r,
/etc/passwd r,
/etc/group r,
# Datagram and raw network sockets
network inet dgram,
network inet6 dgram,
network netlink raw,
network unix dgram,
# DNS and hostname resolution
/etc/host.conf r,
/etc/hosts r,
/run/systemd/resolve/resolv.conf r,
# Timezone data
/usr/share/zoneinfo/Etc/UTC r,
/usr/share/zoneinfo/Europe/Berlin r,
# IPv6 configuration
/proc/sys/net/ipv6/conf/all/disable_ipv6 r,
# Random and zero devices
/dev/urandom r,
/dev/zero rw,
/dev/null rw,
# Shared memory
/dev/shm/** rwk,
# SSL certificates (Let's Encrypt)
/etc/letsencrypt/archive/nextcloud.example.com/fullchain1.pem r,
/etc/letsencrypt/archive/nextcloud.example.com/privkey1.pem r,
/etc/letsencrypt/live/nextcloud.example.com/fullchain.pem r,
/etc/letsencrypt/live/nextcloud.example.com/privkey.pem r,
/etc/letsencrypt/** r,
# Diffie-Hellman parameters
/etc/ssl/certs/dhparam.pem r,
# MIME type detection
/etc/mime.types r,
# Kernel configuration access
/proc/sys/kernel/ngroups_max r,
# Apache runtime PID directory
/run/apache2/** rwk,
# Allow signaling systemd (for notify/reload etc.)
signal peer=unconfined,
signal (receive) peer=/lib/systemd/systemd,
}
đ Astuce : le profil est en mode complain afin de journaliser les violations au lieu de les bloquer. Passez en mode enforce dĂšs que vous ĂȘtes sĂ»r quâil fonctionne.
sudo aa-enforce /etc/apparmor.d/usr.sbin.apache2đ§ DĂ©ployer avec Ansible
Si vous utilisez Ansible, voici comment déployer le profil (en supposant que le fichier se trouve dans files/usr.sbin.apache2) :
- name: Upload AppArmor profile for Apache
copy:
src: files/usr.sbin.apache2
dest: /etc/apparmor.d/usr.sbin.apache2
owner: root
group: root
mode: '0644'
- name: Reload AppArmor profile
command: apparmor_parser -r /etc/apparmor.d/usr.sbin.apache2
notify: Restart Apache
Et nâoubliez pas le handler :
- name: Restart Apache
service:
name: apache2
state: restartedđ Aide-mĂ©moire AppArmor
Besoin dâune rĂ©fĂ©rence rapide pour gĂ©rer AppArmor ? Voici une liste pratique des commandes courantes pour inspecter, gĂ©rer et dĂ©boguer AppArmor sur les systĂšmes basĂ©s sur Debian.
đ STATUS & INFO sudo aa-status # Show loaded profiles and their mode (enforce/complain) sudo apparmor_status # Same as above (older syntax, still valid) đȘ” VIEW LOGS sudo journalctl -k | grep -i apparmor # Kernel-level logs for AppArmor denials sudo dmesg | grep -i apparmor # Alternative way to see recent denials đŠ INSTALL APPARMOR TOOLS sudo apt install apparmor-utils # Installs tools like aa-enforce, aa-complain, etc. âïž PROFILE MANAGEMENT sudo aa-enforce /etc/apparmor.d/PROFILE # Enforce mode: block everything not explicitly allowed sudo aa-complain /etc/apparmor.d/PROFILE # Complain mode: only log violations, donât block sudo aa-disable /etc/apparmor.d/PROFILE # Disable a profile completely sudo apparmor_parser -r /etc/apparmor.d/PROFILE # Reload a profile after editing đ TEMPORARILY DISABLE APPARMOR (until reboot) sudo systemctl stop apparmor # Stops AppArmor service â disables all active profiles đ ENABLE APPARMOR sudo systemctl start apparmor # Starts AppArmor and loads profiles sudo systemctl restart apparmor # Reloads all profiles đ« PERMANENTLY DISABLE APPARMOR (via GRUB) sudo nano /etc/default/grub # Add: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash apparmor=0" sudo update-grub sudo reboot # AppArmor will be disabled after reboot
đ En rĂ©sumĂ©
Cette configuration vous donne un profil AppArmor statique pour Apache, sans modules dynamiques ni dĂ©pendances supplĂ©mentaires. Juste un simple fichier de rĂšgles pour verrouiller votre serveur web. Câest geek. Câest propre. Et câest une couche de dĂ©fense de plus dans votre stack.





