Proprietário da pasta de sessão php continua mudando


2

Problema

A cada poucas semanas, a pasta da sessão php de uma máquina muda para proprietário, apachemesmo que eu esteja usando o nginx. Isso quebra os aplicativos PHP, por exemplo, phpMyAdmin, com um session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)-Error.

Eu posso corrigi-lo emitindo manualmente sudo chown -R nginx /var/lib/php/session/

Meio Ambiente

  • Máquina virtual com CentOS Linux versão 7.4.1708, yum-cron com instalação automática de atualização de segurança ativada
  • Repositório EPEL instalado
  • Versão nginx: nginx / 1.14.0
  • Versão php: 7.0.29 (PHP-FPM)

detalhes adicionais

  • Isso parece quebrar a cada poucas semanas, no entanto, não sei dizer exatamente quando não usamos esse PMA diariamente. No entanto, ele quebrou esta semana, e /var/log/yum.logposso ver que o nginx foi atualizado esta semana: Apr 18 04:35:53 Aktualisiert: nginx.x86_64 1:1.14.0-1.el7_4.ngx
  • Não consigo encontrar nenhuma menção do usuário apacheno meu /etc/php.ini.
  • Enquanto estiver quebrado, as permissões da pasta são: drwxrwx---. 2 root apache 94 28. Mär 07:49 session

Pergunta, questão

Por que o nginx-updates (automático) mudaria o proprietário da pasta da sessão php, quebrando assim meus aplicativos?


1
de onde você tirou o nginx? EPEL mostra 1:1.12.2-2.el7para mim. Caso contrário, rpm -ql ...nos pacotes e verifique se algum deles possui esse diretório ou procure scripts de pacotes que possam mexer nas permissões. Pode ser outra coisa, portanto, pode ser necessário o monitoramento SystemTap ou sysdig nas chamadas do sistema que envolvem esse diretório.
thrig

Esta máquina não está sob marionetes, mas a história diz que eu peguei diretamente dos meus repositórios via yum install nginx. A pasta da sessão não é mencionada rpm -ql nginx. Onde eu procuraria esses scripts de pacote? É para isso que serve o SystemTap?
22120 Patrick R.

rpm -q --scripts <pkgname>. SystemTap ou sysdig são completamente diferentes e faria (com o código adequado) permitir a autenticação algo quando algo toca/var/lib/php/session
thrig

@ thrig, você estava me apontando na direção certa - o pacote php-fpm redefine a propriedade. Criei novas pastas, mudei a configuração do php para usá-las e restaurei o SELinux. Deseja digitar uma resposta para que eu possa aceitá-la ou devo fazer eu mesma?
Patrick R.

Respostas:


2

existem várias maneiras de abordar esse problema

pesquisa de pacotes

Se houver suspeita de que um pacote esteja causando alguma alteração, inspecione os pacotes para verificar se há algum arquivo em questão; O RPM contém uma %filesseção que detalha para quais arquivos um determinado pacote é autoritário. Isso pode ser consultado com rpm -ql. Por exemplo, uma força bruta para descobrir qual pacote (se houver) possui /etc/passwdpode parecer:

$ rpm -qa | while read p; do rpm -ql $p | grep -q /etc/passwd && echo $p; done
setup-2.8.71-9.el7.noarch

Esse método, no entanto, não encontrará arquivos que são indiretamente modificados por um pacote; O RPM contém scripts que podem executar ações arbitrárias (ou chamar outros bits arbitrários de código que executam a alteração que está sendo pesquisada). Esses scripts podem ser listados com rpm -q --scriptse então esse código inspecionado. Pode ajudar a limitar a pesquisa apenas aos pacotes instalados recentemente (verifique os logs para saber quais são), pois pode haver muito código para analisar.

depuração do kernel

O kernel do linux oferece vários recursos de depuração baseados no kernel que podem ser instruídos para informar se algo toca em um determinado arquivo. Com esse método, o código adequado para SystemTapou sysdigo que quer que seja a instalação e você esperaria que isso lhe dissesse qual processo modificou o arquivo. Por exemplo, sysdigse algo está modificando um diretório em que você está interessado:

# sysdig "fd.directory contains /var/lib/php"

deve mostrar detalhes (que podem ser configurados com o -psinalizador) nas chamadas do sistema que envolvem esse diretório. Esse comando precisará ser executado em algum lugar, possivelmente em uma tmuxsessão ou como um serviço personalizado, para que seja iniciado automaticamente até que o código incorreto seja encontrado. (Além disso, pode ser necessário limitar a saída de depuração, pois a depuração do kernel pode produzir grandes quantidades de informações se a pesquisa for muito ampla e o comando permanecer em execução por longos períodos de tempo.)


Obrigado novamente. No meu caso específico, era o pacote php-fpm que simplesmente espera que o php seja executado com o usuário apache e redefine o proprietário das pastas na atualização. Corrigi isso criando novas pastas de sessão e declarando-as no arquivo de configuração.
Patrick R.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.