ler a linha completa em um loop do for

Quando efetuamos um for em shellscript, por padrão ele considera como delimitador espaços, quebras de linha ou tabulações, isso gera  uma dor de cabeça quando temos que tratar nomes e arquivos ou diretórios com espaços.

Para melhor compreensão, abaixo temos um diretório com três arquivos:

Ao efetuarmos um for, ele vai quebrar o último arquivo nos espaços, retornando 5 registros ao invés de 3.

Para solucionar essa questão, podemos utilizar a variável IFS para definir  qual caractere deve ser usado como delimitador.

 

Trocar editor padrão no ubuntu

Quando o ubuntu é instalado, o editor padrão em linha de comando é o nano, porém um das primeiras coisas que sempre faço é instalar o vim.

Mas mesmo após instalar o vim, o editor padrão continua sendo o nano. Pra resolver isso é só usar o alternatives pra trocar o default.

Exemplo da saída do comando:

Basta escolher o editor pelo número e apertar enter. =)

Usuário de SFTP com chroot/jail

Hoje um usuário me pediu acesso ao “ftp” para algumas manutenções que não seriam possível pelo admin do wordpress, e, como bem sabemos, disponibilizar acesso aos arquivos para clientes pode se tornar um inferno caso não seja pensado primeiramente na segurança.

FTP? Nem pensar! Não vou deixar os dados trafegarem nos meus servidores em texto-plano, e usar FTPS iria gerar mais uma preocupação com certificados, datas de expiração etc.

Que tal SFTP? Protocolo criptografado por padrão, sem muita dor de cabeça, integrado direto no sistema operacional, etc ,etc.
Ok, mas e a segurança? Um usuário padrão conectado via SFP fica logado direto na raiz do SO, gerando mais uma preocupação com segurança. Não quero o usuário fuçando nos arquivos do servidor, afinal.

Uma rápida pesquisa e achei algumas alternativas como rssh e rush, mas fiquei horas e horas tentando configurar e testando sem nenhum sucesso, o máximo que consegui foram erros e mais erros.

bom, voltamos então ao oráculo, e eis que surge uma alternativa alterando o subsistema sftp direto no sshd_config que funcionou que é um relógio!

Pra começar, algumas informações importantes:

  • Utilizei como base o ubuntu server 16.04 LTS
  • Nesse ambiente, o arquivo de configuração fica em /etc/ssh/sshd_config, mas isso pode variar se você estiver utilizando outra distro.
  • Normalmente restartar o ssh não derruba sua sessão aberta, mas é bom ficar preparado caso algo errado aconteça
  • No artigo vamos considerar a seguinte situação:
    • Usuário: braz
    • Homedir: /home/braz
    • Todos os comandos são executados como root

E agora, sem mais delongas, mãos de cobra! Digo… Mãos à obra!

Primeiramente, é obrigatório que o diretório /home/braz esteja com usuário e senha root, pra garantir acesso dos usuário do cliente, vamos usar chmod 755.

O shell do usuário não precisa (e nem deve) ser /bin/bash, assim deixarei como /bin/false

A chave aqui será criar um grupo chamado sftponly, todo o usuário nesse grupo sofrerá chroot

Adicionamos o usuário braz ao grupo

Agora vamos editar o arquivo sshd_config.
Primeiramente, vamos comentar a seguinte linha (só colocar um # no começo)

A configuração-chave deve ser sempre depois da declaração do Pam.
Por via das dúvidas, coloque a config no final do arquivo que não tem erro =)

Se tudo esta certo, só restartar o ssh e partir pro abraço!

backup de sites com wget

Recentemente precisei efetuar backup de um site para leitura offline, tinha feito um script mirabolante com wget e sed, convertendo links etc, mas pesquisando melhor descobri que o proprio wget tem opções pra muita coisa.

O comando que usei foi

