Problema
A cada poucas semanas, a pasta da sessão php de uma máquina muda para proprietário, apache
mesmo 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.log
posso 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
apache
no 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:1.12.2-2.el7
para 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.yum install nginx
. A pasta da sessão não é mencionadarpm -ql nginx
. Onde eu procuraria esses scripts de pacote? É para isso que serve o SystemTap?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
Respostas:
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
%files
seção que detalha para quais arquivos um determinado pacote é autoritário. Isso pode ser consultado comrpm -ql
. Por exemplo, uma força bruta para descobrir qual pacote (se houver) possui/etc/passwd
pode parecer: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 --scripts
e 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
SystemTap
ousysdig
o que quer que seja a instalação e você esperaria que isso lhe dissesse qual processo modificou o arquivo. Por exemplo,sysdig
se algo está modificando um diretório em que você está interessado:deve mostrar detalhes (que podem ser configurados com o
-p
sinalizador) nas chamadas do sistema que envolvem esse diretório. Esse comando precisará ser executado em algum lugar, possivelmente em umatmux
sessã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.)fonte