Terminal SSH no Windows

O And After roda em um Ubuntu Server, administrado por SSH – no linux eu fazia essa conexão pelo terminal SSH, mas como também uso Windows fui pesquisar softwares que permitissem um terminal SSH no Windows.

O mais simples que encontrei foi o PuTTy, que é gratuito. Você pode fazer o download dele aqui.

Não precisa instalação nenhuma e a tela do programa é assim:

PuTTy - SSH para Windows

A única configuração necessária é digitar o local do servidor em "Hostname / IP" e clicar em Open, o PuTTy vai abrir o terminal para você logar no servidor.

Esse é um programa útil para ter no seu celular ou pendrive de estimação (aquele que você leva no bolso), caso você precise em algum lugar qualquer dar manutenção em algum servidor Linux… 🙂

Backup do MySQL com shell script

Desde a migração do And After (final de dez 2010) para sua nova versão eu não tinha nenhuma rotina de backup do MySQL rodando – e já aprendi que nunca nesta vida devemos ficar sem backup do banco de dados de nossos projetos ou clientes.

Como eu sou "dummie" no Linux (veja você que cheguei a escrever como ver o IP no Linux) eu não sabia como fazer o agendamento de tarefas até descobrir como usar o crontab para agendar rotinas e executar shell scripts.

Ontem pesquisei um pouco sobre a melhor forma de executar um backup do MySQL e as recomendações em fóruns era de que a forma mais correta de fazer um backup sem a necessidade de derrubar o serviço é usando o mysqldump.

O MySQL dump

O mysqldump acessa sua base de dados como qualqer aplicação, por isso não é necessário derrubar o serviço antes do backup. Se você optar pela cópia de arquivos do sistema ao invés do dump (e não derrubar o mysql antes do backup) pode acontecer problema nos arquivos caso sua base seja alterada durante o backup.

O comando para gerar um .sql usando o  mysqdump é recebe algumas variáveis, um exemplo do comando (as variáveis estão explicadas abaixo do comando):

mysqldump -h localhost -u usuario -pSUASENHA nomedabase > meubackup.sql

Todos os itens sublinhados são variáveis e você deve alterar de acordo com as configurações do seu servidor.

localhost – o servidor para acessar o banco MySQL

usuario – o nome do usuário do banco

