Eu e o Linux (unices-like)

Me apaixonei por esse sistema na década de 90 sob as mãos de uma empresa chamada Conectiva, talvez a primeira empresa brasileira a criar uma distribuição Linux. Desde então, me estabeleci proficiente com este sistema, na década de 90 até mais ou menos 2005, nada era nas nuvens, quase tudo era resolvido com um servidor Linux: arquivos, MTAs, banco de dados, bind(dns), … era quase tudo mesmo, podíamos até entender porque a Microsoft se sentiu ameaçada na época. Vou mencionar os cenários com Linux que me tornei experiente em administrar e resolver problemas:

  • Terminal: preferencialmente bash ou quando usando ssh gosto de acrescentar o screen ou tmux para evitar perda de sessão por causa de instabilidade na internet;
  • Compilar dos fontes: ler documentação, compilar e instalar não é problema, mesmo que envolva a aplicação de patches (diff, patch);
  • Kernel: Caso seja preciso – hoje é incomum – personalização do kernel Linux (make menuconfig) e aplicação de patches em formato tarball;
  • SSH: SSH e suas ações derivativas por tunelamento, por exemplo, TFTP ou servidor X me são familiares.
  • Virtualização: Ambiente virtualizado Xen, VirtualBox e Microsoft Hypervisor;
  • Serviços: Já implementei muitos serviços em Linux como SAMBA, Postfix, NAMED (dns), SQUID(Proxy), Firewall com IPTables; Alguns deles suficiente para instalar e implementar como requerido e outros com especialidade.
    • SAMBA: Implementei este servidor de arquivos com de-duplicação, antivírus integrado e lixeira.
    • IPTables envolve muitas vezes fazer ajustes de switches e roteadores além de implementar scripts bash e também arquivos de autoconfiguração para navegadores(autoconfig.pad) e dns;
    • Proxy(SQUID): Com balanceamento de carga, autenticação LDAP e Active Directory (com ou sem SSO)
    • SMTP: Tradicional ou Smart Relay.
  • Bash: Programação de scripts usando bash é bastante comum. Automatizei muitas tarefas usando apenas bash como por exemplo disparar uma ação no servidor quando um email em específico é recebido numa conta específica.
    • Criação de menus de ações automatizadas, muito útil para delegar ações perigosas para colaboradores menos experientes. Por exemplo, gerenciar usuários num ambiente linux, adicionar/remove sites livres num proxy, adicionar rotas iptables, etc… através de menus intuitivos.
  • Linguagem Python: com a mesma experiencia que uso o bash também uso Python para automatizar tarefas que requeiram recursos que não seriam possíveis usando bash, por exemplo, acessar base de dados averiguando situações e depois executar procedimentos e até mesmo produzir relatórios ou páginas em servidores web;
    • Um exemplo de scripts pyhton é o backup de maquinas virtuais Xen em discos externos, como sabem, o backup desse tipo de serviço é na realidade uma transferência VM rodando para o disco e antes de iniciar o processo é preciso avaliar se o disco de destino tem espaço suficiente, caso não tenha então eliminar o backup mais antigo para receber o novo. Esse tipo de script é o que também faço com Python;
  • Linguagem PHP: como programador nessa linguagem posso tanto desenvolver com ela como implementá-la num servidor apache.
  • Linguagem Node.JS: Iniciei com ela para subverter o python e bash como linguagem para proposito geral no servidor, infelizmente desqualifiquei a linguagem para tal uso, mas o conhecimento obtido ainda pode ser usado em outros contextos.
  • Linguagem SQL ANSI-2002: Qualquer banco de dados compatível me será familiar.
  • Ferramentas de logs: analise de logs com ferramentas awk, grep, silversearch, cut,… tudo redirecionando, copiando e colando usando stdin/stdout de terminal. Sei que existem ferramentas melhores, mas sabendo usar as ferramentas que descrevi posso resolver algumas analises mesmo sem ferramentas caras;
  • Analise de vulnerabilidades de rede: trace, nmap e sniffers me ajudam a encontrar vulnerabilidades. Mas há também uma excelente ferramenta que usei por muito tempo enquanto permaneceu opensource chamada Nessus, com ela conseguia procurar vulnerabilidade em serviços instalados dentro da corporação, hoje a ferramenta é paga e possui outro nome;
  • Vulnerabilidade em arquivos: Faço uso de editores hexadecimal quando desconfio de conteúdo de arquivos. Infelizmente é possivel conteúdos binários dentro de arquivos que tentam ludibriar o sistema operacional ou o administrador de sistemas, por exemplo, se camuflando num conteúdo escrito em UTF-8 invisível aos olhos humanos, mas perceptível usando editores hexa ou desassemblador. Não sou perito em assembler, mas se o código for curto será possivel reconhecer ‘jump’ pulando uma parte de autenticação de sistema, portanto caracterizado como crack;
  • Permissões de arquivos: Links simbólicos para resolver problemas de versionamento de libs ou melhorar a orgânização de arquivos. Comandos como chmod (c/ bitstick) e chown são comuns para mim.
    • Arvores de diretório /usr, /var, /lib, /etc… são bem familiares
    • ACLs: Além do chmod, posso usar o suporte a ACL que é pré-instalado em algumas distros, geralmente em complemento a serviços como SAMBA;
  • Sobre o Linux: É meu sistema preferido porque normalmente esta sempre do mesmo jeito que o deixei, isto é, pronto para trabalhar. Gosto do Windows, mas de tempos em tempos é necessário reinstalá-lo porque seu comportamento fica estranho as vezes. Não acho que Linux seja mais seguro que o Windows, mas certamente o Linux é mais flexivel e simples de entender do que o Windows.

Conhecimentos intermediário e básico nos seguintes cenários:

  • Git, o necessário para versionamento e branchs
  • Linguagens como c/c++, golang(go) e javalang(java). O suficiente para corrigir falhas de compilação devido a mudanças de versão do compilador, dependências ou reprogramar diretivas de compilação

Se eu não tiver todas as habilidades exigidas, tenham paciência porque aprendo rápido!