3 votes

Apache ne peut pas accéder au journal des logs de mod_security

J'ai un serveur Apache2 qui ne peut pas accéder au journal mod-security :

prim@x.x.x.x:~$ apachectl -V
AH00526: Erreur de syntaxe à la ligne 196 de /etc/modsecurity/modsecurity.conf :
ModSecurity : Impossible d'ouvrir le fichier journal d'audit : /var/log/apache2/modsec_audit.log
Action '-V' échouée.
Le journal d'erreurs Apache peut contenir plus d'informations.
prim@x.x.x.x:~$ sudo ls -la /var/log/apache2/modsec_audit.log
-rw-rwxrwx 1 root www-data 101792 Oct 22 16:37 /var/log/apache2/modsec_audit.log

Je suis un peu perplexe, car tout le monde (propriétaire, groupe, autres) a des droits pour ouvrir le fichier journal.

edit:

prim@x.x.x.:/var/log/unattended-upgrades$ sudo -u www-data touch /var/log/apache2/modsec_audit.log
touch: impossible de toucher '/var/log/apache2/modsec_audit.log' : Permission refusée

Cela devient encore plus étrange...

edit2:

prim@x.x.x.x:/var/log/unattended-upgrades$ sudo ls -la /var/log/apache2/
total 1015752
drw-r--r--  2 root adm          12288 Oct 22 15:55 .

edit3:

ls -la /var/log|grep apache
drw-r--r--  2 root     adm       12288 Oct 22 15:55 apache2

2voto

ILIV Points 165

Vous ne pouviez pas toucher modsec_audit.log, c'est-à-dire

sudo -u www-data touch /var/log/apache2/modsec_audit.log

parce que le répertoire de logs appartient à root:adm. www-data n'est pas root, et très probablement, il n'appartient pas au groupe adm. Le groupe et les autres ne peuvent que lire dans votre répertoire de logs. Seul root:adm peut réellement écrire.

J'ai rencontré le même problème sous CentOS 7 où le processus principal httpd est démarré en tant que root puis il engendre un certain nombre de processus enfants qui s'exécutent en tant que apache:apache. Sur Debian/Ubuntu, cela doit être le même cas, sauf pour la différence entre apache et www-data.

Ici, sous CentOS 7, je ne peux exécuter apachectl, httpd, etc. qu'en tant que root. Sinon, la même "Erreur de syntaxe" se produit. De même, cela se produit uniquement si mod_security est installé.

Essentiellement, apachectl/httpd/etc. appelle mod_security en tant qu'utilisateur non privilégié pour vérifier sa configuration pour des erreurs de syntaxe mais, mod_security, prend visiblement la sécurité au sérieux :) et échoue à ouvrir les fichiers de logs au nom de votre utilisateur appelant qui n'a pas la permission de le faire.

Alors, exécutez simplement

sudo apachectl -V

Alternativement, vous pourriez

  • ajouter l'utilisateur prim au groupe adm (en supposant que les fichiers de logs sont possédés par root:adm et que le Groupe est autorisé à lire et/ou à écrire)
  • chown root:prim vos fichiers de logs (c'est une très mauvaise idée mais cela est listé ici comme une façon de démontrer que c'est un problème basique de permissions de fichiers).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X