SUASENHA – password do usuário setado na variável acima (repare que não existe espaço entre -p e a senha digitada

nomedabase – nome da base que será exportada

meubackup.sql – nome do arquivo que será salvo (incluir a extensão .sql)

O arquivo gerado irá ser salvo no local em que o comando foi executado, portanto você deve primeiro ir até a pasta onde você quer salvar seu backup (usando o comando cd), por exemplo:

cd /var/backups/mysql

Feito isso você executa o comando mostrado anteriormente e será gerado o arquivo dentro de /var/backups/mysql.

Shell script para fazer o mysqldump

Sabendo os comandos para executar o dump do MySQL tudo o que você precisa agora é passar estes comando para um arquivo .sh (shell script).

Requisitos e/ou configurações

  • Ubuntu Server 10
  • gzip instalado (sudo apt-get install gzip)
  • MySQL rodando (com possibilidade de executar o mysqldump)
  • Usuário/senha com acesso a base mysql

Não estou dizendo que só vai funcionar na versão do SO que estou passando aí, mas como cada versão tem suas peculiaridades a informação pode ser importante para quem tiver problemas. 😉

#/bin/bash
U_PASTA="/var/backup/mysql"
U_DATA=$(/bin/date +%Y%m%d%H%M%S)
U_CAMINHO="backup-$U_DATA.sql"
U_HOST="localhost"
U_USER="root"
U_PASSWORD="password"
U_DATABASE="database"
#
cd $U_PASTA
mysqldump -h $U_HOST -u $U_USER -p$U_PASSWORD $U_DATABASE > $U_CAMINHO
gzip $U_CAMINHO
echo "Backup do MySQL executado"
 

No início do código as definições das variáveis para o comando mysqdump e também é salvo uma variável com informações de data, que é usada para nomear o arquivo sql gerado.

A lógica do código:

  1. Vai para o caminho especificado onde será salva a exportação do banco
  2. Executa o mysqldump com as configurações das variáveis
  3. Compacta o arquivo exportado (gzip, não mantém o arquivo descompactado)

Meu post anterior foi um tutorial sobre como usar crontab, com ele é possível você criar uma rotina que executa o seu shell script e mantém seus dados seguros. Para o And After criei uma tarefa diária, toda a madrugada uma cópia do banco é salva.

Cuidado!

O shell script deste post apenas gera os backups e não trata os backups antigos. Se você fizer a exportação diária do banco e não tratar de alguma forma seus backups consumirão todo o espaço do seu servidor.

Existem exemplos em que o próprio shell script e exclui os arquivos antigos, achei mais prático deixar isso a cargo do logrotate (que é assunto para outro post).

Como usar o crontab

Finalmente resolvi pesquisar como funciona o agendamento de tarefas no Linux para eu poder agendar o backup do MySQL (uso Ubuntu Server) e o funcionamento do crontab é bem mais simples do que eu pensava.

Como funciona o crontab

O funcionamento do crontab é simples: você tem um arquivo de texto em que cada linha representa uma tarefa agendada, cada linha é composta de 6 variáveis separadas por vírgula, explicadas abaixo.

O primeiro passo é no terminal digitar:

crontab -e

Este comando vai abrir seu arquivo de crontab ou criar um arquivo caso ele ainda não exista. No editor é só inserir uma linha com a rotina que você quer agendar, seguindo a estrutura abaixo abaixo:

*     *     *   *    *        comando a ser executaco
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- dia da semana (0 - 6) (Domingo=0)
|     |     |   +------- mês (1 - 12)
|     |     +--------- dia do mês (1 - 31)
|     +----------- hora (0 - 23)
+------------- minuto (0 - 59)

O * representa "todos", por exemplo:

0 4 * * 0 rm /home/gserrano/backup/*

O exemplo acima remove todos os arquivos da pasta /home/gserrano/backup todo o domingo as 4 AM. Para a execução de comandos completos você pode usar shellscript, para isso o seu comando ficaria

0 4 * * 0 sh /home/exemplo.hs

O exemplo acima executa o "exemplo.sh" também as 4 da madrugada aos domingos.

Dicas

Você pode usar vírgula para executar um comando mais de uma vez. O exemplo abaixo vai executar o comando as 4 AM de domingo e quinta-feira:

0 4 * * 0,4 sh /home/exemplo.hs

Você pode usar / para indicar uma repetição dentro do intervalo que vem depois da barra. O exemplo abaixo vai executar o comando a cada 10 minutos, todo o dia:

/10 * * * * sh /home/exemplo.hs

Atenção:  o uso do / para intervalo não é suportado em todos os sistemas.

 

Tentei ser o mais direto e conciso neste pequeno tutorial, se você tiver dúvidas ou quiser corrigir ou acrescentar algo use os comentários.

Referências

Entendendo os números do CHMOD

E escrevo hoje para compartilhar com vocês uma tabela bacana que explica os números referente as permissões do chmod.

Mas primeiro, vamos definid chmod para quem não faz idéia do que estou falando…

O que é CHMOD?

Não consegui resumir mais do que esta frase da Wikipédia:

chmod é um comando unix/linux usado para alterar permissões de arquivos (ou ficheiros) e diretórios (directórios ou pastas).

Wikipedia

É um comando utilizado para dar permissões de arquivos, coisa comum em gerenciamento de servidor. O @mnetto encontrou um post dele antigo, falando sobre o assunto e vou compartilhar a ótima explicação…

Ao final do artigo cito exemplos do comando completo, mas primeiro vamos entender os números e as permissões…

Números binários

Para entender o que significa cada número no chmod vamos entender primeiro números binários, vamos lá:

  0 - 000
  1 - 001
  2 - 010
  3 - 011
  4 - 100
  5 - 101
  6 - 110
  7 - 111

 

As permissões do chmod

Existem 3 tipos de permissões: leitura (r), escrita (w), execução (x).

Unindo isso a tabela de números binários, temos o seguinte:

      rwx
  0 - 000
  1 - 001
  2 - 010
  3 - 011
  4 - 100
  5 - 101
  6 - 110
  7 - 111

 

Na tabela acima é possível ver que 0 (zero) não tem nenhuma permissão "ligada" nos binários, e 7 tem todas "ligadas". Ou seja, 7 é o nível máximo de permissão: leitura, escrita e execução.

 

O comando CHMOD

O comando chmod funciona da seguinte forma:

chmod [dono][grupo][outros] nomedoarquivo.ext

Entre [ ] deve ir o valor numério (de zero a 7, na tabela apresentada acima) referente ao: dono, grupo e outros usuários.

Exemplo:

chmod 755 abc.doc

Neste exemplo o dono do arquivo tem permissão total, enquanto todos os outros usuário tem permissão de leitura e execução apenas.

 

Espero que tenham gostado, a ótima referência das tabelas estão no l-dicas.

Protegendo de Hotlink com Isapi Rewrite

Quanto eu estava em São Paulo semana passada aconteceu pela primeira vez algo que eu sabia que cedo ou tarde aconteceria: excedi meus 25gb mensais no Photobucket.

Se você quer apenas o código para a proteção de imagens pelo ISAPI Rewrite vá para o final deste post.

A primeira coisa que pensei foi em pagar e manter uma conta pro, mas se eu já tenho um ótimo serviço de hospedagem não existia motivo real para eu pagar alguém para manter minhas imagens. Bom, existia um único motivo: o comodismo. Mas uma coisa que aprendi com minha pouca experiência de vida é que quando se trata de programação, cliente, design e servidor o comodismo é um senhor tiro no pé e que logo trará problemas.

Estou pensando no desenvolvimento de um álbum de imagens no And After e ter as imagens no servidor não so agilizará o processo como também me dará segurança e eficiência para fazer backups, alterações e gerenciamento desse novo sisteminha que pretendo implementar.

Ótimo, fiz transferência de parte das imagens (foi bem menos doloroso do que parece) e fui ativar a proteção hotlink¹ e descobri que não existia proteção hotlink para a minha conta.

Sabendo da disponibilidade do Isapi Rewrite no meu servidor (utilizo para as urls amigáveis do And After) fui pesquisar sobre o assunto, finalmente a resposta:

 

Proteção de hotlink com ISAPI Rewrite

No seu arquivo httpd.ini adicione essas quatro linhas:

#protegendo hotlink
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://1.*).*
RewriteRule .*.(?:gif|jpg|png) /block.gif [I,O]

Neste caso os formatos protegidos em todo o site são: gif, jpg e png. Você pode proteger outros formatos adicionando-os na última linha do código.

 


¹ Hotlink é quando um site "rouba" suas imagens. Utiliza suas imagens, flashs ou outro tipo de conteúdo no site sem baixar o arquivo e enviar para outro servidor. Quando o usuário visualiza a imagen dentro do outro site, ela é requisitada do seu servidor, causando consumo para você.