Categorias
Linux

Crie pacotes

Baixar o código-fonte de uma aplicação e compilar você mesmo. Esta é uma tarefa clara para 90% dos programas que existem por aí, mas pode causar problemas com dependências. Enquanto os vários gerenciadores de pacotes possuem seus meios de trabalhar com as dependências, aqui vai outra.

Quando construir a partir do fonte usando o próprio método padrão de ./configure && make && make install, instale CheckInstall primeiro. Você pode pegá-lo em www.asic-linux.com.mx/~izto/checkinstall caso não esteja nos repositórios da sua distribuição. Execute-o ao invés de make install que, no lugar de instalar os novos arquivos diretamente no seu sistema de arquivos, irá primeiro montar um pacote e então instalá-lo. CheckInstall funciona com pacotes Deb, RPM e Slackware. Você pode especificar o tipo no arquivo de configuração ou esperar que ele pergunte quando executado

./configure && make && checkinstall

Além do tipo de pacote, CheckInstall irá perguntar por outros detalhes. A maioria é opcional ou pode ser deixada no valor padrão, mas tenha certeza de que o nome é igual ao da versão anterior que você está substituindo, ou então o seu gerenciador de pacotes ficará confuso. Instalar com CheckInstall também permite a remoção simples do pacote, pois não há necessidade de manter o diretório fonte por perto e alguns programas nem possuem a opção make uninstall.

Categorias
Linux

Recupere espaço em disco

Ocupar 100% de uma participação pode ter um efeito desagradável no seu sistema. Quando serviços e outros programas não podem escrever nos seus arquivos de log ou não podem salvar dados em /var, você pode estar com problemas. Estes programas não poderão salvar seus dados e tipicamente encerrarão (ou, em alguns casos extremos, quebrar dramaticamente!). Para evitar isto, os sistemas de arquivo ext2 e ext3 reservam 5% da sua capacidade somente para processos root. Esta é uma boa idéia, mas 5% é muito em discos grandes - por exemplo, são 25GB num disco de 500GB. Além disso, não há necessidade de reservar nenhum espaço em um sistema de arquivos que não são usados para arquivos root, como /home.

A boa notícia é que isso pode ser alterado. Tune2fs é utilizado para ajustar vários parâmetros de um sistema de arquivo ext2 (ou ext3). Pode ser usado para trocar a etiqueta de um volume ou o número de montagens entre execução forçada do fsck e a hospedagem de outro, e outras configurações esotéricas, mas as opções nas quais estamos interessados são -m e -r. O primeiro altera o percentual dos blocos do sistema de arquivos reservados para o superusuário, enquanto o segundo usa um número absoluto de bloco. Então:

tune2fs -m 2 /dev/sda1

reduz a área reservada para 2% do sistema de arquivos, o que pode ser mais apropriado se você tem um sistema de arquivos grande em / ou /var. Se você está usando um disco de 500GB ou maior, esta é a melhor opção.

Esta linha de código:

tune2fs -r 0 /dev/sda1

define que o sistema de arquivos não terá blocos reservados, uma boa configuração para /home que não precisa de área reservada para o superusuário.

Categorias
Linux Segurança

Bloqueie os script kiddies

Você já está cheio do seu log de sistema lhe entupir com relatórios de centenas (ou até milhares) de falhas de tentativas de autenticação SSH por script kiddies buscando entrar na sua máquia?

Eles não causam dano enquanto estiverem falhando mas ainda assim incomodam. Mas há algumas maneiras de evitá-las. A melhor - desde que você nunca precise de acesso SSH de fora da sua rede - é fechar a porta 22 do seu roteador, e ninguém poderá entrar. Outra opção é executar um programa como Fail2ban ou DenyHosts. Eles vigiam seu arquivo de log por falhas de tentativas de login repetidas pelo mesmo endereço IP e adiciona o IP nas regras do seu firewall para bloquear qualquer futuro contato do remetente por um tempo.

