2016-11-03 3 views
2

J'ai utilisé la commande PHP exec pour lancer lpr -P printer_name /var/www/html/somefile.pdf mais après une mise à jour du système RHEL (7.2 à 7.3), selinux a décidé de commencer à bloquer ces requêtes.Impossible d'imprimer depuis PHP après mise à jour du système (avec exec via php)

autorisations SELinux du fichier envoyé à imprimer:

ls -lZ /var/www/html/somefile.pdf 
-rw-r-----. apache webdev system_u:object_r:httpd_sys_rw_content_t:s0 /var/www/html/somefile.pdf 

suivant apparaît dans le journal d'audit, ce qui correspond à la commande exec ci-dessus de PHP:

de temps> Jeu 3 novembre 15:07:02 2016

type = PATH msg = audit (1478200022,446: 5151): item = 0 name = "/ etc/cups/lpoptions" inode = 134317708 dev = fd: 03 Mode = 0100644 Ould = 0 ogid = 7 rdev = 00: 00 obj = system_u: object_r: cupsd_rw_etc_t: s0 objtype = NORMAL

type = CWD msg = audit (1478200022,446: 5151): cwd = "/ var/www/html "

type = sYSCALL msg = audit (1.478.200.022,446: 5151): arch = c000003e syscall = 2 succès = oui sortie = 5 a0 = 7fff26837c70 a1 = 0 a2 = 0 a3 = 9 articles = 1 ppid = 19397 pid = 46644 auid = 4294967295 uid = 48 gid = 48 euid = 48 suid = 48 fsuid = 48 egid = 48 sgid = 48 fsgid = 48 tty = (aucun) ses = 4294967295 comm = "lpr" exe ​​= "/ usr/bin/lpr.cups "subj = system_u: system_r: httpd_t: touche s0 = (null)

type = AVC msg = audit (1478200022.446: 5151): avc: refusé {open} pour pid = 46644 comm = "lpr" chemin = "/ etc/cups/lpoptions" dev = "dm-3" ino = 134317708 scontext = system_u: system_r: httpd_t: s0 tcontext = system_u: object_r: cupsd_rw_etc_t: s0 tclass = fichier

type = AVC msg = audit (1.478.200.022,446: 5151): avc: Denied {read} pour pid = 46644 comm = "lpr" name = "lpoptions" dev = "dm-3" ino = 134317708 scontext = system_u: system_r: httpd_t: s0 tcontext = system_u: object_r: cupsd_rw_etc_t: s0 tclass = fichier

Obtenir similaires erreurs wit h une autre commande exec pour wkhtmltopdf.

Voici le config actuelle SELinux:

# getsebool -a | grep httpd 
httpd_anon_write --> off 
httpd_builtin_scripting --> on 
httpd_can_check_spam --> off 
httpd_can_connect_ftp --> off 
httpd_can_connect_ldap --> off 
httpd_can_connect_mythtv --> off 
httpd_can_connect_zabbix --> off 
httpd_can_network_connect --> on 
httpd_can_network_connect_cobbler --> off 
httpd_can_network_connect_db --> off 
httpd_can_network_memcache --> off 
httpd_can_network_relay --> off 
httpd_can_sendmail --> on 
httpd_dbus_avahi --> off 
httpd_dbus_sssd --> off 
httpd_dontaudit_search_dirs --> off 
httpd_enable_cgi --> on 
httpd_enable_ftp_server --> off 
httpd_enable_homedirs --> off 
httpd_execmem --> off 
httpd_graceful_shutdown --> on 
httpd_manage_ipa --> off 
httpd_mod_auth_ntlm_winbind --> off 
httpd_mod_auth_pam --> off 
httpd_read_user_content --> off 
httpd_run_ipa --> off 
httpd_run_preupgrade --> off 
httpd_run_stickshift --> off 
httpd_serve_cobbler_files --> off 
httpd_setrlimit --> off 
httpd_ssi_exec --> on 
httpd_sys_script_anon_write --> off 
httpd_tmp_exec --> off 
httpd_tty_comm --> off 
httpd_unified --> off 
httpd_use_cifs --> off 
httpd_use_fusefs --> off 
httpd_use_gpg --> off 
httpd_use_nfs --> on 
httpd_use_openstack --> off 
httpd_use_sasl --> off 
httpd_verify_dns --> off 

Tout cela a commencé immédiatement après la mise à jour yum mon système de RHEL 07/02 à 07/03.

Quelle est la cause du refus?

+1

Quel est le type de fichier que vous essayez d'imprimer? – cmorrissey

+1

J'envoie un pdf. Ex: 'lpr -P nom_imprimante/var/www/html/somefile.pdf'. Si je l'exécute sur la ligne de commande en tant que root, le fichier s'imprime. Si je l'exécute via un script PHP en utilisant la fonction 'exec' .. il échoue avec les données de journal ci-dessus. –

+0

Je suppose que votre contexte Apache n'a pas le contexte 'lpr_exec_t' appliqué (il n'y a pas de booléen pour cela, contrairement à sendmail par exemple). Le correctif le plus rapide (le moins sûr) peut être 'sudo semanage permissive -a lpr_t'. Voir aussi [cet article] (http://danwalsh.livejournal.com/55324.html) pour plus de détails (et comment appliquer des contextes). – bishop

Répondre

1

Je fini d'installer des outils supplémentaires pour SELinux à help troubleshoot:

yum install setroubleshoot setools 

puis a couru

sealert -a /var/log/audit/audit.log 

La sortie a proposé les modifications suivantes:

ausearch -c 'lpr' --raw | audit2allow -M my-lpr 
semodule -i my-lpr.pp 
ausearch -c 'wkhtmltopdf-amd' --raw | audit2allow -M my-wkhtmltopdfamd 
semodule -i my-wkhtmltopdfamd.pp 

émis ces commandes et je suis maintenant capable d'imprimer à partir de mon application PHP à nouveau.