Restingindo acesso com rbash

Como sysadmins vez por outra a gente precisa dar acesso a clientes, parceiros ou outro tipo de usuário temporário/untrusted aos servidores. Apesar de criar um jail root completo ser a melhor solução muitas vezes é mais trabalho do que o necessário e começa a entrar naquele cenário em que a segurança atrapalha a usabilidade e os negócios. Uma forma simples de conseguir uma segurança bacana é utilizar o modo restrito do bash. Com isso habilitado o shell irá desabilitar as seguintes funções: ...

December 22, 2009 · Eri

VMware nas madrugadas

Quem me acompanha no Twitter já percebeu o grande número de posts com o hashtag #vmware. Mergulhamos fundo em virtualização na empresa e eu ando varando as madrugadas migrando a infra-estrutura. Algumas coisas interessantes para dizer sobre isso… A primeira observação é que a geração anterior de sysadmins a qual eu substituo até começou o processo – mas infelizmente por falta de fundos ou de apoio ou de conhecimento ou, mais provavelmente, de uma combinação dos três – fez uma melança horrível. E acertar esse meio-ambiente previamente virtualizado para o nosso novo vSphere tem sido mais complexo do que o previsto. ...

December 12, 2009 · Eri

Redimensionando discos no Linux

Dica rápida: Se você usa o tanto que virtualização que eu uso já deve ter dado de cara com esse problema: Você cria uma máquina virtual com um disco de x GB e quando vai mandar pra produção alguém pede mais espaço em disco. Uma opção é adicionar outro disco virtual e juntar no seu logical volume do LVM, mas já que o VMware te dá a possibilidade de redimensionar o disco, porquê não usar essa opção? ...

November 13, 2009 · Eri

No limite

Na empresa fornecemos “software as service” para centenas de clientes que preferem ter tudo gerenciado por nós do que ter que lidar com a dor-de-cabeça que é gerenciar sistema operacional + aplicação. É um modelo muito bom pois pagam uma mensalidade e tem o serviço disponível o tempo todo, assim como pagamos mensalidade de eletricidade, telefone e água. Do nosso lado também é bom, pois fica mais fácil garantir a qualidade do hardware, acesso fácil aos servidores e sem nenhum nego fução mexendo em configuração e fazendo caquinha. ...

October 18, 2009 · Eri

Como assistir o Hulu fora dos USA

O Hulu é um serviço bem bacana. Pra quem não conhece é basicamente uma TV on-demand via Internet com todos os seriados e programas das principais emissoras americanas (aka estado-unidenses). Nele dá pra assistir todos os episódios atuais das séries que estão rolando pelo micro. Sem precisar assinar TV a cabo, de graça e com comerciais limitados (normalmente apenas 30 segundos). Além de ser possível assistir pelo browser você também pode usar, por exemplo, o Boxee para isso. E é exatamente o que eu queria. Instalei o Boxee na minha AppleTV e quero assisitir programação do Hulu. ...

September 19, 2009 · Eri

What really matters

August 9, 2009 · Eri

Não reinvente a roda você também

