Skip to content

Category Archives: debian

Instalando o flash player 10 beta 2

09-Jul-08

Essa semana foi lançada a nova versão beta do Flash Player 10 que promete acabar com o problema das aplicações transparentes.

Como todo bom nerds curioso, tentei instalar a nova versão no meu computador para dar uma olhada no que ela trazia de bom, mas infelizmente, o instalador que vem junto com o pacote da Adobe não funcionou e eu acabei tendo que fazer a instalação manualmente mesmo… Apesar de não ser nada complicado, vou colocar aqui os passos que tomei para fazer a instalação, pois quem sabe possa ajudar mais alguém que esteja passando pelo mesmo problema. :)

Então vamos começar fazendo o download da versão para linux e descompactando:


$ wget http://download.macromedia.com/pub/labs/flashplayer10/flashplayer10_install_linux_070208.tar.gz
$ tar xvzf flashplayer10_install_linux_070208.tar.gz

Será criado um diretório chamado install_flash_player_10_linux que contém os seguintes arquivos:


$ ls install_flash_player_10_linux
flashplayer-installer  libflashplayer.so

O primeiro deles, flashplayer-installer, é o instalador da Adobe e o segundo, libflashplayer.so, é a biblioteca do flash mesmo. Antes de instalar, vamos fazer um backup da versão atual da biblioteca:


$ sudo cp /usr/lib/flashplugin-nonfree/libflashplayer.so /usr/lib/flashplugin-nonfree/libflashplayer9.so

E então vamos tentar (apesar de não ter funcionado comigo) instalar através do flashplayer-installer, existente no próprio pacote. Se você quiser que a instalação funcione para todos os usuários da máquina, execute:


$ cd install_flash_player_10_linux
$ sudo ./flashplayer-installer

Caso contrário, se você é um cara egoísta e quer que a nova versão funcione só para o seu usuário, faça:


$ cd install_flash_player_10_linux
$ ./flashplayer-installer

Como eu sou o único usuário deste meu computador, tentei instalar o player para todos os usuários da máquina mas como já foi dito, o instalador não funcionou comigo e apresentou o seguinte problema:


$ cd install_flash_player_10_linux
$ sudo ./flashplayer-installer
...
Please enter the installation path of the Mozilla, Netscape,
or Opera browser (i.e., /usr/lib/mozilla): /usr/lib/mozilla

WARNING: Please enter a valid installation path.

Please enter the installation path of the Mozilla, Netscape,
or Opera browser (i.e., /usr/lib/mozilla): /usr/lib/mozilla

WARNING: Please enter a valid installation path.

Please enter the installation path of the Mozilla, Netscape,
or Opera browser (i.e., /usr/lib/mozilla):
...

Não sei porque o instalador não reconheceu o diretório que ele mesmo recomenda, que existe e, principalmente, que é o diretório de instalação do Mozilla. Se esse erro aconteceu com você também, vamos partir para a instalação manual, que é mais simples que os passos anteriores… Para instalar a biblioteca manualmente, execute:


$ cd install_flash_player_10_linux
$ sudo cp libflashplayer.so /usr/lib/flashplugin-nonfree/

E agora você já está com a nova versão do flash player instalada! Para conferir, feche o firefox e então execute:


$ firefox "about:plugins" &

Você vai encontrar:

File name: libflashplayer.so
Shockwave Flash 10.0.0 d525

Mas e sobre o novo player!? Pois é, ele resolveu o problema das transparências porém acabou ficando mais pesado que a versão anterior… Ainda é uma release beta, então provavelmente a versão final estará um pouco melhor!

E você, já instalou a nova versão!? O que achou?

Sincronizando data e hora através de servidores NTP

07-Feb-08

Já pensou em não precisar configurar data e hora do seu computador, nem mesmo nas mudanças de horários de verão!? Pois bem, essa é a função dos servidores NTP, que permitem sincronizar o relógio do seu computador utilizando uma referência aceita mundialmente, conhecida como UTC.

No Ubuntu/Debian, sincronizar o relógio do seu computador através de um servidor NTP é uma tarefa bastante simples.

Primeiro escolha um servidor (de preferênicia o mais próximo da sua casa) na lista da RNP de servidores NTP brasileiros. Como eu moro no Paraná, geralmente utilizo os servidores ntp.pop-pr.rnp.br e ntp1.pucpr.br.

