PHP SuExec
De Wiki ArgoHost.net
Tabela de conteúdo |
Php SuExec
Introdução
Esta página vai 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
- DONO
- -400------ dono pode ler = r
- -020------ dono pode escrever = w
- -001------ dono pode executar = x
- GRUPO
- ----400--- grupo pode ler = r
- ----020--- grupo pode escrever = w
- ----001--- grupo pode executar = x
- TODOS
- -------400 todos podem ler = r
- -------020 todos podem escrever = w
- -------001 todos podem executar = x
Juntando as permissões, você chegará a um número que corresponde com a permissão, veja os exemplos abaixo:
- exemplo¹: Permissão total (usuário/grupo/todos)
-rwxrwxrwx "arquivo" ou 777 "arquivo"
- exemplo²: Permissão total (usuário) e somente leitura (grupo e todos)
-rwxr-xr-x "arquivo" ou 755 "arquivo"
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 as 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órios 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 será utilizado o usuário do cliente, e não nobody. Isso ajuda também para 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 arqiuvos.
.Htaccess x Php.ini
PHP com módulo do Apache: pode-se manipular o PHP usando .htaccess - uma vez que este é um recurso do Apache.
PHP com SuExec: não pode mais usar .htaccess, pois o Apache não mais entenderá as flags do PHP e os valores. Ao contrário, quando PHP roda com SuExec, você precisa criar seu próprio arquivo de inicialização do PHP, um arquivo chamado php.ini que funciona mais ou menos igual ao .htaccess, é 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
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
Problemas Comuns
É importante que entenda que você ainda pode usar .htaccess para uma varidade 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.
PHPSuexec - se seus scripts estão reportando 500 Internal Server Errors, por favor verifique:
- Certifique-se que diretórios não possuam permissões maiores que 755
- Certifique-se que as permissões dos arquivos PHP não são maiores que 755 (padrão é 644).
- 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.
php, phpsuexec, .htaccess, php.ini


