Невозможно выполнить печать с PHP после обновления системы (с помощью exec через php)


Я использовал команду PHP exec для выдачи lpr -P printer_name /var/www/html/somefile.pdf, но после обновления системы RHEL (с 7.2 по 7.3) selinux решил начать блокировать эти запросы.

Разрешения Selinux для файла, отправляемого на печать:

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

В журнале аудита появляется следующее, соответствующее приведенной выше команде exec из PHP:

Время ->Чт нояб. 3 15:07:02 2016

Тип=ПУТЬ msg=аудит(1478200022.446:5151): элемент=0 имя="/etc/cups/lpoptions" индекс=134317708 dev= fd:03 режим=0100644 ouid=0 ogid=7 rdev=00:00 объект=system_u:объект_r:cupsd_rw_etc_t:s0 тип объекта=ОБЫЧНЫЙ

Тип=CWD msg=аудит(1478200022.446:5151): cwd="/var/www/html"

Тип=СИСТЕМНЫЙ ВЫЗОВ msg=аудит(1478200022.446:5151): arch=c000003e системный вызов=2 успех = да выход= 5 a0= 7fff26837c70 a1= 0 a2=0 a3= 9 предметов = 1 ppid = 19397 pid=46644 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(нет) ses=4294967295 связь= "лнр" exe="/usr/bin/lpr.cups" subj=system_u:system_r:httpd_t:ключ s0=(null)

Тип=AVC msg= аудит (1478200022.446:5151): avc: отказано {открыто} для pid=46644 comm="lpr" путь="/etc/cups/lpoptions" dev="dm-3" ino=134317708 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:объект_r:cupsd_rw_etc_t:s0 tclass=файл

Тип=AVC msg= аудит(1478200022.446:5151): avc: отказано {чтение} для pid=46644 comm="lpr" имя="lpoptions" dev="dm-3" ino=134317708 scontext=system_u:system_r:httpd_t:s0 tконтекст=system_u:объект_r:cupsd_rw_etc_t:s0 tclass=файл

Получение аналогичных ошибок с помощью другой команды exec для wkhtmltopdf.

Вот текущая конфигурация 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

Все это началось сразу после того, как yum обновил мою систему с RHEL 7.2 до 7.3.

Что является причиной отказа?

Author: a coder, 2016-11-03

1 answers

В итоге я установил некоторые дополнительные инструменты SELinux, чтобы помочь в устранении неполадок:

yum install setroubleshoot setools

Затем побежал

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

На выходе были предложены следующие изменения:

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

Выдал эти команды и теперь снова могу печатать из своего PHP-приложения.

 1
Author: a coder, 2016-11-03 20:28:04