Depois instale o cliente NTP e o tz-brasil, que é quem configura automaticamente seu timezone (e as mudanças do horário de verão) para o Brasil:


$ aptitude install ntpdate tz-brasil

E indique o servidor que deseja utilizar


$ ntpdate ntp.pop-pr.rnp.br

Feito! Agora seu relógio está devidamente configurado e imune as mudanças de horário de verão, certo!? Quase…
E se o servidor estiver configurado com data e hora incorretos?

Eu nunca vi um servidor com o horáro errado, mas como prevenção e canja de galinha não faz mal a ninguém, eu sempre verifico a hora do servidor antes de configurá-lo na minha máquina. Portanto, se quiser apenas verificar a data e hora do servidor, adicione o parametro -q ao comando, como mostrado abaixo:


$ ntpdate -q ntp.pop-pr.rnp.br

Ok… Mas e se depois de configurado, o servidor cair!? Então para aumentar a tolerância a falhas, você pode configurar mais do que um servidor NTP na sua máquina. Para fazer isso, basta indicar todos os servidores que deseja utilizar, como mostrado abaixo:


$ ntpdate ntp.pop-pr.rnp.br ntp1.pucpr.br

E é isso… :)

Meus 10 comandos mais rodados no Linux

17-Jan-08

Eu sei que esse meme já é meio antigo, mas é legal saber os comandos que você mais usa


afurlan@einstein:~$ history | awk '{print $2}' | awk 'BEGIN {FS="|"} {print $1}' | sort | uniq -c | sort -rn | head -10
    130 l
     72 vim
     46 cd
     34 rm
     28 ll
     20 fg
     15 mv
     14 for
      9 find
      7 du

Instalação segura do MySQL Server

09-Jan-08

A instalação default do MySQL no linux (debian-based) configura a conta do root no banco de dados para ser acessada sem precisar de senha, dessa forma qualquer usuário conectado no servidor consegue obter uma shell do MySQL através do comando:


$ mysql -u root

Não é difícil perceber o quanto essa configuração é ruim e devido à isto, antigamente eu alterava a senha do root via SQL mesmo, como segue abaixo:


$ mysql -u root
mysql> set password for root@localhost = password('NOVA-SENHA');
Query OK, 0 rows affected (0.00 sec)

E isso realmente funciona, pois força que o usuário root tenha que passar a senha NOVA-SENHA para se logar, mas descobri há pouco tempo atrás um comando mais apropriado para isso e que além de definir a senha altera várias outras configurações de segurança:

* Obs1: Eu removi a maioria dos comentários exibidos durante a execução, mas a cada passo são exibidos textos explicando os efeitos das alterações sugeridas pelo utilitário.

* Obs2: Eu já havia executado esse comando antes (quando instalei o meu servidor) portanto a execução exibida abaixo pode
ser um pouco diferente da sua, caso esta seja a primeira vez que você está executando o comando.


# mysql_secure_installation
Enter current password for root (enter for none):
OK, successfully used password, moving on...

You already have a root password set, so you can safely answer 'n'.
Change the root password? [Y/n] n
 ... skipping.

Remove anonymous users? [Y/n] Y
 ... Success!

Disallow root login remotely? [Y/n] Y
 ... Success!

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!

E como o próprio utilitário diz: Sua instalação do MySQL agora deve estar segura

Utilizando o comando “service” no Ubuntu

20-Dec-07

Uma das coisas legais que existem no Mandriva e que eu sempre senti falta no Ubuntu é o comando service. O comando service não possui uma função propriamente dita, ele serve apenas como alias para o /etc/init.d e no Madriva já vem configurado por default. Pode até ser frescura minha mas, além de tornar mais claro, é melhor manipular os serviços do linux com


$ service apache2 reload

do que o usando o famoso


$ /etc/init.d/apache2 reload

Durante algum tempo eu pensei que esse comando nem existia no Ubuntu/Debian e cheguei inclusive a criar um shell script que fazia a mesma coisa. Essa semana eu descobri que esse comando existe sim, só que não vem instalado por padrão e para habilitá-lo você precisa instalar o pacote sysvconfig


$ aptitude install sysvconfig

O mais impressionante disso tudo é a simplicidade do script, ao melhor estilo KISS