As opções usadas são:

  • –recursive: backup do site inteiro, de forma recursiva.
  • –domains website.org: não vai seguir nenhum link de fora do domínio especificado.
  • –no-parent: não vai seguir nenhum link que remeta a diretórios anteriores.
  • –page-requisites: obter todos os elementos que compõem a página (imagens, css, etc).
  • –html-extension: usar extensão html.
  • –convert-links: converter links para uso offline.
  • –restrict-file-names=windows: Modificar nomes de arquivos para funcionar em windows
  • –no-clobber: não sobescrever arquvos (para caso o download ser interrompido e ter que recomeçar).

Comandos úteis para o SED

Fonte: http://sed.sourceforge.net/sed1line.txt

Imagem docker lemp/lnmp de fácil uso

Eu uso docker para ambiente de desenvolvimento, logo não preciso de tamanha complexidade com várias imagens dependentes montagem de diretórios cruzados etc.

Para esta finalidade basicamente preciso de um servidor lemp (ou lnmp), que é sigla para “Linux, (e)nginx, mysql e php” e um php myadmin.

Assim sendo criei uma imagem disponível publicamente no docker hub para quem precisa desta finalidade.

Para subir a aplicação com esta imagem, basta criar um docker-composer.yml na raiz de seu projeto com o conteúdo abaixo:

E depois rodar o comando:

A aplicação estará acessível em http://localhost/ e o PHPMyAdmin em http://localhost/pma/ simples assim.

Já está pré-configurado e com todos os grants necessários uma base de dados com o nome de “app” (sem as aspas) para uso na aplicação.

Como uso essa imagem nos meus projetos venho sempre aprimorando ela, então o changelog vai ficar sempre disponível em https://hub.docker.com/r/fbraz3/lnmp/

 

Alguns comandos úteis em docker

Esse comando faz deploy de uma imagem e loga no bash dela

Logar no ssh de um container

Docker-Compose: Subir imagem

Docker-Compose: Descer imagem

Ao logar no ssh, alguns comandos que depoendem da variavel TERM podem apresentar comportamento anômalo (primcipalmente no editor VIM), é só executar esse comando:

Otimizando o Linux com Swapiness

A partir das últimas versões do kernel 2.6.x, o kernel do linux passou a permitir que o usuário controle a partir de qual percentual de uso da memória RAM que será utilizado o swap.

Entretanto não se preocupe com essa questão de versão do kernel, pois atualmente o mesmo está na versão 4.x, então a não ser que você use um linux do tempo das cavernas sua distro terá suporte a esta configuração.

Existem duas maneiras de ver como seu swapiness está configurado:

ou

no caso acima, ele irá utilizar swap a partir de 40% de uso da memória RAM (a configuração se baseia em memória disponível, então use sempre “100 – valor” para aplicar esta definição).

Primeiramente, poemos definir este valor em tempo de execução de forma testar qual valor melhor se adéqua a sua máquina

Acima configuramos para só usar o swap quando a memória RAM estiver 95% cheia (lembre do cálculo mencionado anteriormente).

O único problema é que essa configuração se perde ao reiniciar a máquina, então, para torná-la permanente, basta editar o arquivo /etc/sysctl.conf e adicionar/editar a seguinte linha:

Certo, e qual número eu devo configurar?

A configuração vai depender da quantidade de RAM a máquina, mas por via e regra, quanto mais memória RAM, menor deverá ser o swapiness. 

Em um note com 4GB de RAM que uso pra desenvolvimento, consegui o melhor desempenho setando o número em 5, porém é interessante testar com outros valores antes e tornar a configuração definitiva 😉

criando proxy através do ssh

Eu uso muito esta técnica para efetuar testes em sistemas simulando acesso vindo de redes externas.

Esta dica funciona com qualquer servidor ssh que não possua bloqueios na porta 80 e 443. Logo também é possível o uso em servidores compartilhados!

Pra quem usa linux, é muit fácil, basta executar o comando abaixo no terminal e configurar o navegador para acesso a internet via proxy socks na porta determinada no comando

syntaxe:

exemplo:

No exemplo acima, basta configurar o navegador para acesso via proxy socks5 na porta 4050