A terceira opção é ridiculamente fácil. Tentativas de quebra de SSH geralmente assume que o SSH é executado na porta padrão 22; mude para uma alta e aleatória porta e as tentativas de quebra desapareção por mágica. Altere /etc/ssh/sshd_config e modifique a diretiva de escuta para algo como:

Listen 31337

e reinicie o sshd. A única desvantagem disso é a incoveniênica de precisar adicionar esta porta no commando ssh cada vez que você se autentica, mas você pode usar um apelido para lidar com isso:

alias myssh ssh -p 31337
Categorias
Linux

SSH sem senha

Usar SSH para conectar a um computador remoto é conveniente, mas há algumas desvantagens. Uma delas é que você precisa digitar a senha a cada vez que você conecta, o que é incômodo num terminal interativo mas inaceitável em um script, pois você precisa que a senha esteja no script. O outro é que uma senha pode ser quebrada. Uma senha longa, aleatório e complexa ajuda, mas torna as autenticações interativas ainda mais incovenientes. É mais seguro ativar o SSH para funcionar sem senhas de uma vez. Primeiro, você precisa ativar um par de chaves para o SSH usando ssh-keygen como este para gerar chaves RSA (mude o argumento para dsa em chaves DSA).

ssh-keygen -t rsa

Serão criados dois arquivos em ~/.ssh, id_rsa (ou id_dsa) com sua chave privada e id_rsa.pub com a sua chave pública. Copie a chave pública para o computador remoto e adicione-a na lista de chaves autorizadas com

cat id_rsa.pub >>~/.ssh/authorized_keys

Agora você pode sair da sessão SSH e iniciá-la novamente. Você não será solicitado a entrar com senha, embora se relacionar uma frase-senha para a chave você será solicitado a digitá-la. Repita isso para cada usuário e cada computador remoto. Você pode fazer isto de maneira ainda mais segura ao adicionar

PasswordAuthentication no

a /etc/ssh/sshd_config. O SSH passará a recusar todas as conexões sem uma chave, tornando a quebra de senhas impossível.

Categorias
Linux

Conserte senhas corrompidas com chroot

Se você é o administrador de sistema responsável por missões críticas em data centers ou se trabalha em casa, Live CDs são maravilhosos para ter em volta para quando você estiver com um problema. Se você gerencia para bagunçar alguma coisa, você pode iniciar de um Knoppix, Ubuntu, GRML ou um dos outros vários Live CDs, montar as partições do disco rígido e editar qualquer dois arquivos que necessitam de recuperação. Contudo, há algumas coisas que não podem ser corrigidas facilmente, porque elas precisam que você esteja no próprio sistema que precisa de correção.

A solução é usar o comando chroot (mudar root), que configura um ambiente de trabalho dentro de um diretório. Perceba que o root do nome se refere ao root do diretório e não ao usuário root (ou superusuário) embora o usuário root seja o único permitido a executar este comando. Chroot cria um sistema 'enjaulado' dentro do diretório especificado, um que não tem acesso ao restante do sistema e pensa que o diretório informado é o diretório root. Para corrigir uma senha, por exemplo, você deveria iniciar de um Live CD, montar o root do seu sistema de arquivos /mnt/tmp e fazer isto:

sudo -i
mount --bind /dev /mnt/tmp/dev
mount -t proc none /mnt/tmp/proc
chroot /mnt/bin/bash

A primeira linha é necessário para se tornar root no Ubuntu. As duas próximas tornam o /dev/ e o /proc diretórios disponíveis dentro do chroot, e a última entra no diretório que foi configurado executando um terminal Bash. Agora você pode executar passwd ou qualquer outro comando que precisar e encerrar com logout ou pressionando Ctrl-D para sair.

Categorias
Linux

Gulosos por tráfego de banda

Você já percebeu que sua conexão de internet se tornar bem mais lenta mesmo que você não esteja baixando nada? É pela maneira como algumas conexões de banda larga assimétrica são configuradas, se você saturar a taxa de tráfego para enviar arquivos, baixar arquivos se torna quase impossível.