$ vim /usr/bin/service
#!/bin/sh
set -e
/etc/init.d/$1 $2 $3

Configurando PHP5 sobre FastCGI no Apache

11-Dec-07

Eu trabalhei por mais de 3 anos como desenvolvedor PHP e durante todo esse tempo uma das coisas que sempre notei foi a facilidade em driblar a segurança de quase todos os servidores web por onde passei. Quase todas as empresas (sem citar nomes) se preocupam muito com a segurança externa de suas redes, mas a segurança interna de seus servidores (quando há) é extremamente falha.

O que pretendo mostrar nesse post, é um modelo de configuração para servidores Apache e PHP que trate todos os problemas de segurança com os quais EU já me deparei e comentar um pouquinho o porquê de cada coisa. Se você tiver alguma outra idéia, crítica ou sugestão que possa enriquecer o modelo proposto aqui, sinta-se à vontade para faze-lo. :)

Como eu geralmente utilizo distribuições Debian ou Ubuntu, os comandos apresentados abaixo estarão no formato padrão para essas duas distribuições, porém você conseguirá adequar facilmente o conteúdo deste post para qualquer outro “sabor” de Linux.

Por que utilizar o FastCGI?

Ok, então vamos começar explicando um pouco do porquê rodar o PHP sobre o FastCGI ao invés de utiliza-lo como um módulo normal do Apache.

O FastCGI é um módulo do Apache que, juntamente com o SuEXEC, permite especificar ao servidor qual usuário utilizar para executar os scripts CGI, ou seja, você consegue criar um usuário Unix para cada site rodando no seu servidor e forçar o apache a executar esses scripts sempre sob um mesmo usuário. Dessa forma, além da segurança tradicional proporcionada pelo Apache e PHP, você ainda tem a segurança do Unix restringindo as ações desse usuário dentro do sistema. Portanto a partir de agora esqueça os antigos usuários globais www-data, apache, etc.

Instalação dos pacotes

A primeira coisa a ser feita é instalar os pacotes necessários pelo servidor, que nesse caso são basicamente três: Apache, FastCGI e PHP5. Também é interessante instalar o pacote php5-suhosin que propociona algumas configurações de segurança adicionais ao PHP. Apesar do módulo suEXEC estar contido no pacote libapache2-mod-fcgid, ele não será habilitado no Apache e isso terá que ser feito manualmente, como segue abaixo:


$ aptitude install apache2 libapache2-mod-fcgid php5-cgi php5-suhosin
$ a2enmod suexec
$ /etc/init.d/apache2 reload

Configurando um novo site (Passo 1/3)

Como todos os sites terão seu próprio usuário Unix, o primeiro passo da configuração de um novo site consiste na criação deste usuário. Como a única função deste usuário será acessar o site e executar o PHP via CGI, podemos colocar os arquivos do site dentro do seu diretório home e ainda (por questões de segurança) remover o seu shell, assim como mostrado abaixo:

* Por motivos didáticos, irei utilizar como exemplo meu próprio site.


$ useradd --home /var/www/arthurfurlan.org --shell /bin/false --create-home arthurfurlan

Depois de criado o usuário arthurfurlan, precisamos criar os diretórios que serão utilizados pelo Apache e PHP, que são basicamente 4 diretórios:

  • o diretório html que armazenará o conteúdo do site.
  • o diretório session que armazenará os arquivos de sessão do site.
  • o diretório tmp que armazenará os arquivos temporários do site (uploads).
  • o diretório log que armazenará os arquivos de logs do site.

Segue abaixo o comando utilizado para a criação dos diretórios:


$ cd /var/www/arthurfurlan.org
$ mkdir -p html/www session tmp log
$ chown -R arthurfurlan: html/www session tmp log
$ cd -

A principal questão a ser levantada aqui é a separação do diretório de armazenamento sessões para cada site. Isso raramente é feito e possibilita que um usuário acesse os arquivos de sessão dos demais sites que estão na mesma máquina, dessa forma se torna fácil criar um script que procure por sessões contendo senhas de usuários, de administração, etc. dos outros sites. Essa separação (juntamente com outras configurações do php) previne esse tipo de ataque.

Configurando o PHP (Passo 2/3)

