O nginx php não pode gravar arquivos na máquina CentOS

0

Eu tenho este código PHP:

<?php
$myfile = fopen("testfile.txt", "w")
?>

E as seguintes permissões no meu /usr/share/nginx/htmldiretório

drwxrwxrwx. 3 root root  4096 Nov 20 08:51 .
drwxr-xr-x. 3 root root    17 Nov 18 23:48 ..
-rwxrwxrwx. 1 root root   537 Sep 16 14:56 50x.html
-rwxrwxrwx. 1 root root  1171 Nov 20 03:50 make.php

Mas quando executo o código PHP acima, que está no make.php, não cria o testfile.txt!

O que há de errado aqui? Eu também tentei mudar o usuário para nginxcom o chowncomando, mas ele não funciona.

ctrlz
fonte
Resposta curta: SELinux.
grawity
Preciso instalar isso?
Ctrlz
Oh espere eu encontrei algo como desativá-lo: crypt.gen.nz/selinux/disable_selinux.html
Ctrl Z

Respostas:

0

Em relação ao seu problema e ao SELinux:

A web está repleta de posts de pessoas recomendando desativar o SELinux. É definitivamente a "solução" mais simples, mas não é ideal em um ambiente de produção, pois deixa o servidor mais vulnerável.

Ontem, mergulhei na aprendizagem do SELinux. Achei a seguinte palestra de Thomas Cameron muito útil:

SELinux para Meros Mortais (40min)

Não sei qual distribuição Linux você está usando (e não tenho certeza de quanto, se é que o SELinux varia entre os outros), mas o CentOS fornece um Guia do SELinux .


Introdução Rápida:

Os "contextos" do SELinux são mostrados no formato user:role:type:range. Por padrão, o SELinux é enviado no targetedmodo, o que limita o acesso aos recursos pelo typeatributo.

Você pode acrescentar a -Zbandeira de comandos, como ps, ls, cp, mv, mkdir, netstat, e mais para ver o contexto do SELinux de diferentes recursos.

Para visualizar os contextos SELinux da sua pasta da web, execute:

ls -lZ /usr/share/nginx/html

Para visualizar o contexto do seu nginxprocesso, execute:

ps -auxZ | grep -i nginx

Também existem "booleanos" do SELinux que podem ser ativados / desativados para casos de uso comuns. Para visualizar uma lista de booleanos relacionados a um servidor da Web ( nginxneste caso), execute:

getsebool -a | grep -i httpd

Para atualizar um valor booleano, você pode configurá-lo usando o setseboolcomando Exemplo:

setsebool httpd_read_user_content 1

Eu quero consultar os documentos do SELinux para mais alguns comandos (porque é por isso que eles os colocam lá). Alguns outros comandos úteis:


É sobre onde estou com o meu know-how do SELinux no momento. Eu sei que este é um post antigo, mas espero que isso ajude outras pessoas.

Logan
fonte
0

Ok, então basicamente eu tive que mudar para isso:

SELINUX=permissive

no /etc/selinux/configarquivo Mais informações aqui: Como desativar o SELinux .

Não sei se esta é a melhor solução.

ctrlz
fonte