Quitter le forum et retourner au site

Petit bug/debug de squid 3.5.12 en 16.04

Vous avez un didactiel ou une astuce particulière concernant un logiciel, partagez votre expérience dans cette partie.
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 719
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

Petit bug/debug de squid 3.5.12 en 16.04

Message par le Manchot Masqué »

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

Code : Tout sélectionner

squid -d4
affiche l'erreur

Code : Tout sélectionner

Ipc::Mem::Segment::create failed to shm_open(/squid-cf__metadata.shm): (13) Permission denied
autrement dit, squid n'arrive pas à écrire dans /dev/shm.

Essai 1 : désactivation temporaire de apparmor avec

Code : Tout sélectionner

service apparmor stop 
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

Code : Tout sélectionner

su proxy
touch /dev/shm/aa
ls -l aa
rm /dev/shm/aa
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:

Code : Tout sélectionner

# apparmor_parser -r /etc/apparmor.d/usr.sbin.squid 
Skipping profile in /etc/apparmor.d/disable: usr.sbin.squid
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

Code : Tout sélectionner

usr.sbin.squid -> /etc/apparmor.d/usr.sbin.squid
Il suffit donc d'effacer /etc/apparmor.d/disable/usr.sbin.squid pour régler le problème.
Répondre