Sunteți pe pagina 1din 25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

Frum INFO
O Frum INFO um espao aberto para discusso de tecnologia. http://info.abril.com.br/forum/

Implementando servidor de aplicaes PHP com Zend Framework


http://info.abril.com.br/forum/viewtopic.php?f=156&t=8342

Implementando servidor de aplicaes PHP com Zend Framework


por cleysinhonv

Pgina 1 de 1

Enviado: 18 Mai 2010

Implementando servidor de aplicaes PHP utilizando Zend Framework


Esse mega artigo aborda todos os conceitos tcnicos e prticos para a implementao de um servidor de aplicaes PHP utilizando framework Zend, incluindo deteco de intruso e entre outros conceitos. Vale a pena conferir. Sobre o documento: Este documento foi elaborado com o objetivo de documentar o processo de implementao de um servidor de aplicaes PHP, abordando de forma conceitual e tcnica dos procedimentos de instalao e configurao de vrios softwares envolvidos nos processos, portanto, esse documento no recomendvel para pessoas que buscam informaes rpidas, pois um documento geral que tenta abordar de forma ampla o processo desde o incio da implementao at o pleno estgio de produo.

Originalmente postado em: http://www.vivaolinux.com.br/artigo/Imp ... Framework/


ndice 1. Introduo 2. Sobre o Zend Framework 3. Particionamento 4. Instalao do Servidor Web 5. Habilitando o mdulo mod_rewrite 6. Habilitando o mdulo mod_userdir 7. Instalando Zend Framework 8. Testando Zend Framework 9. Padres de diretrios de aplicaes do Zend Framework 10. Padres de diretrios para aplicaes do Zend Framework 11. Script para a criar a estrutura de diretrio do MVC 12. Configurando restrio de acesso 13. Configurando Virtual Host 14. Padronizando o formato de registro em arquivos de log 15. Suporte a conexes seguras com SSL

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

1/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