Preâmbulo: Recentemente coloquei no ar o FollowUpTime, que como já disse em outros posts é um sistema de monitoração para redes e servidores. Como podem imaginar, um bocado de linhas de código está envolvida num sistema assim e a conta só do engine principal passa das 90 mil linhas. Isso sem incluir templates, javascripts, etc. O sistema é composto de duas partes: Uma que roda num servidor principal gerenciando a maior parte das tarefas e as “probes”. As probes são pequenos scripts que recebem instruções sobre hosts a serem testados e respondem para o servidor principal com o tempo de resposta, um OK ou um FAIL. Simples assim. São essas probes que temos espalhados por vários cantos do planeta. Porém quando recebi a probe dos desenvolvedores me vi com um pequeno, mas incoveniente problema. Os desenvolvedores realmente optaram pelo princípio KISS. Eles me entregaram uma excelente probe que fazia o que era necessário. E nada mais. Eu tinha nas mãos um daemon que rodava em foreground e jogava mensagens para stdout e stderr e nada mais. Eu não me demorei e ataquei o problema da forma errada, pensando como um programador e não como um administrador Unix. E acabei reinventado a roda. Introdução – O problema Quando percebi o que eu tinha nas mãos logo pensei nos problemas que eu precisava resolver: Preciso iniciar o daemon sempre que der boot na máquina Preciso ser capaz de rodar em daemon em background, ou vai me zoar a seqüencia de boot Posso precisar parar/reiniciar/iniciar manualmente este daemon Se o processo morrer eu tenho que ser notificado e que, de preferência, ele seja reiniciado automaticamente E sim, esse processo não deve rodar como root Já velhaco de Linux logo pensei num script para ser colocado em /etc/init.d/ que ia resolver boa parte dos meus problemas. Com uma combinação bonita de bash scripting, várias ferramentas e comandos Linux que só se conhece depois de muito tempo de casa (como nohup, pidof, &) e gambiarras na crontab eu consegui. Consegui reinventar a roda. Não vou entrar em detalhes da solução que fiz, pois apesar de 100% funcional não era nem de perto tão bonita quanto: A solução – Daemontools Nosso caro amigo D.J.B, autor do famoso Qmail também já passou por um problema parecido com o meu, mas ao invés de criar um solução simples para resolver um problema pontual ele foi mais longe. Ele criou uma solução global que atende o problema dele, o meu e provavelmente também o seu. Na página oficial do daemontools tem uma tabela, que traduzo abaixo, comparando a ferramenta dele com outras abordagens (incluindo a minha, que utilizava init.d): <td width="86" align="center" bgcolor="#2300dc"> <strong><em><span style="font-family: Verdana; color: #ffffff;">inittab</span></em></strong> </td> <td width="86" align="center" bgcolor="#2300dc"> <strong><em><span style="font-family: Verdana; color: #ffffff;">ttys</span></em></strong> </td> <td width="86" align="center" bgcolor="#2300dc"> <strong><em><span style="font-family: Verdana; color: #ffffff;">init.d</span></em></strong> </td> <td width="86" align="center" bgcolor="#2300dc"> <strong><em><span style="font-family: Verdana; color: #ffffff;">rc.local</span></em></strong> </td> <td style="border-right: 1px solid #000000;" width="86" align="center" bgcolor="#2300dc"> <strong><em><span style="font-family: Verdana; color: #ffffff;">/service</span></em></strong> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Não</span> </td> <td style="border: 1px solid #000000;" align="center"> <span style="font-family: Verdana;">Sim</span> </td> Dá para perceber que o cara pensou em tudo e não tem porquê reinventar a roda. Vamos utilizar o daemontools! ...

July 1, 2009 · Eri

Backup LMV via rede (GOA)

Isso é um artigo GOA – Gambiarra Oriented Architecture – Siga sob seu próprio risco. A situação é a seguinte: Você tem uma partição LVM que precisa ser backupeada ASAP em outro servidor na rede. Você tem pouco espaço disponível e precisa disso para ontem. Nào tema! O pré-requisito é que seu volume group deve ter de espaço livre o mesmo ou mais do que o uso real da partição. ...

June 24, 2009 · Eri

De boas intenções…

Já dizia o velho deitado que de boas intenções o inferno está cheio. A pessoa que estou substituindo no novo emprego certamente tinha boas idéias, mas não gostei de como as implementações foram feitas até o momento. Talvez por ser um péssimo programador eu gosto de código limpo, variáveis auto-explicativas e uso extensivo de funções. É o único jeito de eu não me perder dentro do meu próprio código. Ai olhando o que achei até o momento dá no cérebro tentar entender alguns dos scripts. Fora alguns testes do tipo: ...

June 11, 2009 · Eri

Novo trampo – primeiras impressões

E hoje comecei no Canadian Trampo 3.0 e as primeiras impressões são muito boas. A infra-estrutura proporcionalmente ao tamanho da empresa é bem grande. Como fazemos host de aplicações para clientes e o número de clientes é grande acaba que temos mais servidores do que funcionários na empresa. 🙂 Com exceção de dois servidores Windows 2003 (que até o momento não me arrisquei a perguntar quem é o “pai”, mas acho que sou eu mesmo) o resto é tudo nosso good old fellow, o Linux. ...

June 8, 2009 · Eri