4 comandos fatais e proibidos pro Linux.

Há comandos que são extremamente danosos pro seu sistema operacional Linux, se executados inadvertidamente.
Felizmente, nenhum deles pode ser executado sem privilégios administrativos — mas você deve ser cuidadoso, mesmo assim.
Captura_de_tela-Breaking.Bad.S01E04.avi-1Se o seu objetivo é o aprendizado, o ambiente mais seguro para testar estes e muitos outros comandos é o virtual. Aprenda a criar uma máquina virtual e vá brincar com segurança dentro dela.

O comando que apaga tudo

A função do comando rm é remover arquivos — e ele pode remover diretórios inteiros também, sem pedir qualquer confirmação.
Ao executar o comando rm -rfv /, com privilégios de root todos os arquivos e diretórios do seu sistema serão eliminados.
Veja o que ele faz:

  • r — indica a recursividade. Todos os arquivos do diretório atual e seus subdiretórios sofrerão a ação do comando;
  • f — indica a ‘forçabilidade’. Todos os arquivos serão forçosamente removidos, independente de suas permissões;
  • v — liga a ‘verbosidade’. Torna tudo mais lindo ao exibir os arquivos à medida em que são eliminados no seu terminal;
  • / — indica o local em que a operação ocorrerá. Neste caso, a raiz. É isto que torna o comando todo tão perigoso;

Se você executar a linha sem privilégios administrativos, só os arquivos nos quais você tem permissão de escrita serão afetados.

Como executar uma fork bomb

Esta é uma das formas de se fazer um ataque de negação de serviços, que consiste em, basicamente, saturar os recursos de um servidor ao ponto de torná-lo indisponível.
A fork bomb apresentada a seguir faz com que o Linux ou o Unix opere definindo uma função, chamada ‘:’ e que refira-se a si mesma duas vezes – em background e foreground:

: (){ : | : & };:

No Linux, o administrador pode prevenir este tipo de ataque com o comando ulimit que impõe restrições à quantidade de processos simultâneos por usuário.

Formatar uma partição

Qualquer instalação decente do Linux estará distribuída em várias partições. O comando:

mkfs.ext4 /dev/sdaX</code>

vai aplicar uma formatação completa à partição /dev/sdaX.
Formatar um disco completamente, desta forma, pode ser útil no caso de se estar repassando a máquina para uma outra pessoa.

Escrever diretamente no disco rígido

Ao enviar a saída de um comando diretamente pro endereço do dispositivo de disco rígido não é apenas desaconselhável. É uma ação muito perigosa e danosa pro sistema de arquivos, em sua máquina.
Pode ser feito da seguinte forma:

ls > /dev/sda

Há várias outras formas de se danificar um sistema Linux/Unix — e, na maior parte delas, é necessário ter privilégios especiais para ter sucesso.
Distribuições Linux voltadas para usuários com menor nível de conhecimento costumam vir com algumas configurações que previnem a maior parte dos acidentes.

Seja responsável! 😉

Como fazer backup do seu banco de dados MySQL?

Cluster (Imagem: WikiMedia.)
Cluster (Imagem: WikiMedia.)

A segurança em TI, começa com as cópias de segurança (os backups):

  1. Sempre faça Backup de tudo o que é importante
  2. Teste frequentemente os seus backups — poucas coisas, em sua vida, serão tão frustrantes quanto, ao tentar se recuperar de um desastre, descobrir que não foram feitos adequadamente ou se corromperam
  3. Armazene adequadamente — mantenha as cópias de segurança longe do local em que se encontram os dados originais, para que não corram riscos de sofrer o mesmo incidente (roubo, incêndio, sabotagem etc).

Nenhum ‘esquema’ de segurança está completo se o foco for apenas a prevenção dos eventos sinistros. Política de segurança vai além da prevenção — uma vez que as possibilidades de ser vítima de invasão e acidentes são reais — por isso é fundamental ter um plano eficaz para uma rápida recuperação. Se os danos são inevitáveis, ter um plano B, C… pode minimizar significativamente os prejuízos.

Você é blogueiro? Tem um website ou portal?

Donos de sites e blogueiros têm razões adicionais para se preocupar com backup de todos os seus posts. O provedor pode tirar do ar e remover de seus servidores todo o seu trabalho, se acreditar que termos do seu contrato foram violados.
Veja como se colocar do lado seguro.

