PHP não pode salvar sessões devido a erro de permissão

3

Eu sei que essa pergunta deve ter sido feita (e respondida) antes, mas não consigo encontrar uma solução para o meu problema em nenhuma dessas perguntas. É um pouco estranho ... O problema é que meus scripts PHP (e meu servidor Apache) não podem gravar em pastas no meu sistema. De jeito nenhum.

Por exemplo, recebo o seguinte erro ao executar um script:

Fatal error: Uncaught exception 'Zend_Session_Exception' with message 'Zend_Session::start() - /var/www/subdomains/vmb/vendor/zendframework/zendframework1/library/Zend/Session.php(Line:482): Error #2 session_start(): open(/var/www/subdomains/vmb/application/../var/session/sess_ingph33ir4shr1e60kkifp37s7, O_RDWR) failed: Permission denied (13)

Eu tenho um VPS com o CentOS 7, Apache2.4, PHP5.6 (que roda com o apache php mod) e algumas outras coisas. O Apache é executado como usuário apache e apache do grupo (conforme definido no arquivo httpd.conf). Eu configurei o session_path em /etc/php.ini e /etc/httpd/conf.d/php.conf a /tmp/phpsessions e chown'd / chmod 'nesta pasta como apache: apache 777. O exemplo acima armazena sessões em outra pasta (que também é chown'd / chmod 'como apache: apache 777), mas recebo o mesmo erro para outras pastas.

Então meu servidor apache é executado como apache: apache, eu pego as pastas para o apache: apache que eu precisei e mesmo com as permissões do 777, o Apache não consegue gravar nessas pastas.

Você já viu algo assim? Eu não tenho antes ...

    
por redelschaap 10.09.2014 / 22:14

2 respostas

3

supondo que permissões e propriedades sejam aceitáveis, acredito que isso esteja relacionado a SELinux .

De maneira rápida e suja: ... supondo que você esteja recebendo Permissive durante a execução de getenforce , tente desabilitar SELinux executando setenforce 0 e acessar seu script novamente. Se funcionar, ele será SELinux , a partir daí você pode deixá-lo desativado (não recomendado) ou ligá-lo novamente executando setenforce 1 e verificar seu /var/log/audit/audit.log e trabalhar para a solução final.

    
por 10.09.2014 / 23:21
0

Abandonar o SELinux por causa de alguns desafios de configuração parece ser uma má escolha. Em vez disso, sugiro usar um pouco de tempo para conhecê-lo e procurar uma solução adequada. Nesse caso, parece que uma solução poderia ser definir o contexto do arquivo link (observe 'w' para gravação) na pasta que você precisa gravar. Lembre-se de que o selinux fcontext usa expressões regulares para os destinos, de forma que seu comando provavelmente se pareça com isso:

semanage fcontext --add \
    -t httpd_sys_rw_content_t \
    '/var/www/subdomains/vmb/var/session(/.*)?'

A expressão regular aplica a regra de contexto a todos os arquivos no diretório de sessão, bem como ao próprio diretório.

Aplique a política (necessária apenas uma vez) ao diretório e a quaisquer arquivos nele:

restorecon -R /var/www/subdomains/vmb/var/session

Poderia ser várias outras coisas, mas pelo menos isso funcionou para mim.

    
por 13.03.2016 / 20:19