2016-11-03 10 views
2

PHP exec 명령을 사용하여 lpr -P printer_name /var/www/html/somefile.pdf을 발행했지만 RHEL 시스템 업데이트 (7.2-7.3) 후에 selinux가 이러한 요청을 차단하기로 결정했습니다.시스템 업데이트 후 php에서 인쇄 할 수 없습니다. (PHP를 통해 exec 사용)

시간 -> 목 십일 3

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 

다음 PHP로부터 상기 exec 명령에 대응하는 감사 로그에 표시 : 파일

SELinux의 권한 인쇄로 보내지 15시 7분 2초 2016

유형 = PATH의 MSG = 감사 (1478200022.446 : 5151) : 항목 = 0 이름 = "은/etc/컵/lpoptions"아이 노드 = 134,317,708 DEV = FD : 03 모드 = 0100644,515,ouid = 0 ogid = 7의 rdev = 00 : 00 OBJ = system_u : object_r : cupsd_rw_etc_t : S0 OBJTYPE = NORMAL

TYPE = CWD의 MSG = 감사 (1478200022.446 : 5151) : CWD = "은/var/www /에서 HTML "

TYPE = SYSCALL MSG = 감사 (1478200022.446 : 5151) : 아치 = c000003e 시스템 콜 = 2 개 성공 = YES 출구 = 5 A0 = 7fff26837c70 A1 = 0, A2 = 0 A3 = 9 개 항목 = 1 PPID = 19,397 PID = 46644 auid = 4294967295 uid = 48 gid = 48 euid = 48 suid = 48 fsuid = 48 egid = 48 sgid = 48 fsgid = 48 tty = (없음) ses = 4294967295 comm = "lpr" exe ​​= "/ usr/bin/lpr.cups "subj = system_u : system_r : httpd_t : s0 key = (null)

유형 = AVC msg = 감사 (1478200022.446 : 5151) : 에 대해 avc : {open}을 거부했습니다. pid = 46644 comm = "lpr"path = "/ 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 =

형식을 파일 = AVC의 MSG = 감사 (1478200022.446 : 5151) : AVC : 거부 {읽을} PID = 46644 통신에 대한 = 이름 = "lpoptions"DEV = "DM-3"이노 = 134,317,708 scontext = system_u "lpr의"system_r : httpd_t : S0 tcontext = system_u : object_r : cupsd_rw_etc_t : S0 인 TClass =

비슷한 얻기 파일 오류 재치 다른 execwkhtmltopdf에 대한 명령.

여기에 현재 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 

이 모든 RHEL 7.2에서 7.3으로 내 시스템을 업데이트 냠 후 즉시 시작했다.

거부의 원인은 무엇입니까?그 명령을 발행

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 

및 AM :

yum install setroubleshoot setools 

그런 다음 출력은 다음과 같이 수정 제안

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

실행 :

+1

인쇄하려는 파일 형식은 무엇입니까? – cmorrissey

+1

나는 pdf를 보내고있다. 예 :'lpr -P printer_name/var/www/html/somefile.pdf'. 명령 줄에서 루트로 실행하면 파일이 인쇄됩니다. 'exec' 함수를 사용하여 PHP 스크립트를 통해 실행하면 .. 위의 로그 데이터와 함께 실패합니다. –

+0

아파치 데몬에'lpr_exec_t' 컨텍스트가 적용되어 있지 않은 것 같습니다 (예를 들어 센드 메일과 달리 이것에 대한 단일 부울은 없습니다). 가장 빠른 (가장 안전하지 않은) 수정은'sudo semanage permissive -a lpr_t' 일 수 있습니다. 자세한 내용 (및 컨텍스트 적용 방법)은 [이 게시물] (http://danwalsh.livejournal.com/55324.html)을 참조하십시오. – bishop

답변

1

나는 help troubleshoot에 몇 가지 추가 SELinux를 도구를 설치, 종료 이제 내 PHP 응용 프로그램에서 다시 인쇄 할 수 있습니다.