Outra funcionalidade legal do FastCGI é possibilidade de se utilizar um arquivo de configuração do PHP específico para cada site, o que proporciona um maior nível de segurança. EU, particularmente, gosto de renomear o arquivo php.ini para seguir o padrão do Linux de arquivos que configuração (.*rc), porém se preferir manter o nome padrão do arquivo php.ini, sinta-se á vontade.

Vamos copiar o arquivo de configuração default do PHP:


$ cp /etc/php5/cgi/php.ini /var/www/arthurfurlan.org/.php5rc

E aplicar as seguintes configurações:

  • safe_mode para on
  • safe_mode_include_dir para on
  • disable_functions para escapeshellarg, escapeshellcmd, exec, shell_exec, curl_exec, system, passthru, popen, proc_open, proc_close, dl, ini_alter, parse_ini_file, show_source, highlight_file
  • enable_dl para off
  • open_basedir para /var/www/arthurfurlan.org/html/www:/var/www/arthurfurlan.org/tmp:/var/www/arthurfurlan.org/session
  • upload_tmp_dir para /var/www/arthurfurlan.org/tmp
  • session.save_path para /var/www/arthurfurlan.org/session

* Eu não pretendo comentar o porquê de cada uma das configurações acima, senão o post vai acabar muito mais longo (e chato) do que já está! Caso você queira entender melhor alguma das delas, pergunte na sessão de comentários abaixo. :)

Devido à uma restrição do FastCGI, o arquivo que irá efetivamente executar o arquivo PHP através do CGI precisa pertencer ao mesmo usuário que está executando o CGI, no nosso caso, precisa pertencer ao usuário arthurfurlan. Esse arquivo precisar ser um shell script com permissão de execução, como mostrado abaixo:


$ cd /var/www/arthurfurlan.org
$ touch .php5cgi
$ chmod 755 .php5cgi
$ chown arthurfurlan: .php5cgi
$ cd -

Contendo o sequinte conteúdo:


$ vim /var/www/arthurfurlan.org/.php5cgi
#!/bin/sh
export PHPRC=/var/www/arthurfurlan.org/.php5rc
exec /usr/bin/php5-cgi "$@"

* Se você nomeou o arquivo de configuração do PHP com outro nome, você deve alterá-lo na variável de ambiente PHPRC do script acima.

Agora toda a parte de configuração do PHP do novo site já está configurada, e fica faltando somente criar o VirtualHost e habilitá-lo.

Configurando o VirtualHost do Apache (Passo 3/3)

Eu irei instalar o site em localhost, sobre o IP de loopback normal 127.0.0.1 mas caso você esteja configurando um site com para acesso externo basta alterar os locais correspondentes para o IP que desejar.

Vamos criar o NameVirtualHost para o novo site.
Abra o arquivo /etc/apache2/sites-available/default e adicione a linha abaixo, caso ainda não exista:


NameVirtualHost 127.0.0.1

Se você está configurando um site para rodar em localhost, você precisará configurar a sua máquina para que ela saiba que ela deve responder pelo domínio seu novo domínio, e isso pode ser feito adicionando no arquivo /etc/hosts a seguinte linha:


127.0.0.1 arthurfurlan.org

Caso esteja utilizando um IP para acesso externo, você precisará configurar o seu servidor de DNS para que aponte o seu novo domínio para o seu host.
Agora criaremos o VirtualHost como mostrado abaixo:


$ vim /etc/apache2/sites-available/arthurfurlan.org
<Virtualhost 127.0.0.1>
    ServerName arthurfurlan.org
    ServerAlias www.arthurfurlan.org
    ServerAdmin webmaster@arthurfurlan.org

    PHP_Fix_Pathinfo_Enable 1
    DocumentRoot /var/www/arthurfurlan.org/html/www
    SuexecUserGroup arthurfurlan arthurfurlan

    <Directory /var/www/arthurfurlan.org/html/www>
        Options +ExecCGI
        AddHandler fcgid-script .php
        FCGIWrapper /var/www/arthurfurlan.org/.php5cgi .php
    </Directory>

    ErrorLog /var/www/arthurfurlan.org/log/error.log
    CustomLog /var/www/arthurfurlan.org/log/access.log combined
</Virtualhost>

E agora sim, tudo terminado! Basta habilitar o recém-criado VirtualHost como mostrado abaixo para ter o seu novo site rodando sob o seu próprio usuário. :)


$ a2ensite arthurfurlan.org
$ /etc/init.d/apache2 reload