O nosso cenário

Neste post, vou mostrar como usar o comando mysqldump para fazer guardar cópias de segurança dos dados armazenados no seu servidor. Se você não se sente à vontade com comandos em modo texto, pode usar uma excelente ferramenta web, chamada phpMyAdmin, que faz o mesmo trabalho com alguns cliques.
Vamos usar algumas variáveis em meio aos comandos, para tentar torná-los mais compreensíveis. Se você não souber como preencher algumas destas variáveis, consulte o administrador do banco de dados. Veja quais são:

  • dbname — o nome do banco de dados
  • dbuser — o nome de usuário que vai acessar o banco. Em alguns casos, vamos usar o root (administrador)
  • dbpass — a senha do usuário do banco
  • dbhost — o servidor em que se encontra o banco. Em uma instalação local, normalmente é localhost

Como fazer backup do banco de dados com o mysqldump

O mysqldump é uma ferramenta eficiente para fazer backup do seu banco de dados na linha de comando, no servidor local ou remoto (via SSH). Ele cria um arquivo .sql com os comandos DROP, CREATE e INSERT. Veja como usar o comando mysqldump como root:

mysqldump -u root -p dbname > backup.sql

No exemplo acima, direcionamos uma cópia integral do banco de dados dbname pro arquivo backup.sql. Todos os comandos sql necessários para a criação de uma nova versão daquele banco, estão incluídos em backup.sql.
Para copiar mais de um banco de dados, separe seus nomes com espaços:

mysqldump -u root -p dbname1 dbname2 dbname3 > backup.sql

Se você quiser fazer backup de todos os bancos de dados do servidor, usar o parâmetro --all-databases torna tudo mais fácil:

mysqldump -u root -p --all-databases > backup-de-tudo.sql

Nota: O comando mysqldump bloqueia o banco de dados enquanto trabalha. Portanto, ele deixa os usuários sem acesso, enquanto está sendo executado. Em casos de bancos de dados muito extensos, ele pode demorar para ser concluído. O bom senso manda avisar os usuários com antecedência e não fazer backups demorados em horários de pico.

Como comprimir o arquivo de backup

Há vários motivos para comprimir o seu arquivo de backup:

  • arquivos de texto .sql grandes, atingem excelentes taxas de compressão;
  • quando comprimidos, podem ser enviados de um ponto a outro na rede muito mais rápido, consumindo muito menos banda;
  • você pode armazenar uma quantidade maior de cópias de segurança em uma mídia física (CD, DVD ou BluRay) ou em uma conta na nuvem.
    • Veja como é fácil realizar este processo, usando o exemplo anterior:

      mysqldump -u root -p --all-databases | gzip -9 > backup-de-tudo.sql.gz 

      Usamos o aplicativo gzip, presente na maioria das distro Linux, com o nível de compressão máximo (9), neste exemplo.
      Para descompactar, posteriormente, use o gunzip:

      gunzip backup-de-tudo.sql.gz

      Como restaurar o backup feito com mysqldump

      Não esqueça de substituir as variáveis pelos valores adequados, a seguir:

      mysql -u dbuser -pdbpass dbname < backup.sql

      Nota: A senha deve ser digitada “grudada” ao parâmetro -p.
      Para restaurar um arquivo de backup comprimido, faça assim:

      gunzip < backup.sql.gz | mysql -u dbuser -pdbpass dbname

      Se você deseja inserir os dados de backup.sql em um banco de dados já existente:

      mysqlimport -u dbuser -pdbpass backup.sql

      Como fazer um backup local e restaurar no servidor remoto

      Aqui, vou descrever o meu modo preferido de fazer backups. O problema é que nem sempre ele é aplicável — alguns provedores proíbem conexões, de fora, ao banco de dados. Ou seja, só aceitam conexões no localhost ou de dentro da sua própria rede. Quando isto ocorre, você recebe a seguinte mensagem ao tentar se conectar:

      mysqldump: Got error: 1045: Access denied for user ... 

      Neste caso, o correto é se conectar ao provedor primeiro. Depois, ao banco de dados. Clique aqui, para saber como se conectar ao MySQL, em um servidor remoto via SSH.
      Uma vez conectado, o mysqldump pode ser usado para realizar o serviço. Veja como:

      mysqldump -u dbuser-local -pdbpass-local dbname-local | mysql -u dbuser-remoto -pdbpass-remoto --host=dbhost-remoto -C dbname-remoto

      Nota: Fique atento, para usar os nomes e senhas corretos. Os valores e nomes locais são possivelmente diferentes dos valores remotos.
      Enfim, muito mais pode ser escrito sobre backups e, com toda certeza, há muitas outras formas de realizá-los para bancos de dados MySQL. O importante, mesmo, é fazê-los com frequência. Não se esqueça disto.