16. Configurando exibio de erros 17. Liberando acesso 17.1 Liberando acesso ftp 17.2 Liberando acesso ssh 18. Rotinas de Backup 19. Ferramenta para deteco de intruso (Opcional) 20. Acelerando o PHP (Opcional) 21. Consideraes finais 21.1 Sobre o documento 21.2 Sobre o autor 21.3 Referncia Bibliogrfica 1. Introduo Este documento tem por objetivo explicar o processo de instalao de um Servidor Web utilizando o Apache, sendo assim, sero usados os softwares que denominaram o Servidor LAMP (Linux, Apache, Mysql, PHP). Est sendo implementado conforme as exigncias da DSI (Diviso de Sistemas de Informao), que consistir em utiliz-lo para a realizao de testes com o Zend Framework. Sero utilizados softwares livres e de cdigo aberto, sendo aqui mostrado a forma de instalao e configurao dos mesmos. Sero utilizados os softwares Apache que atualmente est na verso 2.2.9-10+lenny4, php na verso 5.2.6.dfsg.1-1+lenny3, mysql na verso 5.0.51a-24+lenny2 e distribuio Linux derivada do Debian. Em complementao sero instalados o software de comunicao do php5 com mysql chamado php5-mysql que se encontra na verso 5.2.6.dfsg.1-1+lenny3 e phpmyadmin se por ventura for necessrio administrar o banco de dados via web. 2. Sobre Zend Framework O Zend Framework foi concebido no incio de 2005 enquanto muitos novos frameworks, tais como Ruby on Rails e Spring Framework, estavam ganhando popularidade na comunidade web development. Ao mesmo tempo, nenhum framework amplamente usado tem sido disponibilizado para a comunidade PHP para preencher completamente necessidades de desenvolvimento web similares. Os projetistas do Zend Framework buscaram combinar caractersticas de uso final e rapid application development (RAD) desses novos frameworks com a simplicidade, abertura e praticidade do mundo real que altamente valorizada na comunidade PHP. O Zend Framework est licenciado sob Open Source Initiative (OSI) approved New BSD License, e todos os contribuidores de cdigo devem assinar um Contributor License Agreement (CLA) baseado no Apache Software Foundations CLA. O licenciamento e as polticas de contribuio foram estabelecidas para frustrar quaisquer questes de propriedade intelectual por usurios ZF comerciais. (http://www.wikipedia.org) 3. Particionamento O particionamento uma das preocupaes que ns iremos tratar de forma cautelosa, pois o mesmo deve ser elaborado conforme a necessidade da equipe que ir usar o diretrio, bem como as pessoas responsveis pelo desenvolvimento dos sistemas e os administradores dos servidores que se preocupam com as questes de confiabilidade, integridade e disponibilidade, o que ocasionar facilidade de manipulao dos diretrios e backups rotineiros. Neste caso, usamos um diretrio /boot para armazenar as informaes referentes

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

2/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

inicializao do sistema operacional, pois em caso de perda de setores da MBR (Master Boot Record), ser possvel recuper-los em tempo hbil. Para este diretrio no h necessidade de uma grande quantidade de espao, pois os arquivos que o compem so pequenos e em pequena quantidade. O diretrio raiz (/) o diretrio utilizado pela maior parte do sistema operacional, portanto preciso de uma quantidade considervel de espao para os arquivos do sistema. Tambm importante ressaltar a questo das bases de dados caso o sistema ou a aplicao que est trabalhando necessite de uma pequena base de dados, pode-se deix-la no diretrio raiz mesmo. Ao usar bases de dados muito grandes, o ideal seria utilizar compartilhamentos de discos via rede usando tecnologia de armazenamento sofisticadas, como SAN (Storage rea Network) ou NAS (Network Attached Storage). Escolhe-se o diretrio /home para tratarmos das questes de segurana e termos uma melhor forma de lidar com elas, entendendo que o mdulo mod_userid ser usado para direcionar o diretrio /home/usurio/public_html como se fosse o clssico diretrio /var/www que o Apache utiliza, porm toda a sua aplicao permanece pblica para o usurio, o que pode ocasionar um risco no contexto da segurana. Usando o diretrio public_html somente a interface (pgina principal) do sistema ficar acessvel ao apache, os arquivos que tornam as pginas dinmicas ficaro em um diretrio protegido. 4. Instalao do Servidor Web O processo de instalao se dar por meio de linha de comando unix. Todos os softwares sero instalados em um s comando simultneo. No momento da instalao do mysql, o instalador perguntar a senha de acesso administrativo, portanto, importante definir uma senha previamente. Segue abaixo os comandos para a instalao do servidor Web. # apt-get install apache2 php5 mysql-server php5-mysql php5-dev phpmyadmin php5-sybase make Para testar o funcionamento do Apache, acesse em seu navegador a url: http://localhost ou IP do computador, ser mostrado o conteudo da pgina com os seguinets dizeres, It works!, sendo este o indicativo que o sevidor est funcionando. 5. Habilitando o mdulo mod_rewrite O mdulo mod_rewrite tem como funo reescrever a url para o Apache, podendo assim proporcionar melhor segurana. H dua formas de habilitar esse mdulo, usando o comando a2enmod ou criando um link simblico do diretrio /etc/apache2/mods-available/ para o diretrio /etc/apache2/mods-enable. Abaixo segue o passo a passo com os comandos para habilit-lo. Habilitando o mdulo usando o comando a2enmod # a2enmod rewrite && sudo /etc/init.d/apache2 force-reload Habilitando o mdulo usando o comando link simblico # cd /etc/apache2/mod-enabled # ln -s /etc/apache2/mods-available/rewrite.load . # /etc/init.d/apache2 force-reload Falando um pouco do mod_rewrite, seu uso em servidores web tem aumentado, por

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

3/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

proporcionar ao usurio e ao desenvolvedor melhor acessibilidade e usabilidade. Por esta razo, o uso desse mdulo tornou-se uma prtica louvvel em grandes sistemas web e grandes portais, sendo que sua configurao se d pelo arquivo chamado .htaccess. 6. Habilitando o mdulo mod_userdir Uma das formas de tratar a segurana do sistema e acidentes referentes a manuteno de sistemas utilizar o modulo mod_userdir. Com ele podemos disponibilizar somente arquivos pblicos no diretrio de trabalho do apache, que por sua vez no interferem na estrutura do sistema ou portal. Quando habilitado, ele possibilita que o apache direcione ou aponte o diretrio de trabalho de /var/www (diretrio clssico do Apache) para o /home do usurio que deseja armazenar as aplicaes, ser necessrio criar um diretrio chamado public_html. Esse diretrio conter somente arquivos pblicos. Juntamente com o mdulo mod_rewrite, haver um maior controle do diretrio de trabalho e reescrio de url. Para habilitar o mdulo userid usaremos o mesmo processo de instalao do mdulo rewrite, da seguinte forma: Habilitando o mdulo usando o comando a2enmod # a2enmod userdir && sudo /etc/init.d/apache2 force-reload Habilitando o mdulo usando o comando link simblico # cd /etc/apache2/mod-enabled # ln -s /etc/apache2/mods-available/useris.load . # /etc/init.d/apache2 force-reload Vale ressaltar que no arquivo /etc/apache2/mods-available/userdir.conf, podemos modificar o nome do diretrio public_html que o padro do mdulo mod_userdir.c. No diretrio preferido para armazenar os arquivos pode-se usar o nome sistema ou portais ou nome do site. Segue um exemplo abaixo: <IfModule mod_userdir.c> UserDir public_html UserDir disabled root 7. Instalando Zend Framework O processo de instalao do Zend bastante simples, embora deva ser levada em considerao o padro adotado para desenvolvimento de sistemas ou em qual o diretrio ser feita a instalao, portanto isso pode influenciar no padro de instalao e na escolha do pacote a ser instalado. No site oficial do Zend Framework existem duas opes de pacotes do software: uma super completa (full) com exemplos de sistemas prontos desenvolvidos com Zend e algumas bibliotecas extras e outra contendo um pacote mnimo (minimal) com bibliotecas necessrias para o desenvolvimento de sistemas. Nesta implementao usaremos somente a verso completa. Os pacotes de software que compem o Zend Framewok podem ser adquiridos atravs do site do projeto (http://www.zend.com/community/downloads), que lhe permitir escolher entre a verso completa (Full) e a verso mnima (minimal), faa o download da verso completa em seguida, ser necessrio verificar os diretrios include path, para se fazer isso podemos verificar o arquivo php.ini, que se encontra no diretrio /etc/php5/apache2/. Dentro do arquivo, procure por Paths and Directories. Logo abaixo, perceber que o diretrio include padro do php5 o /usr/share/Zend que, embora seja padro esse diretrio poder ser

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

4/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

mudado com a indicao do caminho desejado no parmetro de configurao include_path. Exemplo 1 Trecho de configurao do arquivo php.ini // Estas linhas esto aproximadamente na linha de numero 486 ;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ; Paths and Directories ; ;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ; UNIX: "/path1:/path2" ;include_path = ".:/usr/share/Zend" ; Windows: "\path1;\path2" ;include_path = ".;c:\php\includes" Aps descoberto ou indicado o novo diretrio include_path podemos descompactar o arquivo, aps descompactado precisa-se indicar o diretrio (pasta) Zend - /library/Zend - que contm as bibliotecas para o diretrio indicado no include_path, aps esse procedimento necessrio reiniciar o apache e verificar se o framework foi instalado corretamente. Caso tenha optado pelo pacote completo (full), aps descompact-lo, pode-se encontrar exemplos que utilizam funes e padres do Zend Framework. Instalao do Zend Framework //Copiar o arquivo para o diretrio /usr/share/Zend # cp ZendFramework-1.9.6.tar.gz /usr/share/Zend ou # cp ZendFramework-1.9.6minimal.tar.gz /usr/share/Zend // Entrar no diretrio # cd /usr/share/Zend // Descompactar arquivo (minimal) # tar -xvzf ZendFramework-1.9.6minimal.tar.gz Ou // Descompactar arquivo (full) # tar -xvzf ZendFramework-1.9.6.tar.gz // Renomear o diretrio #mv ZendFramework-1.9.6 ZendFramework

8. Testando Zend Framework O diretrio utilizado para trabalhos das aplicaes o /home/usuario/public_html, portanto, necessrio cri-lo. No necessrio que todos os aquivos permaneam neste

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

5/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

diretrio. Podemos criar um diretrio com o nome da aplicao e fazer um link simblico do arquivo responsvel por apresentar a pgina dentro do public_html, esse processo pode minimizar tentativas de ataques, como falha de restrio de acesso url ou testes maliciosos com a mesma. Para realizarmos o teste usaremos um script do prprio Zend Framework que disponibilizei no link http://www.vivaolinux.com.br/script/Con ... cas-na-Web, pode-se fazer o download e salvar o arquivo direto no diretrio public_html. Para acessar o arquivo ser necessrio colocar a url padro para acesso ao apache, seguido do perfil do usurio corrente ~usuario, e por fim o nome do arquivo. Caso tudo tenha sido feito corretamente, aparecer em seu navegador um motor de busca como mostra a figura 1. Abaixo segue uma ilustrao dos procedimentos a serem tomados. Preparando para teste com funes do Zend Framework // Copiar o arquivo yahoo-multi-search.php para /home/usuario/public_html // Testar os script e conferir figura1 http://localhost/~usuario/yahoo-multi-search.php // Sugesto de estrutura home | | usurio | | ___|___ || || | public_html || | > Arquivos pblicos Link simblico dos arquivos pblicos Sistemas/Portais | | > Arquivos privados > Arquivos pblicos > bilbiotecas // Criar link simblico ln -n /home/usuario/aplicacoes/index.php /home/usuario/public_html

Figura 1 Se houver algum erro, algum problema com as bibliotecas do Zend ou alguma funo que esteja escrita de forma incorreta, um erro ser retornado indicando a funo ou sugerindo a include_path padro. Warning: include() [function.include]: Failed opening 'foooooooo.php' for inclusion (include_path='.:/usr/share/Zend:/usr/share/pear') in /home/usuario/public_html/index.php on line 2

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

6/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

9. Padres de diretrios para aplicaes do Zend Framework importante seguir um padro de diretrios que possa se encaixar dentro de um padro que por sua vez, determinado pela equipe de desenvolvimento, e neste caso especifico Zend Framework segue o padro MVC (Model View Controller). Esse padro pode ser ilustrado na figura abaixo a seguir. Esse padro orientado para separar a lgica da aplicao da lgica de exibio, dessa forma evita-se que o usurio no tenha acesso a camada de controle diretamente.

Cada aplicao a ser desenvolvida possuir diretrios pblicos, que podero estar acessveis aos clientes e diretrios que sero usados para fazer a persistncia e controle de fluxo. Portanto o padro de diretrios se dar da seguinte forma: 1.application - configs - controllers - models - views 2.library 3.public 4.testes Com percebemos, o diretrio application responsvel por garantir todo o fluxo de controle da aplicao, nele contm os subdiretrios que validam o conceito de camadas do padro MVC. Abaixo faremos um rpido comentrio a respeito desse diretrios e a funo que cada um desempenha para o pleno funcioamento da aplicao que est sendo desenvolvida. Config O diretrio configs responsvel por configurar a aplicao em desenvolvimento, essas configuraes implicam em gerenciar as aplicaes em desenvolvimento, testes e produo. As diretivas de configurao desse arquivo podem ser relativas a exibio de erros da aplicao, estas so aplicadas em todos os contextos, bem como, a diretiva [development : production] , [testing : production] e [staging : production]. O arquivo <application/configs/aplication.ini> foi idealizado para que se defina os todos os parmetros de inicializao do aplicativo Zend, do prprio PHP ou outros mdulos do PHP. Por exemplo, o Zend Tools, aquele aplicativo para gerar a estrutura dos novos aplicativos Zend, define os parmetros para mostrar ou no as mensagens de falhas do PHP, o caminho da biblioteca Zend a ser utilizada, o nome da classe Bootstrap (motor de arranque) do aplicativo e o caminho de onde estariam os arquivos com as classes dos controles do aplicativo, todos necessrios na inicializao. comum colocar neste arquivo tambm informaes de conexes com base de dados, por exemplo, como o nome da base de dados e a senha. Claro que seria possvel definir todos esses parmetros em <public/index.php> e em <application/Bootstrap.php>, ou em outros arquivos, mas o <application/configs/aplication.ini> facilita o manuseio desse parmetros de inicializao, melhorando a manuteno. Funciona assim: o arquivo <public/index.php> inicia o aplicativo Zend atravs de um objeto <Zend_Application>, passando como parmetro o nome do arquivo de inicializao para esse objeto, que no caso o prprio <application/configs/aplication.ini>. A partir da, o objeto <Zend_Application> executa as funes necessrias para configurar o aplicativo de acordo

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

7/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

como o que foi escrito no arquivo <ini>.Voc pode pegar mais detalhes em <http://framework.zend.com/manual/en/zend.application.quick-start.html>. (Nliton Antnio Campus) [production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" [staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1

Controllers Esse diretrio responsvel por por receber a todas as requisies do usurio, como sugere o nome, ele faz o controle do fluxo da aplicao se a necessidade direcionar para o diretrio view ou fazer a persistncia no diretrio models. Esse fluxo orquestrado pelos arquivos que nele estiverem, geralmente por padro sugere-se colocar a palavra controler em cada arquivo, por exemplo: - IndexControler.php. Models Sempre que h necessidade de buscar dados ou informaes em uma base de dados ou adicionar um registro a camada de modelo que por sua vez faz a persistncia de para completar o fluxo de requio e envio de dados. Podendo direcionar novamente para o controle ou para a view. View Esse diretrio responsvel por rederizar a pgina que ser exibida ao usurio. Bootstrap.php O arquivo bootstap.php fica na raiz do diretrio application, sendo ele responsvel por configurar toda a aplicao. A configurao do bootstrap.php deve ser planejada com esmero, pois nele pode fazer as seguintes configuraes: Controle "motor de arranque" do aplicativo. Inicia autocarregamento de classes. Configura e inicia o autocarregamento de classes. Inicia o modelo de tela pelo mtodo MVC. Inicia a base de dados.

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

8/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

Inicia a base de dados do aplicativo com o usuario de menor privilgio. Inicializa o menu. Obtm a referncia da viso.

* Exemplo de configurao do bootstrap.php * autor: Nliton Antnio Campos * primeira verso: 31 dez 2009 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { /** * Inicia autocarregamento de classes. */ protected function _initAutoLoader() { /** * Configura e inicia o autocarregamento de classes. */ $autoLoader = new Zend_Application_Module_Autoloader( array('namespace' => '', 'basePath' => APPLICATION_PATH)); } /** * Inicia o modelo de tela pelo mtodo MVC. */ protected function _initLayout() { $configs = array( 'layout' => 'layout0', 'layoutPath' => APPLICATION_PATH . '/layouts/scripts' ); Zend_Layout::startMvc($configs); } /** * Inicia a base de dados. */ protected function _initDb() { /** * Inicia a base de dados do aplicativo com o usuario de menor privilgio. */ $database = array( 'host' => 'localhost', 'username' => 'usuario', 'password' => '', 'dbname' => 'base_de_dados', 'charset' => 'latin1' ); $db = Zend_Db::factory('Pdo_Mysql', $database);

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

9/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('Zend_Db', $db); }

10. Script para a criar a estrutura de diretrio do MVC O Zend Framework possui um utilitrio que se encarrega de criar o projeto com todos os diretrios do padro MVC. Dentro do diretrio /usr/share/Zend/ZendFramework/bin encontra-se o arquivo zf.sh, ele possui vrios parmetros que podem contextualizar diferentes aes, bem como, criar projetos, View, Controller, Action e entre outros. Se executarmos o comando sh zf.sh help dentro do diretrio /usr/share/Zend/ZendFramework/bin teremos todas aes que o script faz, podemos ver-las no quadro abaixo. Zend Framework Command Line Console Tool v1.9.5 Usage: zf [--global-opts] action-name [--action-opts] provider-name [--provider-opts] [provider parameters ...] Note: You may use "?" in any place of the above usage string to ask for more specific help information. Example: "zf ? version" will list all available actions for the version provider. Providers and their actions: ProjectProvider zf create project-provider name actions Profile zf show profile Project zf create project path name-of-profile file-of-profile zf show project Note: There are specialties, use zf show project.? to get specific help on them. View zf create view controller-name action-name-or-simple-name Controller zf create controller name index-action-included[=1] module Action zf create action name controller-name[=index] view-included[=1] module Module zf create module name Version zf show version mode[=mini] name-included[=1] Note: There are specialties, use zf show version.? to get specific help on them.

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

10/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

Phpinfo zf show phpinfo Manifest zf show manifest

Podemos criar um subdiretrio estrutura, dentro do home do usurio dsi ou no diretrio uusrio onde esto sendo desenvolvidas as aplicaes. Criaremos um script para gerar todos os projetos de aplicaes, portanto dessa forma com um simples comando podemos poupar boa parte do tempo criando diretrios e arquivos com o mesmo nome. Crie um arquivo com o nome gera-proj-zend e adicione o conteudo abaixo. #!/bin/sh if ls /home/usuario/sistemas/desenvolvimento/$1 then echo No foi possvel gerar projeto com nome '$1': a pasta '/home/usuario/sistemas/desenvolvimento/$1/' j existe. exit 0 elif ls /home/usuario/sistemas/producao/$1 then echo No foi possvel gerar projeto com nome '$1': a pasta '/home/usuario/sistemas/producao/$1/' j existe. exit 0 fi sh /usr/share/Zend/ZendFramework/bin/zf.sh create project /home/usuario/sistemas/desenvolvimento/$1 $1 $1 mkdir /home/usuario/sistemas/producao/$1 cat /home/usuario/sistemas/desenvolvimento/$1/public/.htaccess > /home/usuario/sistemas/desenvolvimento/$1/public/.htaccess-producao echo RewriteBase /~dsi/$1/ >> /home/usuario/sistemas/desenvolvimento/$1/public/.htaccess-producao echo RewriteBase /~dsi/desenvolvimento/$1/ >> /home/usuario/sistemas/desenvolvimento/$1/public/.htaccess cd /home/dsi/public_html/desenvolvimento/ ln -s /home/usuario/sistemas/desenvolvimento/$1/public/ $1 cd cd /home/dsi/public_html/ ln -s /home/usuario/sistemas/producao/$1/public/ $1 Esse script analisa se o projeto j existe, caso contrrio ele usar o script padro do zend (zf.sh), para criar o projeto. Neste projeto inclui-se arquivo .htaccess e o link simblico para a pasta public_html. Para gerar um novo projeto necessrio rodar o script seguido do nome do projeto a ser criado: #./ gera-proj-zend nome_do_projeto ou # sh gera-proj-zend nome_do_projeto

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

11/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

11. Configurando restrio de acesso O arquivo .htaccess contm configuraes do servidor web apache, que por sua vez possui a funo de mapear requisies para o arquivo e possibilitar acessos em url de forma clara. Geralmente, configuraes de acesso so realizadas diretamente nos arquivos de configurao apache.conf ou http.conf, essa uma prtica muito comum entre administradores de sistemas. Usar o arquivo .htaccess proporciona uma melhor alternativa, pois cada site, sistema ou portal situado no diretrio de trabalho do apache todos os arquivos ficam de forma publica, portanto vivel que cada um tenha restries conforme suas necessidades. Para que esse arquivo possa ser lido necessrio que no arquivo de configurao do apache, o parmetro de configurao AccessFileName indique o nome do arquivo, que por padro .htaccess, mas esse nome pode ser modificado. Caso queira adicionar um outro nome para esse arquivo, basta que, no parmetro, ele esteja seguido do nome do arquivo, por exemplo:

AccessFileName .htaccess .config

Pode-se criar um arquivo .htaccess dentro do diretrio public_html, e adicionar os parmetros de referncia do mdulo mod_rewrite. Abaixo segue uma srie de parmetros que o arquivo precisa conter e, em seguida, uma breve explicao de cada um: RewriteEngine On RewriteBase /public_html RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]

RewriteEngine: Ativa e desativa o tempo de execuo do motor de reinscrio de url. RewriteBase: Define a url base, que consiste no diretrio /public_html. RewriteCond: Define condio de regra, cada parmetro RewriteCond pode ter uma condio, o que requer adicionar o parmetro [OR], para adicionar as demais. RewriteRule: Define as regras para o mecanismo de reescrita, essa diretiva composta de expresses regulares que so aplicadas para a url. Esse e outros parmetros so usados no arquivo .htaccess, porm, somente o apache 2 ou superior possui esse suporte.

12. Configurando Virtual Host A nova linha que o apache est utilizando para a configurao de hosts virtuais, melhor adaptada e segura. Com a crescente utilizao do Apache para implementar servidores web e um aumento na demanda por sites hospedados em um mesmo servidor, houve uma melhora na configurao de hosts virtuais, que consiste em utilizar um arquivo para cada site, sistema ou portal, possibilitando uma melhor manuteno nos servidores sem que isso afete o seu funcionamento. Dentro do diretrio /etc/apache2 existem dois diretrios responsveis por viabilizar a entrada e sada de sistemas para internet. O subdiretrio sites-available o local

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

12/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

onde os arquivos sero criados pelo administrador, que, para habilit-los, necessitar usar o comando a2ensite ou fazer link simblico para o diretrio sites-enabled, que o local onde o apache faz leitura. Pode-se verificar dentro do arquivo apache.conf prximo, ou no final do arquivo, a incluso deste diretrio. # Include the virtual host configurations: Include /etc/apache2/sites-enabled/ aconselhvel que o nome dos arquivos tenha referncia com o domnio, apenas para melhor identificao. Caso seja necessrio retirar um site do ar, ser preciso desabilitar o link simblico do diretrio sites-enabled, para isso usa-se o comando a2dissite. O apache foi um dos primeiros servidores web a suportar host virtual. Suas diretivas so: <virtualHost> : Contm diretivas que se aplicam somente a uma mquina especfica ou endereo de IP ServerName : Nome do domnio a ser usado ServerAdmin : Email do responsvel pelo site, que receber mensagem do apache caso houver erros. DocumentRoot : Diretrio onde esto armazenados os arquivos do site ErrorLog : Local e arquivo onde o apache gera os logs de erro ServerAlias : Nomes alternativos para complementar o domnio RedirectMatch : Faz redirecionamento de URL Pode-se fazer o download de um arquivo contendo exemplo de configurao em host virtual no link http://www.vivaolinux.com.br/etc/virtualhost.conf, ou seguir o exemplo abaixo.

<VirtualHost *> ServerName cleysinhonv.gnu-lia.org ServerAlias cleysinhonv.gnu-lia.org cleysinhonv ServerAdmin cleysinhonv@gmail.com DocumentRoot "/home/usuario/public_html" ErrorLog /var/log/apache2/gnu-lia-error.log RedirectMatch ^/$ http://www.gnu-lia.org/cleysinhonv </VirtualHost> obs.: eses dados so exemplos. Esses parmetros de configurao so suficientes para atender a necessidade de host virtual.

13. Padronizando o formato dos registros em arquivos de log Os registros de log possuem extrema importncia para administradores de sistemas, pois, a nica forma que temos de detectar erros ou falhas por meio da anlise de arquivos que registram as transaes realizadas pelo servidor, portanto interessante padronizar esses registros de modo que possam ser lidos de forma clara e inteligvel. Fazer essas configuraes nem sempre so fceis, o que requer um planejamento para padronizar os registros. Separar os registros de cada sistema, ou portal, a forma mais adequada para que no haja confuso na hora de procurar por falhas, de posse disso, pode-se direcionar os registros para um arquivo especfico, bastando indicar o caminho do arquivo no parmetro ErrorLog dentro

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

13/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

do arquivo .htaccess, porm necessrio criar o arquivo dentro do diretrio /var/log/apache2. Sugere-se que esse arquivo possua um nome que faa referncia ao domnio utilizado, como mostra o exemplo abaixo. ErrorLog /var/log/apache2/gnu-lia-error.log Por padro, o apache gera registros log com formatos com padro prprio que por sua vez, tornam-os complicados para leitura, embora, possvel modelar o formato do registro conforme a necessidade de informaes. O mdulo responsvel por permitir essa formatao o mdulo mod_log_config, que compatvel com o apache 1.3 ou superior. Suas configuraes podem ser feitas no arquivo de configurao principal apache.conf e no arquivo .htaccess caso esteja configurado no parmetro AccessFileName no arquivo principal. As linhas adicionadas no arquivo podem conter o nome do host, log remoto, usurio remoto e, caso necessite de autenticao, data, hora e status de requisio. Usa-se dois parmetros para formatar o registro, LogFormat que define o formato e CustomLog que indica o diretrio e um alias (nickname). Veja abaixo todos os caracteres responsvel pela formatao. Tabela de caracteres Caracteres Especificao %a IP remoto %A IP local %B Bytes enviados, exceto cabealho HTTP %b Bytes enviados, exceto cabealho HTTP, adicionando (Trao) quando for 0 bytes %c Estado de conexo, quando concluda %f FileName: Nome de arquivo %h Host remoto %H Protocolo de pedido %l Refere-se a log remoto %m Requisio de mtodo %R Antes de solicitar %s Status da requisio %t Data e Hora padro americano %T Tempo para atender a solicitao em segundos %u Usurio remoto, em caso de autenticao disponvel pelo auth %U URL solicitada

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

14/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

%v Nome do servidor, que responde a solicitao %V Nome do servidor de acordo com a configurao do UseCanonicalName

A opo customLog define o arquivo onde sero adicionados os logs e Log Format pode definir uma srie de formatos, bem como, registrar quais navegadores acessam determinado portal e formato de registro combinado. "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" Um exemplo de configurao de log padronizado utilizando o arquivo .htaccess pode ser visto abaixo

<VirtualHost *> ServerName cleysinhonv.gnu-lia.org ServerAlias cleysinhonv.gnu-lia.org cleysinhonv ServerAdmin cleysinhonv@gmail.com DocumentRoot "/home/usuario/public_html" ErrorLog /var/log/apache2/gnu-lia-error.log logFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" gnu-lia CustomLog /var/log/apache2/gnu-lia-error.log RedirectMatch ^/$ http://www.gnu-lia.org/cleysinhonv </VirtualHost>

Para validar as configuraes necessrio reiniciar o servio.

14. Suporte a conexes seguras com SSL O servio de conexo segura SSL (Security Socket Layers) no apache responsvel pelo mdulo mod_ssl, que possibilita um nvel de segurana em transaes, muito comum em sistemas que utilizam a web. Solicitaes seguras so realizadas pelo protocolo HTTPS (HyperText Transfer Protocol Secure) que utiliza a porta 443. Inicialmente, necessrio gerar o certificado e enviar para anlise junto Autoridade Certificadora, sendo ele aprovado, o navegador aceitar a conexo como segura. Para gerar chaves privadas, geralmente se usa o openssl em ambientes Unix. O openSSL o Software Livre e de Cdigo Aberto mais popular que possui robustez e competitividade comercial. Sendo ele uma ferramenta de linha de comando para utilizar as funes de criptografia, pode-se us-lo para a criao de chaves privadas e pblicas, operaes de criptografia de chave pblica, criaes de certificado X,509, CSRs, CRLs, criptografia e descriptografia, dentre outros. Para tornar um sistema propriamente seguro necessrio gerar dois arquivos: Um contendo as chaves privadas (arquivo.key) e outro com pedido de assinatura de certificado (arquivo.csr), os comandos abaixo se encarregam de fazer esse trabalho. Comandos para gerar chave privada e pedido de certificado

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

15/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

# Gerar arquivo contendo a chave # openssl genrsa -des3 -out http://www.gnu-lia.org.key 1024 ... Generating RSA private key, 1024 bit long modulus ........++++++ .....................................++++++ e is 65537 (0x10001) Enter pass phrase for http://www.gnu-lia.org.key: Digite uma frase secreta

# Comando para gerar pedido de certificado cleysinhonv@androide:~$ openssl req -new -key http://www.gnu-lia.org.key -out http://www.gnu-lia.org.csr ... Enter pass phrase for http://www.gnu-lia.org.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----Country Name (2 letter code) [AU]:BR State or Province Name (full name) [Some-State]:Minas Gerais Locality Name (eg, city) []:Minas Gerais Organization Name (eg, company) [Internet Widgits Pty Ltd]:gnu-lia ltda Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:www.gnu-lia.org Email Address []:cleysinhonv@gmail.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:uma senha An optional company name []:. A configurao do certificado no portal ou sistema web, pode ser elaborada no arquivo .htaccess, as principais diretivas de configurao so: SSLEngine, SSLCertificateFile e SSLCertificateKeyFile. Para validar o uso dessas diretivas preciso habilitar o modulo mod_ssl a2enmod ssl && sudo /etc/init.d/apache2 force-reload A diretiva SSLEngine habilita o uso do SSL. importante lembrar que, por padro, essa diretiva vem desabilitada. A opo SSLCertificateFile indica onde est o certificado assinado pela unidade certificadora, geralmente podendo armazen-lo no diretrio onde est a aplicao web, em um diretrio separado. Por fim, a opo SSLCertificateKeyFileque indica onde est a chave privada como mostra o exemplo abaixo. <VirtualHost *:443> ServerName cleysinhonv.gnu-lia.org ServerAlias cleysinhonv.gnu-lia.org cleysinhonv

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

16/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

ServerAdmin cleysinhonv@gmail.com DocumentRoot "/home/usuario/public_html" ErrorLog /var/log/apache2/gnu-lia-error.log logFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" gnu-lia CustomLog /var/log/apache2/gnu-lia-error.log RedirectMatch ^/$ http://www.gnu-lia.org/cleysinhonv SSLEngine on SSLCertificateFile /home/usuario/sistemas/ssl/www.gnu-lia.org.csr SSLCertificateKeyFile /home/usuario/sistemas/ssl/www.gnu-lia.org.key </VirtualHost>

15. Configurando exibio de erros Sistemas altamente acessados so alvos de constantes ataques, que muitas vezes afetam a disponibilidade, integridade e confiabilidade das informaes. Para minimizar os acidentes podemos evitar que o servidor retorne erros de URL no encontradas, esses erros geralmente mostram verses de softwares que esto sendo usados e o sistema operacional que est sendo usado, essas informaes contribuem para tentativas de invaso e explorao de falhas, portanto importante que sejam tratadas para que o servidor possa ter melhor robustez. Pode-se configurar esse erro no arquivo principal do apache (apache.conf) usando a diretiva ErrorDocument. Segue abaixo o erro gerado e as diretivas usadas para impedi-los. Erro do apache The requested URL /ds was not found on this server. Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch Server at 200.131.231.53 Port 80

Tratamento de exibio de erro ErrorDocument 400 "<h1>400 error: bad request</h1>" ErrorDocument 403 "<h1>403 error: access forbidden</h1>" ErrorDocument 404 "<h1>404 error: document not found</h1>" ErrorDocument 500 "<h1>500 error: internal server error</h1>"

Pode-se configurar tambm exibies de erros e funes que possuem carter de insegurana, uma srie de funes podem permitir que falhas sejam exploradas por um cracker. Portanto devemos configurar duas diretivas: disable_functions, seguida pelo nome das funes separadas por vrgulas e a display_errors que desabilita a exibio de erro do php, seus parmetros so on e off. Como mostrado no quadro abaixo. ; Para no mostrar mensagens de erro display_errors = Off ; This directive allows you to disable certain functions for security reasons. ; It receives a comma-delimited list of function names. This directive is ; *NOT* affected by whether Safe Mode is turned On or Off.

disable_functions = apache_child_terminate,apache_setenv,curl_exec,curl_multi_exec,define_syslog_variables,dir,dl,escap

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

17/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

16. Liberando acesso 16.1 Liberando acesso a ftp Normalmente, em um ambiente de produo, as atualizaes so feitas por um desenvolvedor ou web design, com isso h uma necessidade genrica de liberar o acesso para adicionar os arquivos. Usa-se normalmente o servio ftp, protocolo de transferncia de arquivos. Para implantar esse servio usamos o software proftpd, conforme os passos descritos abaixo. Instalando o proftpd. #apt-get install proftpd-basic Durante a instalao, temos a opo de escolher o modo de funcionamento do servidor: atravs do inetd ou em modo solitrio. Apesar do modo solitrio ser mais custoso, ele nos d mais controle na segurana como controle de acesso simultneo e atrasos propositais contra ataques de fora bruta. O prximo passo ser editar o arquivo /etc/proftpd/proftpd.conf que contm as configuraes bsicas do servidor. Pode-se descomentar a linha abaixo para forar os usurios a permanecerem restritos apenas ao seu diretrio home. # Use this to jail all users in their homes DefaultRoot ~ Por padro, o proftpd possui todas as configuraes centralizadas em seu arquivo principal, portanto, no necessariamente precisamos seguir esse segmento padronizado de configurao. Podemos criar um arquivo de configurao para cada sistema, site ou portal, sendo assim, o diretrio que conter os arquivos deve ser definido no arquivo proftpd.conf. Dentro do diretrio /etc/proftpd, vamos criar o seguinte subdiretrio conf, e criaremos arquivos no formato <nome_do_usuario>.conf. No arquivo /etc/proftpd/proftpd.conf vamos usar a diretiva include para acrescentar os arquivos de configurao: # Inclui os diretrios configurados para cada site Include /etc/proftpd/conf/*.conf Agora, dentro do diretrio /etc/proftpd/conf vamos incluir o arquivo global.conf. Este arquivo contm configuraes globais aplicveis a todos os diretrios. <Global> RequireValidShell off <Limit SITE_CHMOD> DenyAll </Limit> </Global> A diretiva RequireValidShell diz ao servidor para aceitar conexes de usurios cujo shell seja, por exemplo, /bin/false (que o caso dos usurios do servidor). A diretiva Limit SITE_CHMOD no deixa que os usurios mudem as permisses de pastas e arquivos. Para cada site pode-se criar um usurio, cujo diretrio home o diretrio do site e o shell o

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

18/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

/bin/false, e criar tambm um arquivo <nome_do_usurio>.conf dentro do subdiretrio /etc/proftpd/conf. # useradd -s /bin/false -d <caminho-para-site> <nome-do-usurio> # passwd <nome-do-usurio> importante lembrar que no caso do servidor ser montado a partir de um backup deve-se copiar os usurios e grupos dos arquivos /etc/passwd, /etc/shadow e /etc/group. Abaixo segue um modelo do arquivo <usuario>.conf: <Directory "caminho/para/a/pasta/do/site"> <Limit ALL> Order Allow, Deny Allow from 192.168.0.2 Deny from All </Limit> </Directory> <Directory "caminho/para/a/pasta/do/site/pasta/com/permisso/de/execuo"> <Limit SITE_CHMOD> Order Allow, Deny AllowUser usuario DenyAll </Limit> </Directory> A primeira clusula Directory tem como parmetro o caminho do site. A clusula Limit nega todo o acesso ao diretrio com exceo dos ips listados em Allow from. A poltica usada permite que cada usurio s tenha acesso atravs de um ip que seja pertencente a determinada instituio. A segunda clusula Directory opcional e s usada no caso de haver algum subdiretrio que precise ter suas permisses de escrita, leitura ou execuo alteradas. Por questo de segurana, nenhum arquivo transferido ter permisso de execuo. Porm, temos alguns diretrios (por exemplo, cgi-bin) que precisam ter permisso de execuo. Para tal, o usurio dever enviar os arquivos e, em seguida, mudar a permisso dos arquivos.

16.2 Liberando acesso ssh O acesso remoto extremante importante para administradores de rede, pois podemos ter total controle do sistema sem que estejamos fisicamente presentes em frente ao equipamento que est sendo usado. Embora haja essa facilidade, preciso que o acesso esteja bem configurado, junto com algumas restries. Usaremos ssh para fazer essas conexo remota, portanto, seguindo os passos abaixo, esse servio poder ser instalado e configurado. # apt-get install ssh Aps a instalao, o servio ssh estar trabalhando na porta 22. Por segurana, precisamos desabilitar o acesso por root, portanto, mude o valor PermitRootLogin no arquivo /etc/ssh/sshd_config:

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

19/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

PermitRootLogin no Outra medida de segurana bloquear o acesso pelo firewall e no arquivo /etc/hosts.allow. Abaixo um exemplo de uma configurao no arquivo /etc/hosts.allow: sshd: 192.168.1.56 192.168.2.95 192.168.151.0/255.255.255.0 : allow sshd: ALL : deny Reinicie o servio ssh para que as alteraes sejam validadas: #/etc/init.d/ssh restart

17. Rotinas de Backup A prtica do backup de extrema importncia h casos em que h a necessidade de se utilizar cpias de arquivos, tabelas de banco de dados e outros mais . Para fazer essa rotina de backup utilizaremos o utilitrio nativo dos sistemas *unix para fazer o agendamento dos dias, horas em que o servidor automaticamente ir executar a rotina. O script consistir em copiar o diretrio onde esto as aplicaes (/home/usurio/aplicativos), os arquivos de configurao e diretrios compartilhados (/usr/share/Zend). Abaixo segue um modelo de script simples para fazer o backup sendo importnte entender, que ao implementar o servidor as bases de dados podem ou no estar no mesmo computador, portanto iremos mostrar os seguintes contextos de backup: 1.Base de dados Mysql 2.Aplicaes php 3.Arquivos de Configurao 4.Diretrio compartilhado /usr/share/Zend Crie um arquivo com o nome backup no diretrio /etc e de a permisso de execuo abaixo segue o a implementao das rotians de backup. #!/bin/sh echo '***' >> /var/log/backup.log echo " Inicianado backup referente `date`" >> /var/log/backup.log #Variaveis dia=`date +%d` mes=`date +%b` ano=`date +%y` todosbancos=`mysql -u root -senha -s -e "show databases" | grep -v Database` servidor=`hostname`; arq_conf='/etc' biblioteca='/usr/share/Zend' phpids='/usr/share/phpids' aplicacaoes='/home/usuario/aplicativos' dirbackup='/home/usuario/backup' (Defina o seu diretrio) backupgeral='/home/usuario/backup_anterior' (Defina o seu diretrio) cd $dirbackup

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

20/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

#Limpa para fazer backup rm *.sql rm *.tar.gz #Faz a cpia dos bancos e compacta for db in $todosbancos do mysqldump -u root -senha --skip-extended-insert $db > $servidor-$db-$dia-$mes-$ano.sql done

tar -czvf $servidor-$dia-$mes-$ano.tar.gz *.sql $arq_conf $biblioteca $phpids #copia para pasta arquivo anterior cp -f *.tar.gz $backupgeral # Enviar para outro servidor via FTP curl -T $servidor-$dia-$mes-$ano.tar.gz ftp://usuario:senha@servidor/diretorio/$servidor/

echo " Terminando backup referente `date`" >> /var/log/backup.log O Para fazer o agendamento de execuo da rotinas execute o comando no terminal #crontab -e Forma de configurar # m h dom mon dow command 0 0 *** /etc/backup Significado das abreviaes do crontab m Minutos de 0-59 h Horas de 00 s 23 dom Dia do ms 0-31 mon Ms de 0-12 dow Dia da semana 0-7 Comand Local onde se sencontra o script (/etc/init.d/backup)

18. Ferramenta para deteco de intruso (Opcional) Confgurar no servidor apache uma ferramenta de deteco de intruso pode ajudar na tomada de deciso ou na correo no fluxo da aplicao ou correo no arquivo .htaccess.

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

21/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

Sugere-se a ferramenta PHPIDS para analisar as tentativas de insero de cdigo ou tentativas de endereamento de URL e outras tentativas. A cada tentativa logs so gerados, ser necessrio periodicamente verifica-los, ou se necessrio criar uma rotina para informar a ocorrncia. O processo de instalao simpes, porm necessita de configuraes em alguns arquivos da ferramenta e do servidor apache, portanto siga os passos abaixo para fazer as instao e configurao. Escolha o diretrio de instalao, se preferir pode utilizar a pasta compartilhada do php que se encontra em /usr/share/Zend importante separar a ferramenta de configurao do servidor das aplicaes que sero desenvolvidas. Entar no diretrio PATH do php #cd /usr/share/ Faa download do phpides #wget http://php-ids.org/files/phpids-0.6.2.tar.gz Descompactar o pacote # tar -xvzf phpids-0.6.2.tar.gz Mudar usurio e grupo do diretrio tmp da ferramenta IDS # cd phpids-0.6.2/lib/IDS # chown -R www-data:www-data tmp Fazer configurao do PHPIDS # cd config #vim config.ini Configurar caminho nas diretivas [General] filter_type = xml filter_path = /usr/share/phpids/lib/IDS/default_filter.xml tmp_path = /usr/share/phpids/lib/IDS/tmp [Logging] ; file logging path = /usr/share/phpids/lib/IDS/tmp/phpids_log.txt [Caching] ; file cache path = /usr/share/phpids/lib/IDS/tmp/default_filter.cache ; memcached ;host = localhost ;port = 11211 ;key_prefix = PHPIDS ;tmp_path = /usr/share/phpids/lib/IDS/tmp/memcache.timestamp

Pode-se criar uma aplicao que ir monitorar as requisies, que por sua vez, ir detectar

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

22/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

possveis tentativas de quebra de segurana, bem como, insero de cdigos, tentativas de descoberta de URL e entre outros. Crie um subdiretrio phpids dentro do diretrio /home/aplicativos/estrutura/ ou no diretorio que achar conviniente, e adicione os cdigos abaixo em um arquivo index.php ou phpids.php. Os comentrios do arquivo relatam o que o mesmo est desenpenhando. <?php /** * autores: Jos Cleydson Ferreira da Silva, Nliton Antnio Campos * primeira verso: 13 abr 2010 */ /** * Monitora as requisies, detectando possveis tentativas de quebra de segurana. */ set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/share/phpids/lib'); require_once 'IDS/Init.php'; $request = array('REQUEST' => $_REQUEST, 'GET' => $_GET, 'POST' => $_POST, 'COOKIE' => $_COOKIE); $init = IDS_Init::init('/usr/share/phpids/lib/IDS/Config/Config.ini'); $ids = new IDS_Monitor($request, $init); $result = $ids->run(); /** * Registra as tentativas de quebra de segurana detectadas em log. */ if (!$result->isEmpty()) { require_once 'IDS/Log/File.php'; require_once 'IDS/Log/Composite.php'; $compositeLog = new IDS_Log_Composite(); $compositeLog->addLogger(IDS_Log_File::getInstance($init)); $compositeLog->execute($result); header('location: ' . $_SERVER['SCRIPT_NAME']); die; } Aps salvo o arquivo necessrio configurar a diretiva auto_prepend_file do arquivo php.ini, para vincular o arquivo no php. ; Automatically add files before or after any PHP document. auto_prepend_file = /home/usuario/sistemas/estrutura/phpids/index.php Os logs so gerados em /usr/share/phpids/lib/IDS/tmp/phpids_log.txt ou no local onde instalou a ferramenta phpIDS. 19. Acelerando o PHP (Opcional) Sistemas altamente acessados em sua maioria sobrecarregam servidores e ocasionam um um retardo na resposta de requisies feitas pelos clientes. Isso acontece por que o servidor apache precisa fazer os fluxos de entrada e sada em disco, e em seguida o php fazer a compilao (interpretao) das instrues que contm nos arquivos. Para minimizar o esforo mltuo de leitura em disco e interpretao dos scripts, use a ferramenta eAccelerator para usar a memria RAM como cache para esses scripts, sendo assim haver um ganho significativo no tempo de resposta s requisies dos clientes. O eAccelerator capaz de proporcionar uma acelerao substancial sem que haja necessidade de mudanas

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

23/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

ou perda de contedo ou influncia de outra aplicao. O eAccelerator um software open-source, baseia-se no software mmCache escrito por Dmitry. A equipe atual respnsvel por mante-lo possui 3 colaboradores: Franck Tabary, Bart Vanbrabant, Hans Rakers. O processo de instalao simples consiste em compilar o o eAccelerator e configurar o arquivo php.ini. Fazer download do eAccelerator # wget http://bart.eaccelerator.net/source/0.9 ... c2.tar.bz2 Descompactar o arquivo #tar -xvjf eaccelerator-0.9.6-rc2.tar.bz2 Preparar o extenes php para compilar # phpize5 Instalao do eAccelerator # ./configure --enable-eaccelerator=shared with-php-config=/usr/bin/php-config # make # make install

Agora necessrio configurar o arquivo php.ini, abra o arquivo e adicione as diretivas abaixo no final do arquivo. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;; ;; Configurao do eAccelerator ; ; ;; Cleysinho 12 abr 2010 ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;; zend_extension="/usr/lib/php5/20060613+lfs/eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" Para validar as alteraes reinicie o servio http. 20. Consideraes finais 20.1 Sobre o documento Este documento foi elaborado com o objetivo de documentar o processo de implementao

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

24/25

08/02/13

Frum INFO - Implementando servidor de aplicaes PHP com Zend Framework

de um servidor de aplicaes php, abordando de forma conceitual e tcnica os procedimentos de instalao e configurao de vrios softwares envolvidos nos processos. Portanto, esse documento no recomendvel para pessoas que buscam informaes rpidas, pois uma abordagem geral do processo desde o incio da implementao at o pleno processo de produo. 20.2 Sobre o autor

Jos Cleydson Ferreira da Silva, graduando em Sistemas de Informao - Faculdade de Viosa-MG. Usurio de Linux por filosofia, acredita que o Software Livre e de Cdigo Aberto podem mudar a forma e o modelo de mercado atual. Contatos Email, gtalk: cleysinhonv@gmail.com Twitter: @cleysinhonv Web site: http://www.cleysinho.blogspot.com Web site: http://www.gnu-lia.org Outros artigos: http://www.vivaolinux.com.br/artigos/us ... leysinhonv 20.3 Referncias Bibliogrficas http://framework.zend.com/ http://httpd.apache.org/docs/2.2/ http://www.modssl.org/docs/ http://www.openssl.org/docs/ http://www.eaccelerator.net/ http://php-ids.org/

Leia e comente em: http://www.vivaolinux.com.br/artigo/Imp ... Framework/


Powered by phpBB 2000, 2002, 2005, 2007 phpBB Todos os Horrios esto como UTC - 3 horas [ DST ] Group Pgina 1 de 1 http://www.phpbb.com/

info.abril.com.br/forum/viewtopic.php?f=156&t=8342&start=0&sid=ab16da6d97b328f8ba290f7ac05183d3&view=print

25/25

S-ar putea să vă placă și