Escondendo senhas no shell script - SHC Compilador
28 de Outubro de 2013, 14:43 - sem comentários aindaSou verdadeiramente apaixonado por shell script, é uma linguagem simples, poderosa, flexível e aceitavelmente performática! Entretanto, por tratar-se de uma linguagem script, todo o código escrito fica "legível" e isso pode ser uma falha no quesito segurança, principalmente se o seu script armazenar senhas de acesso e outras informações importantes.Para resolver essa questão podemos utilizar o SHC (SHell Compiler).
Mas o que o shc faz? Basicamente este interessante programa vai pegar o código shell e criar uma tradução em C, tornando desta forma o script compilável. É óbvio que esse tipo de "tradução" vai criar um código genérico e não recomendável para grandes programas feitos em shell, entretanto em um small code, pode ajudar a esconder algumas coisas como por exemplo senhas de acesso a banco e etc...
Vamos exemplificar:
1 - Baixe o shc e descompacte o pacote:
[root@serv]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz
[root@serv]# tar -zxvf shc-3.8.9.tgz
2 - Compile-o
Dentro da pasta do source do compilador:
[root@serv]# cd shc-3.8.9/
[root@serv]# cp shc-3.8.9.c shc.c && make
3 - Copie o binário shc para dentro da pasta /usr/local/sbin e pronto, estamos preparados para compilar nossos scripts!
Criei um pequeno exemplo chamado banco.sh, onde precisamos passar usuário e senha de acesso a uma base mysql:
#!/bin/bash
USUARIO="toronto"
SENHA="123456"
/usr/bin/mysql -u $USUARIO -D teste --password=$SENHA -e "select ip from teste;"
* No exemplo acima, o script conecta no MySQL local e faz uma consulta simples na tabela teste que está na database teste.
Vamos agora compilar esse script com o comando:
[root@serv]# shc -v -f banco.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc banco.sh.x.c -o banco.sh.x
shc: strip banco.sh.x
shc: chmod go-r banco.sh.x
Pronto! Você tem uma versão binária do seu script =)
Perceba que o shc além do binário (que no nosso caso chama-se banco.sh.x) gerou o "banco.sh.x.c", ou seja, você pode compilar usando o gcc também (gcc -o banco banco.sh.x.c).
Enviando mensagens pelo GMAIL através do shell linux
22 de Outubro de 2013, 17:06 - sem comentários ainda Devido a uma recomendação do comitê gestor de internet no Brasil, as operadoras passaram a bloquear o tráfego residencial da porta 25 (SMTP), visando a diminuição do tráfego de spams. Isto é bastante interessante do ponto de vista de segurança, entretanto complicou a vida de sysadmins que precisam de tal recurso para envio de emails legítimos.MTAs como o Sendmail, Postfix e Qmail por causa desse bloqueio, pararam de funcionar em links ADSL, 3G e 4G. Entretanto é interessante ressaltar que este bloqueio é comum em links residenciais, ou seja, caso você tenha um link full corporativo, de qualquer que seja a operadora, o tráfego estará liberado, tendo em vista que a comunicação entre servidores de email ainda é feita por esta porta de acordo com a RFC do protocolo SMTP.
Para sairmos desse aperto podemos utilizar uma solução muito simples, que é a instalação de um cliente de email modo texto no servidor, utilizando desta forma o envio de mensagens através de uma conta em algum provedor do serviço. No nosso exemplo, estamos usando o gmail como serviço de email e o mutt como cliente.
1 - Crie um arquivo .muttrc dentro do home do usuário que vai enviar o email e coloque o seguinte conteúdo no arquivo:
# Lembre-se de alterar os campos com suas informações
set from = "fulano@gmail.com"
set realname = "Fulano de Tal"
set imap_user = "fulano@gmail.com"
set imap_pass = "sua_senha"
set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set postponed ="+[Gmail]/Drafts"
set header_cache =~/.mutt/cache/headers
set message_cachedir =~/.mutt/cache/bodies
set certificate_file =~/.mutt/certificates
set smtp_url = "smtps://fulano@smtp.gmail.com:465/"
set smtp_pass = "sua_senha"
set move = no set imap_keepalive = 900
2 - Crie as pastas dentro da home do usuário:
mkdir -p ~/.mutt/cache/
IMPORTANTE: Para funcionar corretamente você precisa instalar as bibliotecas Cyrus-sasl:
RedHat/Fedora/CenOS --> yum install *sasl*
3 - Envie o email:
Sintaxe:
echo "Corpo do email" | mutt -s "titulo do email" email_de_destino@dominio.com
ou
mutt -s "titulo do email" email_de_destino@dominio.com < arquivo_conteudo_exemplo.txt
Caso tenha anexo, você pode usar o parâmetro "-a nome_arquivo"
Espero que ajude! =)
Palestra: Aumentando a performance e a segurança em serviços web
12 de Abril de 2013, 0:00 - sem comentários ainda
GlusterFS + NFS = PERFORMANCE
23 de Janeiro de 2013, 0:00 - sem comentários ainda Pessoal, certa vez tive a necessidade de fazer um servidor de arquivos redundante para alguns servidores web de forma que, todos o servidores web montassem a mesma pasta compartilhada e esta estivesse sendo replicada entre pelo menos 2 servidores redundantes. Para completar, a parte de alta disponibilidade deveria ser transparente, ou seja, caso algum dos servidores ficasse fora, o outro deveria assumir todo o tráfego e replicar as alterações automaticamente quando o nó problemático fosse restaurado.
Tudo isso parece muito complicado e difícil de implementar sem uma montanha de scripts e softwares, mas em minhas pesquisas para a minha sorte, achei o GlusterFS.
WikiPédia:
GlusterFS é um sistema de arquivos distribuído e descentralizado, criado recentemente e ainda em desenvolvimento pela empresa Z Research. Trata-se de um sistema cujo principal objetivo é a escalabilidade, sendo que para isso seus projetistas utilizaram conceitos da computação de alto desempenho, como a agregação. Este sistema pode executar sobre diversos sistemas operacionais, como Linux, FreeBSD, OpenSolaris e Mac OS X.
Basicamente, GlusterFS agrega múltiplas unidades de armazenamento remotas em um único volume. As unidades de armazenamento, chamadas bricks, são distribuídas pela rede em um único sistema de arquivos paralelo, permitindo uma escalabilidade de milhares de bricks e vários petabytes de armazenamento. Os clientes, que também podem ser simultaneamente servidores de dados, montam os diretórios compartilhados pelos servidores, tendo assim acesso a uma parte ou a todo o conteúdo compartilhado.
Instalação e configuração:
Existem centenas de documentações sobre como instalar e configurar o gluster, sendo assim não vou descrever como fazê-lo. Para ajudar a vida de todos, segue o link de um manual muito bom para uma instalação básica em poucos minutos:
Experiência:
Fiquei muito satisfeito com o GlusterFS no ponto de vista de estabilidade, escalabilidade, alta disponibilidade e facilidade de implementação/manutenção, entretanto como nem tudo são flores, percebi uma diferença de desempenho muito grande se comparado com outros filesystems de rede como o NFS. Apliquei vários tunnings que encontrei pela internet mas não consegui chegar num desempenho excelente, até que com mais pesquisa achei uma solução simples para sanar este problema, a utilização dos dois. Desta forma estariamos utilizando a parte do HA do cliente GlusterFS e a velocidade do Kernel Cache do NFS.
Não queria abrir mão da utilização do cliente GlusterFS (Alta disponilidade), mas ao mesmo tempo queria que a velocidade de IO fosse próxima ao NFS e consegui isso unindo os dois. Como? Simples!
1 - Monte a pasta do GlusterFS, por exemplo:
[root@cliente ~]# /usr/sbin/glusterfs --volfile=/etc/glusterfs/glusterfs.vol /var/filesystems/glusterfs/
2- Compartilhe essa pasta via NFS de forma que apenas o próprio servidor monte alterando o /etc/exports e adicionando a seguinte linha:
* Notem que coloquei para o que cliente monte a pasta NFS com o usuário apache (UUID=48), visando não ter problemas de permissão com o usuário nfsnobody.
3 - Subam o servidor NFS:
[root@cliente ~]# /sbin/service rpcbind start
[root@cliente ~]# /sbin/service nfs start
4 - Para finalizar monte a pasta NFS (que está no mesmo servidor)
[root@cliente ~]# mount -t nfs localhost:/var/filesystems/glusterfs/ -o tcp,vers=3 /var/www
Pronto! Você pode apontar os vhosts do seu apache para dentro da pasta compartilhada /var/www
Enjoy! =)