O SELinux está impedindo o NGINX de escrever via PHP-FPM

6

Estou usando um servidor para escrever em um ponto de montagem do tipo NFS via NGINX usando php-fpm . No primeiro passo, mostra-me o seguinte erro:

2017/01/16 11:32:59 [error] 55463#0: *22 FastCGI sent in stderr: "PHP message: PHP Warning:  mkdir(): Permission denied in /var/www/html/x/x.php on line 75
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 79
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 83
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 87
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 91
PHP message: PHP Warning:  mkdir(): Permission denied in /x/x/x/x/x.php on line 95
PHP message: PHP Warning:  move_uploaded_file(/mnt/x/x/x/x/x/x.z): failed to open stream: No such file or directory in /var/www/html/x/x.php on line 104
PHP message: PHP Warning:  move_uploaded_file(): Unable to move '/tmp/x' to '/mnt/x/x/x/x/x/x.z' in /var/www/html/x/x.php on line 104" while reading response header from upstream, client: IPADDR, server: _, request: "POST /convert/uploadFile HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:", host: "IPADDR", referrer: "http://IPADDR/xjob"

O erro 104 está muito bom, já que não pode mkdir, e por isso não pode mover nada para o diretório.

De qualquer forma, depois disso, pensei que poderia estar ocorrendo devido a SELinux , então verifiquei /var/log/message mas nada foi exibido. Então gussed pode ser logado em audit.log , e assim foi. Aqui estão os registros de /var/log/audit.d/audit.log :

type=AVC msg=audit(1484554859.698:1415): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1415): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=4 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1416): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1416): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1417): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1417): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1418): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1418): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1419): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1419): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1484554859.698:1420): avc:  denied  { add_name } for  pid=55475 comm="php-fpm" name="on_demand" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 tclass=dir
type=SYSCALL msg=audit(1484554859.698:1420): arch=c000003e syscall=83 success=no exit=-13 a0=7ffe8b951890 a1=1ff a2=8 a3=30 items=0 ppid=55471 pid=55475 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)

Eu ficaria muito feliz se alguém pudesse me guiar nesse problema. A propósito, não estou disposto a desabilitar o SELinux desde que fiz muitas coisas com ele.

UPDATE 1

Como @Dimitar disse, aqui está a saída de getsebool -a | grep -i http :

$ getsebool -a | grep -i http

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 --> off
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 --> off
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 --> off
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 --> off
httpd_use_openstack --> off
httpd_use_sasl --> off
httpd_verify_dns --> off
named_tcp_bind_http_port --> off
prosody_bind_http_port --> off

E o contexto dos arquivos é o mesmo do diretório www mostrado abaixo:

drwxr-xr-x. nginx nginx system_u:object_r:httpd_sys_content_t:s0 www

ATUALIZAÇÃO 2

Depois de usar o comando setsebool -P httpd_can_network_connect on como @Dimitar fornecido como resposta, meu audit.log se parece com o seguinte:

ATUALIZAÇÃO3

Arespostadadapor@FarazXresolveumeuproblema,mascomo@Dimitarperguntou,aquiestáoresultadodesealert-a/var/log/audit.d/audit.log>somefile.txt:

*****Plugincatchall(1.41confidence)suggests**************************Ifyoubelievethatphp-fpmshouldbeallowedsetattraccessonthe1395_10_27_jsAdminLog.txtfilebydefault.Thenyoushouldreportthisasabug.Youcangeneratealocalpolicymoduletoallowthisaccess.Doallowthisaccessfornowbyexecuting:#ausearch-c'php-fpm'--raw|audit2allow-Mmy-phpfpm#semodule-imy-phpfpm.ppAdditionalInformation:SourceContextsystem_u:system_r:httpd_t:s0TargetContextsystem_u:object_r:httpd_sys_content_t:s0TargetObjects1395_10_27_jsAdminLog.txt[file]Sourcephp-fpmSourcePath/usr/sbin/php-fpmPort<Unknown>Host<Unknown>SourceRPMPackagesphp-fpm-5.4.16-42.el7.x86_64TargetRPMPackagesPolicyRPMselinux-policy-3.13.1-102.el7_3.7.noarchSelinuxEnabledTruePolicyTypetargetedEnforcingModeEnforcingHostNameSETB0PlatformLinuxSETB03.10.0-327.el7.x86_64#1SMPThuNov1922:10:57UTC2015x86_64x86_64AlertCount1FirstSeen2017-01-1612:42:55IRSTLastSeen2017-01-1612:42:55IRSTLocalID0076ec8b-214b-4379-b9f3-1523f46d6b36RawAuditMessagestype=AVCmsg=audit(1484557975.199:1436):avc:denied{setattr}forpid=55476comm="php-fpm" name="1395_10_27_jsAdminLog.txt" dev="dm-0" ino=963720 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file


type=SYSCALL msg=audit(1484557975.199:1436): arch=x86_64 syscall=chmod success=yes exit=0 a0=7f36808c6cb8 a1=1ed a2=7f367b331100 a3=7f367b3080f0 items=0 ppid=55471 pid=55476 auid=4294967295 uid=995 gid=992 euid=995 suid=995 fsuid=995 egid=992 sgid=992 fsgid=992 tty=(none) ses=4294967295 comm=php-fpm exe=/usr/sbin/php-fpm subj=system_u:system_r:httpd_t:s0 key=(null)

Hash: php-fpm,httpd_t,httpd_sys_content_t,file,setattr

Muito obrigado a todos.

    
por Parsa Samet 16.01.2017 / 09:35

2 respostas

6

setsebool -P httpd_can_network_connect on ativará permanentemente o sinalizador que deve resolver seu problema.

    
por 16.01.2017 / 10:48
4

Eu recomendo que você baixe os seguintes pacotes via yum para que você possa encontrar seus problemas com mais facilidade:

$ yum -y install setroubleshoot-server setools-console

Você pode dar uma olhada neste Link Oficial para mais informações sobre os pacotes do SELinux.

Por outro lado, o valor de link está desativado em seu sistema, e acho que essa seria a razão pela qual você está recebendo erros. Por favor, habilitá-lo usando o seguinte comando desde que você está usando o nfs, e se não corrigir o seu problema, faça como @Dimitar disse e atualize sua pergunta com sealert -a /var/log/audit.d/ audit.log :

$ setsebool -P httpd_use_nfs
    
por 16.01.2017 / 13:12