Como recuperar a senha de administrador no Zen Cart?

Vou mostrar como você pode recuperar a sua senha de administrador no Zen Cart, partindo do pressuposto de que pedir a recuperação via email não funcionou. Ainda há esperanças, desde que você seja o admin do site.
Este artigo é voltado para as versões superiores a 1.5.x, mas pode funcionar nas outras. Faça as adaptações cabíveis, caso a sua versão seja diferente, portanto.

LEIA MAIS

Remova o usuário antigo e crie um novo

logoVocê já tentou “de um tudo” – nem pedindo para receber um email com a senha deu certo. Vamos tentar outra abordagem – esta vem direto dos fóruns do Zen Cart.

Crie uma conta temporária

Você pode criar uma conta administrativa temporária no Zen Cart para ter acesso ao painel de controle do sistema de comércio eletrônico.
Para isto, você precisa ter acesso ao banco de dados do servidor em que o Zen Cart se encontra instalado.
Abra o PhpMyAdmin (que o seu provedor deve ter disponível), selecione o banco de dados da sua loja e clique na aba “SQL”. Vamos rodar o seguinte comando:

DELETE FROM admin WHERE admin_name = 'Admin'; 
INSERT INTO admin (admin_name, admin_email, admin_pass, admin_profile) 
VALUES ('Admin', 'admin@localhost', '351683ea4e19efe34874b501fdbf9792:9b', 1);

Não esqueça de alterar os comandos no caso de estar usando prefixos diferenciados nos nomes dos campos – prática comum, quando se está compartilhando o mesmo banco de dados com outras aplicações.

Faça login novamente

Você já pode fechar o PhpMyAdmin e abrir novamente a URL do painel administrativo da sua loja Zen Cart.

Username: Admin
Password: admin

Sem título14
Fique atento para o A maiúsculo da conta Admin.

Exclua a conta Admin e crie uma nova

… e não exatamente nesta ordem. Crie a nova conta primeiro.
Siga os passos:

  • No canto superior direito, clique em Admin Access Management e, em seguida, em Admin Users;
  • Agora, Clique o botão Add User;
  • Preencha com atenção as informações do novo usuário administrativo e selecione o perfil “superuser” para ele;
  • Quando terminar, clique em Insert;
  • Dê um “Logoff” e entre novamente com a nova conta criada;
  • Ao voltar para a tela inicial de administração de usuários, exclua o Admin.

Simples, não? 😉

Zen Cart: Como renomear o diretório admin/ com segurança.

Introdução

Este artigo complementa o artigo sobre como instalar o Zen Cart. Ao final, alguns procedimentos são recomendados para aumentar a segurança do seu site de compras na Internet (ecommerce).
Nas versões mais novas do Zen Cart, este procedimento é mandatório. Você não pode usar o painel de controle administrativo antes de alterar o nome do seu diretório.
Sem título12
Novamente, este procedimento não impede o acesso não autorizado ao seu sistema. Ele apenas o dificulta – uma vez que esconde o testouro dos “malfeitores”.
Nota: Os procedimentos, aqui descritos se referem à versão 1.5.x do Zen Cart. Se você estiver usando uma versão diferente, esteja atento para adequar as instruções à sua realidade.

Como funciona

Ainda que a área administrativa do seu site seja protegida com senha, o manual do Zen Cart recomenda, por segurança adicional, mudar o nome do diretório de acesso a este painel – tornando menos óbvia a sua localização.

Backup

Antes de iniciar este processo, é importante fazer uma cópia de segurança de todos os arquivos do seu sistema de comércio eletrônico e do banco de dados.
Se fazer backup ainda não é um hábito seu, convém adquiri-lo. 😉

O que será feito

O processo será dividido em 2 etapas:

  • mudança do nome do diretório/pasta admin/;
  • teste de login – para certificar de que tudo correu bem.