Isto é por causa da maneira como o tráfego é colocado na fila pelo modem e pelo provedor de internet (ISP). Mesmo a mais lenta e mais baixa operação de tráfego, como usar um shell remotamente ou procurar um endereço DNS, se torna dolorosamente lenta ou expira. Se você está usando alguma coisa como um cliente BitTorrent para enviar arquivos, você pode limitar a taxa de envio, que evitará este problema. Alguns outros probramas, como rsync, tem uma característica similar, mas a maioria não possui. Da mesma maneira, executar dois programas assim continuará a causar problemas caso cada um tenha sido permitido a usar 90% do tráfego de envio.

Uma solução é um útil script chamado Winder Shaper. Ele utiliza o comando tc (traffic control) para limitar o uso completo do tráfego de banda para levemente abaixo do máximo disponível. Pege-o em https://github.com/magnific0/wondershaper, coloque o script whaper em alguma pasta - /usr/local/bin é uma boa escolha - e edite o inicio do script para se adaptar ao seu sistema. Defina DOWNLINK e UPLINK para logo abaixo da sua banda máxima (em kilobits/s) e execute-o. Você agora vai perceber que envio de arquivos pesados, como enviar fotos para o Flickr, não irá mais puxar seu modem para baixo. Quando você estiver contente com as definições, configure-o para ser executado na inicialização com qualquer método que sua distro use.

Categorias
Linux

Encontre arquivos perdidos

Alguma vez você salvou um arquivo, talvez um download, e então não conseguiu encontrá-lo? Talvez você o tenha salvo em um diretório diferente ou com um nome incomum.

O comando find é útil aqui:

find ~ -type f -mtime 0

e mostrará todos os arquivos do seu diretório home que forão modificados ou criados hoje. Por padrão, find conta dias a partir da meia-noite, então o valor 0 siginifica hoje.

Você deve ter usado a opção -name com o find antes, mas ele pode fazer muito mais. Estas opções podem ser combinadas, então, se o elusivo download foi um arquivo MP3, você pode reduzir a pesquisa com:

find ~ -type f -mtime 0 -iname '*.mp3'

As aspas simples são necessárias para para evitar que o shell fique tentando expandir o coringa, e -iname torna a combinação insensível ao caso.

Permissões incorretas podem causar erros obscuros algumas vezes. Você pode, por exemplo, ter criado um arquivo no seu diretório pessoal enquanto trabalhava como root. Para encontrar arquivos e diretórios que não peretencem a você, use:

find ~ ! -user ${USER}

O shell define a variável de ambiente USER para o usuário atual, e um ! muda o resultado para o próximo teste, então este comando encontra qualquer coisa no atual diretório do usuário que não pertencem a este usuário. Você pode até usar o find para corrigir permissões

find ~ ! -user $USER -exec sudo chown ${USER}:"{}" \;

A página man do find explica o uso de -exec e muitas outras possibilidades.

Categorias
Linux

A maneira fácil de compartilhar arquivos

O compartilhamento de arquivos com Samba ou NFS é fácil desde que você tenha tudo previamente configurando em ambos os computadores, mas e se você quer apenas transferir um arquivo para outro computador na rede sem o trabalho de configurar programas? Se o arquivos é pequeno, você pode enviá-lo por e-mail. Se os computadores estão na mesma sala e o uso do compartimento USB é permitido nos computadores, você pode usar a porta USB, mas há também outra opção.

Woof é um script Python que pode ser executado em qualquer computador com Linux (ou similar). O nome é um acrônimo para Web Offer One File (A Teia Oferece Um Arquivo), que o define muito bem, como se o fosse um servidor web a um clique. Não há nada a instalar; apenas baixe o script de www.home.unix-ag.org/simon/woof.html e o defina como executável, então compartilhe o arquivo digitando:

./woof /pasta/do/meuarquivo

Isto irá responder com uma URL que pode ser digitada em um navegador em outro computador na rede - nenhum programa além do navegador é necessário. Woof irá disponibilizar o arquivo para aquele computador e então retirá-lo (você pode usar a opção -c para deixá-lo disponível por mais de uma vez). Woof disponibiliza também um diretório, como:

