Filed Under (Apache, Hardening, colaboração, software livre) by rafaelgomes on 22-10-2009
Como muitos já sabem, os serviços recém instalados, seja pelo source ou gerenciador de repositórios devem sofrer modificações em seus arquivos de configuração, pois muitos de seus parâmetros visam ser o suficiente para o serviço sejam executado de maneira rápida, porém sem muito cuidado com a segurança das informações.

O Debian disponibiliza os pacotes em seu repositórios com algumas configurações que seguem as boas práticas de segurança, porém ainda existem configurações que precisam ser ajustadas. Como é o caso do Apache2 e PHP5 que falaremos nesse post.
Nesse texto iremos apresentar quais os parâmetros devem ser modificados. Seguindo alguns documentos de boas práticas encontrados em buscas pela internet. Não se preocupem, verifiquei cada informação na documentação oficial do Apache e php.
O debian utilizado foi a versão 5, também conhecido como lenny.
Levaremos em consideração, que tudo que não for utilizado deve ser, na medida do possível, removido ou desabilitado.
Vamos começar pelo arquivo /etc/apache2/conf/security
Os parâmetros abaixo descrevem qual o nível de informação será passado pelo Apache para os clientes.
ServerTokens All
ServerSignature On
Modifique para:
ServerTokens Prod
ServerSignature Off
O parâmetro abaixo é apenas utilizado para teste e diagnósticos:
TraceEnable On
Modifique para:
TraceEnable Off
Agora vamos verificar o arquivo /etc/apache2/sites-enable/000-default
O diretório raiz das páginas devem ter a diretriz padrão de bloquear o acesso para todos, ou seja, apenas será exibido aquilo que for estritamente liberado em uma configuração de sites/domínio virtual específico.
Modifique os parâmetros:
Order allow,deny
allow from all
para
Order deny,allow
deny from all
É necessário verificar se não existe o com a permissão allow from all. Nesse caso é necessário remover essa permissão.
Agora vamos a configuração segura do php, no arquivo /etc/php5/apache2/php.ini
Modifique os parâmetros:
Os parâmetros abaixo são referente a informações que não devem aparecer no navegador e somente nos logs da máquina:
display_errors = On
log_errors = Off
Para:
display_errors = Off
log_errors = On
Os parâmetros abaixo são referentes a segurança no serviço php, pois execução da função fopen é bastante usada no scripts que fornecem shell ou roube de informação e a função exec deve ser configurada para apenas um diretório com permissão de modificação apenas para o root, ou seja, o usuário do apache não conseguirá gravar nada nesse diretório sem o intermédio do administrador:
safe_mode = Off
allow_url_fopen = On
safe_mode_exec_dir =
Para
safe_mode = On
allow_url_fopen = Off
safe_mode_exec_dir = “/var/exec”
Não esqueça de executar os comandos abaixo para criar e configurar a permissão correta da pasta:
# mkdir /var/exec
# chmod 755 /var/exec
Caso as aplicações que estarão em seu servidor apache não precisem efetuar uploads de arquivos, é interessante que essa função seja desabilitada:
Mude o parâmetro:
file_uploads = On
Para
file_uploads = Off
Agora vamos configurar as permissões do apache, seguindo a diretiva do mínimo de privilégio necessário:
# chmod 511 /usr/sbin/apache2
# chmod -R 750 /var/log/apache2/
# chmod -R 750 /etc/apache2
# chmod -R 650 /etc/apache2/conf.d
# chown -R :www-data /etc/apache2
Por fim, porém não menos importante, vamos remover os módulos não utilizados pelo seu apache:
Com o comando abaixo poderemos visualizar todos os módulos do apache:
# ls -la /etc/apache2/mods-enabled
Essa escolha é bem particular e depende muito das aplicações que estão alocadas nesse servidor, no meu caso os módulos abaixo foram escolhidos:
authn_file
authz_default
authz_groupfile
authz_user
deflate
Para desabilitar o módulo apenas remova o arquivo correspondente ao módulo escolhido na pasta citada acima.
Para reativar o módulo, caso descubra que o mesmo é necessário digite o comando abaixo:
# a2enmod
Pronto! Essas são toda as minhas recomendações de segurança para o Apache 2 e PHP 5.


Fala Rafael, show de bola as dicas. Irei testar..
vlw.
Att,
Maiquel
[...] Nesse texto iremos apresentar quais os parâmetros devem ser modificados. Seguindo alguns documentos de boas práticas encontrados em buscas pela internet. Não se preocupem, verifiquei cada informação na documentação oficial do Apache e php. O debian utilizado foi a versão 5, também conhecido como lenny.” [referência: techfree.com.br] [...]
Parabéns pelo artigo!!!
Dicas muito boas, vou testar. =D
Muito bom garoto.
Obrigado pelas informações concisas.
Muito legal o artigo…
Dica: Um módulo do apache também pode ser desabilitado com o comando
#a2dismod
Cara, muito bom o tutorial,
mass a unica parte que não consegui fazer funcionar aqui
foi o desbloqueio da função exec()