Petit bug/debug de squid 3.5.12 en 16.04
Publié : ven. 19 août 2016, 15:36
Ci-après un petit compte rendu de debogage sur squid, un logiciel qui permet de créer un cache mémoire HTTP sur un serveur, en économisant les requêtes multiples et donc la bande passante réseau. Ce post s'adresse clairement à des administrateurs, l'intérêt de squid étant quasiment nul pour un particulier...
Le contexte :
Après la mise à jour de la 14.04 à 16.04, squid ne veut plus démarrer. Un
affiche l'erreur
autrement dit, squid n'arrive pas à écrire dans /dev/shm.
Essai 1 : désactivation temporaire de apparmor avec
et teste : ça ne change rien. Etrange : le dossier /dev/shm est pourtant bien en rwxrwxrwt, comme le /tmp, ce qui signifie que n'importe qui devrait pouvoir écrire dedans. Mais on va quand même tester en utilisateur standard pour essayer de mieux comprendre ce qui se passe.
Essai 2 : test en utilisateur
Squid fonctionne avec l'utilisateur et le groupe proxy. Dans /etc/passwd, on active le /bin/bash pour l'utilisateur proxy et on fait le simple test
Là tout fonctionne normalement : le fichier est bien créé, puis effacé. Bien entendu après ce test, on remet le /usr/sbin/nologin pour l'usage proxy dans /etc/passwd.
Analyse
Il est curieux que le noyau autorise l'écriture dans /dev/shm via bash, mais pas via le binaire de squid, ce qui laisse à penser qu'apparmor est bien en cause quelque part.
On essaie donc de lancer le profil apparmor de squid à la main via:
Et là le message est clair : le profil de squid est tout simplement désactivé ! Dans ce contexte, le noyau utilise donc ses permissions internes par défaut, lesquelles restreignent apparemment l'écriture dans /dev/shm, ce qui aboutit à notre message d'erreur.
La désactivation des profils sous apparmor repose sur de simples liens symboliques. Un petit ls dans /etc/apparmor.d/disable/ et l'on trouve
Il suffit donc d'effacer /etc/apparmor.d/disable/usr.sbin.squid pour régler le problème.
Le contexte :
Après la mise à jour de la 14.04 à 16.04, squid ne veut plus démarrer. Un
Code : Tout sélectionner
squid -d4
Code : Tout sélectionner
Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
Essai 1 : désactivation temporaire de apparmor avec
Code : Tout sélectionner
service apparmor stop
Essai 2 : test en utilisateur
Squid fonctionne avec l'utilisateur et le groupe proxy. Dans /etc/passwd, on active le /bin/bash pour l'utilisateur proxy et on fait le simple test
Code : Tout sélectionner
su proxy
touch /dev/shm/aa
ls -l aa
rm /dev/shm/aa
Analyse
Il est curieux que le noyau autorise l'écriture dans /dev/shm via bash, mais pas via le binaire de squid, ce qui laisse à penser qu'apparmor est bien en cause quelque part.
On essaie donc de lancer le profil apparmor de squid à la main via:
Code : Tout sélectionner
# apparmor_parser -r /etc/apparmor.d/usr.sbin.squid
Skipping profile in /etc/apparmor.d/disable: usr.sbin.squid
La désactivation des profils sous apparmor repose sur de simples liens symboliques. Un petit ls dans /etc/apparmor.d/disable/ et l'on trouve
Code : Tout sélectionner
usr.sbin.squid -> /etc/apparmor.d/usr.sbin.squid