./woof -z /um/diretorio

O diretório será compactado com gzip tarball e enviado, e você pode substituir -z por -j ou -u para ter um arquivo bzip ou tarball descompactado. Se outros gostarem do Woof e quiserem usá-lo, você pode até mesmo dar-lhes uma cópia com:

./woof -s
Categorias
Linux

Controle remoto do MPlayer

Há dois tipos de pessoas neste mundo: aquelas que pensam que o MPlayer é o melhor tocador de mídia na história da existência, e aqueles que estão errados. Uma das características menos conhecidas é a possibilidades de controlá-lo pelo console, um script shell ou até mesmo através da rede. O segredo para este truque está na opção -slave do MPlayer, que diz ao programa para aceitar comandos do stdin stream ao invés das teclas de teclado. Combinar isso com a opção -input e comandos serão lidos de um arquivo ou um FIFO. por exemplo, teste isto num terminal:

mkfifo ~/mplayer-control
mplayer -slave -input file=/home/user/mplayer-control
filetoplay

Então, em outro terminal ou de um script, entre:

echo "pause" >~/mplayer-control

Este comando irá interromper a execução corrente do MPlayer, e ao soltar o comando novamente irá recomeçar a gravação. Note que você tem que dar o caminho completo do arquivo de controle para o MPlayer, com /home/user e daí em diante, porque ~/mplayer-control apenas não irá funcionar. Há vários outros comandos que você pode enviar para o MPlayer - de fato, qualquer operação de teclado no programa dispara um comando que você pode usar no seu script de controle. Você pode até operar o MPlayer de outro computador através da rede usando SSH ou Netcat. Veja este exemplo:

ssh user@host "echo pause >mplayer-control"

Aqui, nós nos autenticamos numa máquina remota (servidor) com o nome de usuário e executamos um comando para enviar a interrupção para o arquivo de controle do MPlayer da máquina remota. É claro, isto pode ser feito muito mais rápido se você tem a chave de autenticação de SSH habilitada para que você não precisa entrar com a senha a cada vez.

Categorias
Linux

Faça suas próprias Bash wormholes

Até mesmo para o Bash aficionado, o comando mkfifo é provavelmente um dos menos usados em sua coleção. Ele cria um sinal para compartilhamento de dados, conectando dois serviços em execução com um tipo de wormhole de linha de comando. Os dados enviadas no final de uma aparecerá instantaneamente na outra.

Antes de olharmos como usá-lo, é válido lembrar como nós tipicamente vemos canalização (ou pipes). Se você está acostumado a usar o shell para qualquer coisa diferente de assustar seus amigos com cat /dev/random, você estará acostumado com a idéia de canalização. Na maioria das vezes é usado para redirecionar a saída de um programa para a entrada de outro. Um uso comum é quando texto demais na saída de um comando para ler. Canalizando a saída em outro - normalmente também menor ou maior - permite que você interrompa e pagine através da saída em seu próprio tempo:

cat /var/log/messages | less

Nesta intância, a canalização é temporariamente criada para a execução de um único comando, mas usando mkinfo é possível criar canalizações persistentes que você pode usar em tarefas similares.

A parte 'fifo' do comando referencia à natureza da canalização - os dados que é o primeiro a entrar é o primeiro a sair. Criar a própria canalização é uma tão simples quando digitar mkfifo, seguido do nome pelo qual você quer chamá-lo. É igualmente possível definir as permissões para a canalização (usando o parâmetro --mode) para restringir o acesso. Uma vez criada a canalização você precisa apenas direcionar os dados por ela. Aqui está um pequeno exemplo. Primeiro criamos a canalização e usamos tail -f para processar a saída de qualquer dado que é enviado para ela:

mkfifo fifo_pipe
tail -f fifo_pipe

O próximo passo, normalmente por outro terminal ou conta de usuário (caso a permissão tenha sido definida), é enviar dados para a canalização. Digitando echo "Um teste" >> fifo_pipe irá enviar a mensagem de teste, que terá a saída processada pelo comando tail que anexamos à canalização.