Mão na massa

Renomeie o diretório admin/

Com o uso do seu programa de FTP ou via SSH, encontre a pasta admin/. Renomeie-a.
Tome o cuidado de não divulgar este novo nome da pasta – ou todo este processo perde seu sentido. É interessante não ‘citar’ esta nova pasta no arquivo robots.txt, caso você o edite futuramente.

Login para testar…

Acesse o diretório renomeado, via web e faça a autenticação.
Por exemplo, em vez de usar a URL http://www.exemplo.com.br/admin, use http://www.exemplo.com.br/novapasta.
Sem título13
Deu tudo certo? Parabéns! Caso contrário, coloque sua dúvida embaixo, nos comments… 😉

Como encriptar um Shell Script com SHC

Neste texto, vou ensinar a baixar, instalar e usar SHC, um programa que encripta o código do seus scritps.
Antes de mais nada, preciso dizer que encriptar seus códigos não é uma prática recomendável. O ideal é documentar todo o script, de forma que qualquer pessoa o possa entender facilmente. Códigos fonte devem ser o mais acessíveis possível — já a informação com a qual eles lidam, é que deve ser restringida.

Se você precisa usar informações, usualmente confidenciais, como senhas, de forma automática, então deve procurar outra solução.
Hmmmm… você ainda está aqui?
bash shell logo on keyboard

Tenha em mente, contudo, que um script codificado através do SHC pode não ser legível para usuários comuns (creio que este seja o seu objetivo) — Contudo, uma pessoa que tenha conhecimento do seu funcionamento pode extrair o código criado pelo software.
Em tempo, SHC quer dizer SHell script Compiler.

Download e instalação

O software de que vamos tratar aqui, foi desenvolvido por Francisco Javier R. Garcia e você vai encontrar sua versão mais atualizada aqui.
Vamos começar com o download do código fonte do programa:


wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz

Uma vez baixado, desempacote e instale:


tar xvfz shc-3.8.9.tgz
cd shc-3.8.9
make

Verifique se tudo correu bem:


./shc -v

shc parse(-f): No source file specified
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script

Crie um shell script de exemplo

Para testar, você pode usar seu próprio script ou pegar este aqui:

#!/bin/bash
echo -n "Quantos numeros aleatorios voce deseja gerar? "
read max
for (( start = 1; start
do
echo -e $RANDOM
done

rode o script:


./alea.sh

Quantos numeros aleatorios voce deseja gerar? 3
24682
1678
491

Encriptando o seu shell script com shc

Use o comando, a seguir, para fazer o trabalho:


./shc -f alea.sh

isto deverá gerar os seguintes arquivos:


ls -l alea*.*

-rwxrw-r--. 1 user group 149 Mar 27 01:09 alea.sh
-rwx-wx--x. 1 user group 11752 Mar 27 01:12 alea.sh.x
-rw-rw-r--. 1 user group 10174 Mar 27 01:12 alea.sh.x.c

Dos quais:

  • alea.sh é o seu script original
  • alea.sh.x é o seu script em formato binário e encriptado
  • alea.sh.x.c é o código fonte do script original em linguagem C

Após transformar o código do seu script, originalmente escrito em Bash para um script em C, o shc o compila, gerando o executável alea.sh.x.
Veja como testar:


file alea.sh

alea.sh: Bourne-Again shell script text executable

file alea.sh.x

alea.sh.x: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

file alea.sh.x.c

alea.sh.x.c: ASCII C program text

Execute o seu script encriptado


./alea.sh.x

Quantos numeros aleatorios voce deseja gerar? 3
7489
10494
29627

Determine uma data de expiração pro seu script

Com o uso do shc, é possível evitar que o seu script seja executado após uma certa data. Se for feita a tentativa de executar um script que já tenha expirado, uma mensagem de erro será exibida na tela.
Crie um novo script, usando a opção “shc -e“, que permite a entrada de uma data de expiração (que deve ser fornecida no formato dd/mm/yyyy:


./shc -e 31/12/2011 -f alea.sh

Veja o que acontece quando alguém tenta executar um script vencido:


./alea.sh.x

./alea.sh.x: has expired!
Please contact your provider

Você pode criar a sua própria mensagem de expiração, para o caso de redistribuir o seu script para pessoas que não falem inglês, por exemplo. Use a opção ‘-m’ para isto.