PHP unlink () excluir usuário do arquivo não tem permissão para

2

Um pouco de um tiro longo aqui, mas pensei em ver se alguém tinha uma correção para isso:

Estou tendo um problema em que a função PHP unlink () está sendo capaz de excluir com êxito um arquivo, mesmo que as permissões explícitas de negação de NTFS tenham sido aplicadas ao arquivo em questão. Eu até tentei remover todas as permissões de arquivos NTFS e similares - o mesmo resultado e isso me deixou perplexo.

FACTOS

  • Eu tenho o Apache 2.2.22 executando o PHP 5.4.5 no Windows Server 2008 R2

  • Apache / PHP estão sendo executados sob o usuário EXODUS \ wwwuser, comprovado pela resposta a 'whoami' na linha de comando da execução do script PHP - por exemplo:

    echo exec('whoami');

    retorna EXODUS\wwwuser

  • O arquivo 'deleteme.txt' é criado por um membro do grupo 'BUILTIN \ Administrators', as permissões de negação explicita são aplicadas ao arquivo para EXODUS \ wwwuser - no entanto, a função unlink () do PHP exclui com êxito o arquivo. arquivo.

  • Eu tentei a mesma coisa removendo a herança de permissões neste arquivo, removendo todas as permissões (incluindo SYSTEM) e aplicando negação explícita 'FULL CONTROL' a EXODUS \ wwwuser - adivinhe, unlink () ainda exclui o arquivo ...

  • EXODUS \ wwwuser é um membro de BUILTIN \ Users, no entanto, isso não indica que isso afetaria a situação.

  • O arquivo não pode ser excluído pelo EXODUS \ wwwuser quando conectado de forma interativa.

  • Quando os arquivos são escritos pelo PHP, o proprietário do arquivo é 'EXODUS \ wwwuser'

Alguém tem alguma opinião sobre isso?

Como eu poderia fornecer pastas / arquivos que não podem ser apagados em um local através do unlink () do PHP que estão dentro de uma área 'open_basedir' definida?

Estou usando o 'open_basedir' para impedir que scripts adulterem arquivos fora do declarado open_basedir - isso parece estar funcionando bem - por exemplo: não é possível excluir arquivos que estão fora do local definido por 'open_basedir'.

    
por James Bertschik 08.08.2012 / 09:59

3 respostas

1

Oi, se o PHP for capaz de excluir um arquivo, mesmo que as permissões digam o contrário. Isso provavelmente significa que o Apache está sendo executado como usuário com privilégios de administrador.

Você sempre pode tentar auditar a pasta nas janelas para garantir que todas as permissões de pastas filhas sejam redefinidas se o problema acima não for o problema.

    
por 09.08.2012 / 13:36
0

Eu não uso PHP no Windows, então não posso ter certeza de seu código subjacente, mas quando escrevo qualquer forma de função de exclusão, a primeira coisa que faço é tentar remover as permissões existentes. Apenas talvez unlink() esteja fazendo o mesmo. Se você tiver o log apropriado ativado, poderá ver esse comportamento nos logs de eventos do Windows, portanto, faça o check-in.

    
por 09.08.2012 / 15:13
0

A única maneira de isso ser possível é se o servidor Apache não estiver sendo executado sob o usuário que você diz ser. Ative a auditoria nessa pasta e teste novamente para ver qual usuário está excluindo o arquivo.

Além disso, quem é o proprietário do arquivo?

    
por 09.08.2012 / 15:32