[PHP] O que é phpsuexec?



[PHP] O que é phpsuexec?

Mensagempor Patty » Dom Mai 30, 2010 1:46 am

Aqui vamos explicar permissões de arquivo/diretório, diferença de rodar PHP como um módulo do apache e rodando o PHP como CGI com Suexec. Mostraremos também alguns problemas comuns quando roda o PHP como CGI com Suexec.

Permissões de arquivos

0400 dono pode ler
0200 dono pode escrever
0100 dono pode executar
0040 grupo pode ler
0020 grupo pode escrevera
0010 grupo pode executar
0004 todos podem ler
0002 todos podem escrever
0001 todos podem executar

Juntando as permissões, você chegará a um número que corresponde com a permissão. Por exemplo: 400+200+100+40+20+10+4+2+1=777 -> usuário/grupo/todos podem ler/escrever/executar

O que é PHPSuexec?

PHPSuexec é o termo abreviado usado para descrever o PHP como CGI com Suexec. Rodar o PHP como CGI com Suexec cria um ambiente muito mais seguro comparado com rodar o PHP como módulo do apache. Abaixo vamos descrever as diferenças de rodar ambas as formas de PHP, com exemplos de como a segurança difere nas duas.

PHP como um módulo do Apache

Quando o PHP roda como um módulo do Apache, os processos do PHP serão rodados pelo usuário/grupo conhecido como "nobody". Por exemplo, quando um arquivo PHP precisa ser escrito/removido por outro arquivo PHP, isso será feito sob o usuário "nobody". Para que isso seja possível, você precisa especificar permissões do arquivo/diretório para 777 - que significa que ele pode ser escrito/executado/lido pelo usuário/grupo/todos. Isto é inseguro, pois você não apenas liberou o servidor de ler/escrever/executar seu arquivo, mas todas as pessoas que compartilham o servidor também.

Devido às condições acima, quando um arquivo PHP cria ou faz upload de um novo arquivo em sua conta, o novo arquivo terá como dono o usuário "nobody". Se você logar por FTP na sua conta, todos os arquivos que possuem o "nobody" como dono não poderão ser reescritos/apagados. Você teria que contatar o suporte para mudar o dono para seu usuário.

PHP como CGI com Suexec

Quando o PHP roda como CGI com Suexec, os arquivos PHP trabalham sob seu usuário/grupo. Os arquivos PHP não mais precisarão perder permissões para funcionar. Agora eles necessitarão de permissões. Setar seu diretório ou arquivo para permissão 777 vai causar o erro 500 Internal Server Error. Isto acontece para proteger seus arquivos PHP de serem alvos de abuso por fontes externas.

Sob PHPSuexec seus diretórios e arquivos PHP não podem ter permissões maiores que 755 (ler/escrever/executar pelo seu usuário, ler/executar pelo grupo.todos). Uma vez que você é dono dos seus próprios arquivos, seus scripts podem funcionar em qualquer diretório que você criar e não podem ser manipulados por outros usuários, inclusive o "nobody". Isto é possível pois todo o processo do Apache com PHP terá utilizado o usuário do cliente, e não nobody. Isso ajuda também a detectar spammers no servidor.
Agora, quando um arquivo PHP cria ou faz upload de um novo arquivo na sua conta, o novo arquivo terá seu usuário como dono. Você não mais precisa se preocupar com estranhos lendo/escrevendo seus arquivos.

.htaccess

Quando o PHP roda como um módulo do Apache, você pode manipular o PHP usando .htaccess, uma vez que o .htaccess é um recurso do Apache. Quando o PHP roda como CGI, você não pode mais fazer isso, pois o Apache não mais entenderá as flags do PHP e os valores. Pelo contrário, quando PHP roda como CGI, você precisa criar seu próprio arquivo de inicialização do PHP. Este arquivo é chamado php.ini -- php.ini funciona mais ou menos igual ao .htaccess -- este é um arquivo simples que será usado para manipular valores diferentes dos padrões do servidor.

Para que entenda melhor como ambos funcionam em relação ao PHP, vamos exemplificar o .htaccess e php.ini abaixo:

.htaccess
php_value magic_quotes_gpc on
php.ini
magic_quotes_gpc = on

Existe uma diferença principal em utilizar .htaccess vs php.ini . O arquivo .htaccess pode ser colocado no diretório-raiz e fazer efeito para todos os subdiretórios com apenas um arquivo; php.ini não funciona deste jeito. O arquivo php.ini precisa ser colocado em todo diretório e subdiretório que precisa alterar as diretivas. Isto é o ponto negativo em usar PHPSuexec, todavia, nós esperamos que no futuro o PHP possa ser escrito para manipular o arquivo php.ini em um cenário mais simples.

Por último, existe uma diretiva usada no .htaccess que precisa ser alterada para que funcione sob PHPSuexec. A diretiva ForceType precisa ser mudada para SetHandler. Por exemplo:
PHP como Módulo do Apache - .htaccess
ForceType application/x-httpd-php

PHP como CGI com Suexec - .htaccess
SetHandler application/x-httpd-php

É importante que entenda que você ainda pode usar .htaccess para uma variedade de funções do apache, como diretivas do mod_rewrite. proteção de diretórios, etc. A única diferença é que você não mais pode manipular diretivas do PHP.

Problemas comuns experienciados com PHPSuexec se seus scripts estão reportando 500 Internal Server Errors

Verifique o seguinte:
- Certifique-se que nenhum diretório possua permissões maiores que 755
- Certifique-se que as permissões dos arquivos PHP não são maiores que 755 - 644 é o padrão.
- Certifique-se que você não tem nenhum arquivo .htaccess que contém flags/valores PHP ou diretivas ForceType. Estas diretivas precisam ser manipuladas de forma diferente, como explicado acima.
Patty
______________________________________________________________
Módulos adicionais e gateways de pagamento Cielo e Rede
para osCommerce e WHMCS

Certificados SSL por apenas R$ 89,00/ano
http://www.cybernetfx.com
Patty

Avatar de usuário
Administrador
Administrador
 
Mensagens: 1155
Data de registro: Ter Mai 04, 2010 1:31 am

Retornar para PHP / ASP / Cold Fusion / Perl

Quem está online

Usuários vendo este fórum: Nenhum membro registrado online e 2 visitantes

cron
Shared Web Hosting by HostDime