Pare o servidor de executar scripts sem o bit de execução

2

Nós temos um servidor web rodando o Lighttpd no FreeBSD.

Alguns dos nossos clientes exigem acesso FTP ao seu servidor. Com a maioria deles, chrooting-los com o daemon FTP em um diretório de "arquivos" para que eles possam fazer upload de fotos de seus filhos ou algo mais, e então temos apenas Lighty configurado para não acionar FastCGI se uma solicitação for feita para um arquivo em esse diretório. Mas pelo menos um cliente precisa de acesso a toda a webroot. Ok, então eu configurei o daemon FTP para umask 022 todos os arquivos enviados (assim as permissões se tornam rw-r - r--) e pensei que era muito inteligente.

No entanto, chegou ao meu conhecimento (felizmente, não da maneira mais difícil) que os scripts PHP são executáveis no servidor se o arquivo tiver apenas o conjunto de bits de leitura relevante; o bit de execução (ou falta dele) é ignorado. O que há com isso? Assumi que o bit de execução teria que ser definido para que o arquivo fosse, você sabe, executado…

Existe apenas uma maneira de impedir que Lighty e / ou PHP executem scripts sem executar bits? (Eu já tentei o #lighttpd no Freenode, mas eles não acharam que era possível.)

    
por Garrett Albright 11.11.2009 / 23:37

2 respostas

1

O bit de execução não tem nada a ver com o servidor HTTP. Os scripts CGI precisam disso porque o servidor HTTP usa exec (3) (e amigos) para executá-los. Os scripts PHP, por outro lado, são lidos e executados porque a configuração do servidor da web permite que eles o façam.

  • Portanto, sua escolha rápida é remover o read bit dos scripts PHP que você quer que o servidor HTTP não executar.

  • Leia o manual de configuração do seu servidor web e descubra se você pode tê-lo seletivamente (por diretório) executar scripts PHP (eu faço executar lighttpd e não sei se é possível ou não).

por 11.11.2009 / 23:54
1

IIRC se você executar PHP através de CGI + PHPsuExec / suphp (ou FastCGI + suExec / suphp) é muito exigente quanto a permissões (e propriedade) por padrão, embora eu não tenha certeza de quanto disso é devido a PHP ou PHPsuExec / suphp - é por isso que alguns (incluindo meu próprio servidor da Web compartilhado) são executados dessa maneira, e não através do módulo do Apache. Ele exige que os scripts tenham o bit de execução para usuário definido e não serão executados se um dos bits de gravação em grupo ou de outra gravação for definido com verificações semelhantes para os diretórios nos quais o script está localizado.

Eu estou usando o Apache nas máquinas que eu uso o PHP, então eu não poderia dizer como configurar isso no lighttpd.

    
por 12.11.2009 / 00:06