Erreur Filter failed Cups
Lors d'une mise à jour de la machine Ubuntu, passage depuis 12.04 vers 14.04 développement, le serveur d'impression Cups n'était plus disponible. Malgré la mie à jour des utilitaires HP, le message d'erreur "Filter failed" était systématique.
Cet article présente la cause et la solution trouvée.
Votre avis
Nobody voted on this yet
|
|
Analyse
La première recherche est réalisée dans les logs de Cups, se trouvant par défaut dans le répertoire /var/log/cups
sur une machine Ubuntu. Malheureusement, aucun message explicite n'est trouvé.
Les deuxièmes logs consultées sont celle du système sous /var/log/syslog
. Dans celle-ci, les messages suivants ont été observés:
Dec 31 19:56:47 etienne-server kernel: [61122.876314] type=1400 audit(1388516207.232:61): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/cupsd" name="/etc/ldap/ldap.conf" pid=2471 comm="cupsd" requested_mask="r" denied_mask="r" fsuid=0 ouid=119 Dec 31 19:56:47 etienne-server kernel: [61122.876414] type=1400 audit(1388516207.232:62): apparmor="DENIED" operation="connect" parent=1 profile="/usr/sbin/cupsd" name="/run/slapd/ldapi" pid=2471 comm="cupsd" requested_mask="w" denied_mask="w" fsuid=0 ouid=0 Dec 31 19:56:47 etienne-server kernel: [61122.876783] type=1400 audit(1388516207.232:63): apparmor="DENIED" operation="connect" parent=1 profile="/usr/sbin/cupsd" name="/run/slapd/ldapi" pid=2471 comm="cupsd" requested_mask="w" denied_mask="w" fsuid=0 ouid=0
Le message est explicite, l'application AppArmor refuse l'accès en écriture au fichier /run/slapd/ldapi
. La configuration se trouve dans le fichier /etc/apparmor.d/usr.sbin.cupsd
dont le contenu est:
# vim:syntax=apparmor
# Last Modified: Thu Aug 2 12:54:46 2007
# Author: Martin Pitt <martin.pitt@ubuntu.com>
#include <tunables/global>
/usr/sbin/cupsd {
#include <abstractions/base>
#include <abstractions/bash>
#include <abstractions/authentication>
#include <abstractions/dbus>
#include <abstractions/fonts>
#include <abstractions/nameservice>
#include <abstractions/perl>
#include <abstractions/user-tmp>
capability chown,
capability fowner,
capability fsetid,
capability kill,
capability net_bind_service,
capability setgid,
capability setuid,
capability audit_write,
deny capability block_suspend,
# nasty, but we limit file access pretty tightly, and cups chowns a
# lot of files to 'lp' which it cannot read/write afterwards any
# more
capability dac_override,
# the bluetooth backend needs this
network bluetooth,
# the dnssd backend uses those
network x25 seqpacket,
network ax25 dgram,
network netrom seqpacket,
network rose dgram,
network ipx dgram,
network appletalk dgram,
network econet dgram,
network ash dgram,
/bin/bash ixr,
/bin/dash ixr,
/bin/hostname ixr,
/dev/lp* rw,
deny /dev/tty rw, # silence noise
/dev/ttyS* rw,
/dev/ttyUSB* rw,
/dev/usb/lp* rw,
/dev/bus/usb/ r,
/dev/bus/usb/** rw,
/dev/parport* rw,
/etc/cups/ rw,
/etc/cups/** rw,
/etc/cups/interfaces/* ixrw,
/etc/foomatic/* r,
/etc/gai.conf r,
/etc/papersize r,
/etc/pnm2ppa.conf r,
/etc/printcap rwl,
/etc/ssl/** r,
@{PROC}/net/ r,
@{PROC}/net/* r,
@{PROC}/sys/dev/parport/** r,
@{PROC}/*/net/ r,
@{PROC}/*/net/** r,
@{PROC}/*/auxv r,
@{PROC}/sys/crypto/** r,
/sys/** r,
/usr/bin/* ixr,
/usr/sbin/* ixr,
/bin/* ixr,
/sbin/* ixr,
/usr/lib/** rm,
# backends which come with CUPS can be confined
/usr/lib/cups/backend/bluetooth ixr,
/usr/lib/cups/backend/dnssd ixr,
/usr/lib/cups/backend/http ixr,
/usr/lib/cups/backend/ipp ixr,
/usr/lib/cups/backend/lpd ixr,
/usr/lib/cups/backend/parallel ixr,
/usr/lib/cups/backend/serial ixr,
/usr/lib/cups/backend/snmp ixr,
/usr/lib/cups/backend/socket ixr,
/usr/lib/cups/backend/usb ixr,
# we treat cups-pdf specially, since it needs to write into /home
# and thus needs extra paranoia
/usr/lib/cups/backend/cups-pdf Px,
# third party backends get no restrictions as they often need high
# privileges and this is beyond our control
/usr/lib/cups/backend/* Ux,
/usr/lib/cups/cgi-bin/* ixr,
/usr/lib/cups/daemon/* ixr,
/usr/lib/cups/monitor/* ixr,
/usr/lib/cups/notifier/* ixr,
# filters and drivers (PPD generators) are always run as non-root,
# and there are a lot of third-party drivers which we cannot predict
/usr/lib/cups/filter/** Uxr,
/usr/lib/cups/driver/* Uxr,
/usr/local/** rm,
/usr/local/lib/cups/** rix,
/usr/share/** r,
/{,var/}run/** rm,
/{,var/}run/avahi-daemon/socket rw,
deny /{,var/}run/samba/ rw,
/{,var/}run/samba/** rw,
/{,var/}run/cups/ rw,
/{,var/}run/cups/** rw,
/var/cache/cups/ rw,
/var/cache/cups/** rwk,
/var/log/cups/ rw,
/var/log/cups/* rw,
/var/spool/cups/ rw,
/var/spool/cups/** rw,
# third-party printer drivers; no known structure here
/opt/** rix,
# FIXME: no policy ATM for hplip and Brother drivers
/usr/bin/hpijs Ux,
/usr/Brother/** Ux,
# Kerberos authentication
/etc/krb5.conf r,
deny /etc/krb5.conf w,
/etc/krb5.keytab rk,
/etc/cups/krb5.keytab rwk,
/tmp/krb5cc* k,
# likewise authentication
/etc/likewise r,
/etc/likewise/* r,
# silence noise
deny /etc/udev/udev.conf r,
# Site-specific additions and overrides. See local/README for details.
#include <local/usr.sbin.cupsd>
}
# separate profile since this needs to write into /home
/usr/lib/cups/backend/cups-pdf {
#include <abstractions/base>
#include <abstractions/fonts>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
capability chown,
capability fowner,
capability fsetid,
capability setgid,
capability setuid,
# unfortunate, but required for when $HOME is 700
capability dac_override,
capability dac_read_search,
@{PROC}/*/auxv r,
/bin/dash ixr,
/bin/bash ixr,
/bin/cp ixr,
/etc/papersize r,
/etc/cups/cups-pdf.conf r,
@{HOME}/PDF/ rw,
@{HOME}/PDF/* rw,
/usr/bin/gs ixr,
/usr/lib/cups/backend/cups-pdf mr,
/usr/lib/ghostscript/** mr,
/usr/share/** r,
/var/log/cups/cups-pdf_log w,
/var/spool/cups/** r,
/var/spool/cups-pdf/** rw,
}
Donc les restrictions mises en place ne permettent pas à l'application /usr/sbin/cupsd
d'accéder aux fichiers /etc/ldap/ldap.conf
et /run/slapd/ldapi
.
Mais comme souvent, un point d'entrée a été mise en place afin d'étendre la configuration, à travers l'instruction #include <local/usr.sbin.cupsd>
. Attention, le caractère #
devant l'instruction include
n'est pas utilisé pour démarrer un commentaire. Il ne faut pas le supprimer.
Correctif
Une fois les messages d'erreur identifié, il est aisé d'appliquer un correctif. D'après les deux messages d'erreur, Cups essaye d'accéder aux fichier:
-
/etc/ldap/ldap.conf
en lecture uniquement. -
/run/slapd/ldapi
en écriture uniquement. Le droit de lecture lui sera également appliqué.
Le fichier /etc/apparmor.d/local/usr.sbin.cupsd
est donc modifié pour rajouter les droits d'accès aux fichiers:
# Site-specific additions and overrides for usr.sbin.cupsd.
# For more details, please see /etc/apparmor.d/local/README.
/etc/ldap/ldap.conf r,
/run/slapd/ldapi rw,
Afin que cela soit pris en compte, il faut recharger le service AppArmor:
#sudo service apparmor restart * Reloading AppArmor profiles Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd [ OK ]
Enfin le service Cups doit être redémarré.
#sudo service cups restart cups stop/waiting cups start/running, process 22038
L'impression de la page de test ne présente plus de message d'erreur dans la log système, /var/log/syslog
, et la log page_log, /var/log/cups/page_log
présente le message suivant:
HP_LaserJet_1018 anonymous 56 [31/Dec/2013:23:46:19 +0100] 1 1 - localhost Test Page - -
Le dernier test étant de voir sortir l'impression de l'imprimante.