Entenda as permissões em sistemas *nix

Algumas pessoas já me pediram explicação sobre permissões no Linux, alegando que não entendem como dar permissão pelo terminal, e essas coisas.
Recentemente tive a oportunidade de explicar a um amigo, lá pelo discord do Mente Binária (http://menteb.in/discord), e então já fomos anotando as informações para montar um POST. Assim, o mesmo conteúdo poderá ser utilizado outras vezes, com outras pessoas.

Então aqui vai uma breve explicação inicial sobre permissões nos sistemas semelhantes à Linux..Vale para *nix na realidade.
A explicação que segue foi preparada com as minhas próprias palavras e uma maneira simples de tentar explicar algo que muitos acham complexo.

Sempre começo informando que permissão é fácil duma vez.. e digo: – “421 – grava esse número.”

Permissões se resumem à possibilidade ou não de Leitura, Escrita e Execução em arquivos ou diretórios.

Cada uma dessas possibilidades, é expressa por números com valores:

Leitura = 4
Escrita = 2
Execução = 1

Por isso a dica de memorizar o número 421.

Leitura em inglês é traduzido como Read
Escrita em inglês é traduzido como Write
Execução em inglês é traduzido como eXecute

Note as letras em destaque em Read/Write/eXecute: r w x

Por isso, quando se dá um comando “ls -l” com o objetivo de listar os arquivos e pastas no diretório atual, se vê algo parecido com:

-rwxrwx--- e outros detalhes como dono, grupo e nome do arquivo

Essas letrinhas aí significam o seguinte:

r significa que esse arquivo tem permissão de leitura (Read)
w significa que tem permissão de escrita (Write)
x significa que tem permissão de execução (eXeCution)

♥Daí surge a pergunta: mas por quê não apenas rwx e sim rwxrwxrwx? Parece que está repetindo. Não parece?
Talvez isso é o que confunde muita gente.

É que são três grupos: rwx pro dono do arquivo… rwx pro grupo do arquivo… e rwx pra outros (ou qualquer um, enfim tudo que não for dono e grupo)
Sempre começa com um traço, e depois os três grupos. Assim:

-[---][---][---] e outros detalhes como dono, grupo e nome do arquivo

Se contarmos quantos rwx tem, vai ver que, em condições básicas de permissão, serão sempre 9. Sendo 3 pra dono 3 pra grupo 3 pra outros.

Agora o 421 numericamente falando, são as permissões de usuários. Para manipular as permissões de um arquivo, usa-se uma matemática de simples soma com esses números.
Se temos um arquivo aaa.txt e queremos deixar sem permissão pra nada, o comando seria:

$ chmod 000 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

---------- aaa.txt

Ou seja, o arquivo está sem permissão alguma. Nem o dono conseguirá ler o conteúdo do arquivo.

Agora, se quiser que o dono do arquivo tenha permissão de leitura, o comando seria:

$ chmod 400 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

-r--------- aaa.txt

Até aqui, estamos aprendendo como manipular essas atribuições de permissões.
Lembrando que no comando chmod, os números passados como argumento se referem a permissão, mas a posição de cada algarismo se refere a dono, grupo e outros…
Por exemplo: agora queremos que só os outros tenham permissão de leitura, então o comando seria:

$ chmod 004 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

-------r-- aaa.txt

Sacou a ideia?
Faça um desenho no papel e tudo fica mais claro.. e aproveite para ir testando num terminal também, claro.

Note que, nos comandos de exemplo de chmod que foram usados até aqui, falamos apenas de permissão de leitura, por isso só trabalhamos no número 4..

Leitura em inglês é Read = 4
Escrita em iinglês é Write = 2
Execucão em inglês é eXecute = 1

Então, pra todos (dono, grupo e outros) terem permissão de executar, o comando seria assim:

$ chmod 111 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

---x--x--x aaa.txt

Ao executar o comando chmod seguido de algum número como argumento, são 3 posições:

$ chmod [][][] algum.arquivo.extensao

A primeira posição é usada para permissão de dono
A segunda posição é usada para permissão de grupo
A terceira posição é usada para permissão de outros (ou qualquer um, enfim tudo que não for dono e grupo)

Na primeira posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de dono (ou leitura, ou escrita, ou execução)
Na segunda posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de grupo (ou leitura, ou escrita, ou execução)
Na terceira posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de outros (ou leitura, ou escrita, ou execução)

E pronto! Isso é o básico de permissão em *nix!

Vamos seguir com mais alguns exemplos para fixar bem o que aprendemos até aqui.
Um comando como esse:

$ chmod 421 aaa.txt

Deixaria o arquivo aaa.txt com as seguintes permissões:

-r---w---x aaa.txt

…pois com o número 421 estamos na realidade atribuindo três posições: [4][2][1]

4 para dono
2 para grupo
1 para outros

Agora um ponto bem importante:
Um arquivo totalmente aberto com todas as permissões para todo tipo de usuário é perigoso, praticamente público, mas o comando para fazer isso seria assim:

$ chmod 777 aaa.txt

Daí o “ls -l” mostraria algo do tipo:

-rwxrwxrwx aaa.txt

Usa-se o número 7 pois quero dar rwx (4+2+1) = 7

Note que temos uma soma matemática aí.

matemática 4+2+1=7 pra dono
matemática 4+2+1=7 pra grupo
matemática 4+2+1=7 pra outros

Ao passo que se compreende a soma, é possível montar a permissão que quiser. Por exemplo:

100 apenas o dono executa.
200 apenas o dono escreve.
300 apenas o dono escreve e executa (2+1=3).
400 apenas o dono lê.
500 apenas o dono lê e executa (4+1=5).
600 apenas o dono lê e escreve (4+2=6).
700 apenas o dono lê, escreve e executa (4+2+1=7).

010 apenas o grupo executa.
020 apenas o grupo escreve.
030 apenas o grupo escreve e executa (2+1=3).
040 apenas o grupo lê.
050 apenas o grupo lê e executa (4+1=5).
060 apenas o grupo lê e escreve (4+2=6).
070 apenas o grupo lê, escreve e executa (4+2+1=7).

001 apenas outros executa.
002 apenas outros escreve.
003 apenas outros escreve e executa (2+1=3).
004 apenas outros lê.
005 apenas outros lê e executa (4+1=5).
006 apenas outros lê e escreve (4+2=6).
007 apenas outros lê, escreve e executa (4+2+1=7).

E o segredo para nunca mais esquecer é praticar.

Veja esse diagrama:

Da autoria de Julia Evans (@b0rk) que é uma excelente professora. Como comentado por ela, existem mais opções avançadas de permissões, tais como setuid, setgid, sticky.
Ainda outra vertente seria a manipulação de permissões ainda usando o comando chmod mas usando as letras ao invés de números, tais como:

chmod +r aaa.txt
chmod +w aaa.txt
chmod +x aaa.txt

Onde se pode manipular permissões para dono, grupo e outros também.

Mas essas linhas ficam então para você pesquisar e continuar a aprender sobre permissões no Linux.

Espero que tenha gostado da explicação e aprendido algo.
E se surgirem dúvidas, poste um comentário aqui que respondo assim que eu puder, se eu souber.

Forte abraço e como sempre muito obrigado pela leitura!

Dúvida cruel, mas não é do Iberê.

Hoje escrevo sobre algo que me encomoda um pouco. O gerenciamento de memória do sistema operacional.
Não conheço a fundo isso não, então por favor não espere qualquer explicação a respeito disso nesse post.

É mais um desabafo junto com algumas dúvidas.

Imagine alguém que tem fome e um sanduiche delicioso em suas mãos. E que sempre termina passando fome pois vem os gulosos e abocanham seu sanduba.
É assim que me sinto quando abro o google-chrome, sublime, discord, e demais aplicativos de uso diário.
E a memória RAM é o meu sanduiche-iche.

Vejo que o consumo de memória em meu computador pessoal está meio alto, então fecho absolutamente todas as janelas, e meço:

vostrolab ~ # free -m
             total       used       free     shared    buffers     cached
Mem:          3942       1012       2929        276          4        345
-/+ buffers/cache:        663       3279
Swap:            0          0          0

Nada satisfeito, faço reboot do computador, e ao voltar, ainda sem nada aberto, meço a memória novamente:

vostrolab ~ # free -m
             total       used       free     shared    buffers     cached
Mem:          3942        808       3134        185          5        382
-/+ buffers/cache:        420       3522
Swap:            0          0          0

Ficam duas perguntas:

A Primeira: Por quê o sistema operacional ‘come’ tanta memória? Convenhamos que 808 mb não é brincadeira não.. mesmo sem ‘nada’ aberto. Dizemos ‘nada’ entre aspas simples pois é sabido que há uma vasta quantidade de sofwares sendo executados, dentre eles o servidor de exibição /usr/bin/X, também o gerenciador de login /usr/sbin/*dm bem como o gerenciador de janelas que escolhi usar, e a própria janela do terminal onde executei o ‘free -m‘.

A Segunda: Por quê dessa diferença de 1012 para 808? Sendo que, em ambos os casos, estou sem ‘nada’ aberto. Estamos falando de 204 mb. Lembra quando seu computador tinha apenas 256 mb de RAM? Isso não faz muito tempo, pouco mais de 10 anos. Então será que existe algum garbage collector que possa limpar essa memória que parece ser morta? Ou ao menos exibir quem está usando quanto e porque.

Enquanto isso, tenho tentado entender esse comportamento, usando e abusando de ferramentas tais como:

NAME
smem – Report memory usage with shared memory divided proportionally.

NAME
gmemusage – graphically display memory used by running processes.

Note também que, por motivos de disco lento, optei por não usar SWAP aqui nessa máquina.
Confesso também que tenho feito uso de comandos para limpeza de memória, cache, e buffer de sistema de arquivos, tais como:

Clear PageCache only. # sync; echo 1 > /proc/sys/vm/drop_caches
Clear dentries and inodes. # sync; echo 2 > /proc/sys/vm/drop_caches
Clear PageCache, dentries and inodes. # sync; echo 3 > /proc/sys/vm/drop_caches
Flush the file system buffer. # sync

Mesmo assim, tudo é muito obscuro e vago.
Sigo tentando compreender.

Se alguém tiver mais informações sobre como se pode entender mais a respeito disso, por favor me ensine.
É preciso ter mais controle sobre o que está sendo armazenado dentro dos pentes de memória.

Xeu pegar outro sanduíche.

Como fazer commit e rollback de snapshot de LVM

Escrevo pra responder a pergunta que o Alan fez no POST Compreendendo-o-uso-de-snapshots-de-unidades-lvm. Muito boa pergunta por sinal.

Ele havia ficado com algumas dúvidas:

1º – Vamos supor que possua um LVMRAIZ para a partição /. Então crio um LVMRAIZ-SNAP. Depois faço um upgrade do SO, mas alguns pacotes estão com problema, se eu remover o LVMRAIZ-SNAP, meu SO volta para a versão anterior?
# lvcreate -L10G vg01 -n LVMRAIZ
# lvcreate -L40M -s /dev/vg01/LVMRAIZ -n LVMRAIZ-SNAP
# yum -y upgrade
# lvremove /dev/vg01/LVMRAIZ-SNAP

2º Imagine o mesmo cenário acima, mas não ocorreu nenhum problema na atualização do SO. Neste caso eu gostaria de consolidar os dados gravados LVMRAIZ-SNAP para LVMRAIZ e então remover o LVMRAIZ-SNAP.
Qual seria o comando?

Como o POST está meio extenso (simplesmente porque eu gosto de usar meu tempo lendo e escrevendo), para ir direto ao ponto, sem precisar ler o post todo:

TL;DR

1º Para voltar atrás, supondo que deu tudo errado na atualização: umount /dev/vg01/LVMRAIZ && lvconvert –merge /dev/vg01/LVMRAIZ-SNAP
2º Qual seria o comando? R: lvremove /dev/vg01/LVMRAIZ-SNAP para descartar o snapshot, tudo correu bem, e seguir adiante.

Para leigos, e para quem tiver tempo pra ler e constatar tudo timtim por timtim, resolvi responder assim pois ambas as perguntas da pra responder com uma simulação pequena!

Então, usei um antigo pendrive de 1GB aqui como teste. Identificado como /dev/sdb.
Percebí isso através do resultado do comando ‘fdisk -l‘ que lista pra mim as informações de disco.

Então, mãos à obra: Criação do volume físico (PV):

vostrolab tmp # pvcreate /dev/sdb
Physical volume “/dev/sdb” successfully created

Veja o amigo aí:

vostrolab tmp # pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 a– 982,50m 982,50m

Informações mais detalhadas sobre o PV podem ser obtidas através do ‘pvdisplay‘.

Agora vamos à criação do volume lógico (VG) que é criado em cima do PV:

vostrolab tmp # vgcreate vg01 /dev/sdb
Volume group “vg01” successfully created

Aí está:

vostrolab tmp # vgs
VG #PV #LV #SN Attr VSize VFree
vg01 1 0 0 wz–n- 980,00m 980,00m

Informações mais detalhadas sobre o VG podem ser obtidas através do ‘vgdisplay‘.

Criei também o volume lógico (LV), tudo conforme nomenclatura sugerida pelo Alan.

vostrolab tmp # lvcreate -L100M vg01 -n LVMRAIZ
Logical volume “LVMRAIZ” created

Aí está:

vostrolab tmp # lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
LVMRAIZ vg01 -wi-a—- 100,00m

Informações mais detalhadas sobre o LV podem ser obtidas através do ‘lvdisplay‘.

Escreví o sistema de arquivos ext4 no LV raiz recém criado, montei e criei alguns arquivos para simular como se fosse meu sistema que quero atualizar os pacotes:

vostrolab tmp # mkfs.ext4 /dev/vg01/LVMRAIZ
vostrolab tmp # mount /dev/vg01/LVMRAIZ /mnt
vostrolab tmp # cd /mnt
vostrolab mnt # echo “numero um” > um.txt
vostrolab mnt # echo “numero dois” > dois.txt
vostrolab mnt # echo “numero tres” > tres.txt
vostrolab mnt # cat *.txt
numero dois
numero tres
numero um

Agora vamos ao ponto: A criação do snapshot e, para responder a primeira parte da questão, a simulação do corrompimento dos pacotes e em seguida o descarte do snapshot.

vostrolab mnt # lvcreate -L40M -s /dev/vg01/LVMRAIZ -n LVMRAIZ-SNAP
Logical volume “LVMRAIZ-SNAP” created

Aí está nosso snapshot (leia logo mais abaixo para entender porquê grifei em vermelho o 0,03):

vostrolab mnt # lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
LVMRAIZ vg01 owi-aos– 100,00m
LVMRAIZ-SNAP vg01 swi-a-s– 40,00m LVMRAIZ 0,03

Agora é hora do ‘yum -y upgrade‘ ou ‘apt-get upgrade‘ para os debian lovers. Ou seja, vamos atualizar e simular como se tivesse corrompido tudo! Fim de carreira? R: Para quem não conhece os snapshots! =) Veja:

vostrolab mnt # echo ‘atualizei e corrompeu’ >> um.txt
vostrolab mnt # echo ‘atualizei e corrompeu’ >> dois.txt
vostrolab mnt # echo ‘atualizei e corrompeu’ >> tres.txt
vostrolab mnt # cat *.txt
numero dois
atualizei e corrompeu
numero tres
atualizei e corrompeu
numero um
atualizei e corrompeu

Note que depois de houveram alteraçoes nos arquivos, o snapshot também apresenta alterações na coluna Data% (0,03 para 0,10):

vostrolab mnt # lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
LVMRAIZ vg01 owi-aos– 100,00m
LVMRAIZ-SNAP vg01 swi-a-s– 40,00m LVMRAIZ 0,10

Ferrou tudo, essa mensagem que coloquei dentro dos txt é como se tivesse corrompido geral meu sistema. Pacotes errados, dependencias mal resolvidas e um monte de problemas. Cenário raro, mas, sejamos francos, também acontece no ambiente Linux. E agora como voltar atrás?

Primeiro passo é desmontar a unidade e em seguida ‘lvconvert –merge’:

vostrolab / # umount /dev/vg01/LVMRAIZ
vostrolab / # lvconvert –merge /dev/vg01/LVMRAIZ-SNAP
Merging of volume LVMRAIZ-SNAP started.
LVMRAIZ: Merged: 100,0%
Merge of snapshot into logical volume LVMRAIZ has finished.
Logical volume “LVMRAIZ-SNAP” successfully removed

Pronto! Snapshot já não existe mais:

vostrolab / # lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
LVMRAIZ vg01 -wi-a—- 100,00m

E o sistema voltou a ser o que era antes de corromper, e-x-a-t-a-m-e-n-t-e como era no momento em que fiz o snapshot.

vostrolab / # mount /dev/vg01/LVMRAIZ /mnt
vostrolab / # cd mnt
vostrolab mnt # cat *.txt
numero dois
numero tres
numero um

Mas ok, até agora fizemos um ‘rollback’ por assim dizer.
E digamos que atualizamos os pacotes de uma outra maneira, de um jeito que deu tudo certo! E agora queremos (e devemos) remover o snapshot de um jeito que as alterações que fizemos no sistema continuem.
Digo ‘devemos’ pois já serviu para o proposto, queremos manter nosso ambiente digital limpo, sem lixo, e como os snapshots tem um limite, a medida que usamos, este limite vai incrementando até que chega o momento que vai inutilizar o snapshot. É sempre bom mantê-los em ordem.

É fácil, e não requer desmontar a unidade. Simplesmente remover com ‘lvremove‘:

vostrolab mnt # lvremove /dev/vg01/LVMRAIZ-SNAP
Do you really want to remove and DISCARD active logical volume LVMRAIZ-SNAP? [y/n]: y
Logical volume “LVMRAIZ-SNAP” successfully removed

Era isso, nossos arquivos permanecem alterados (como se fossem os pacotes atualizados):

vostrolab mnt # cat *.txt
numero dois
atualizei e deu tudo certo
numero tres
atualizei e deu tudo certo
numero um
atualizei e deu tudo certo

Agora sim, com pacotes atualizados, tocamos a vida adiante.

Por: Hudson Murilo dos Santos
Referências: http://www.thegeekstuff.com/2010/08/how-to-create-lvm
https://www.tecmint.com/take-snapshot-of-logical-volume-and-restore-in-lvm/

Desempenho de Websites com Google PageSpeed Insights

Muitos se preocupam com boa pontuação no Pages Speed:
pagespeed_animation
Nesta semana foram corrigidas algumas configurações que ficaram erradas após migrações, e que estavam afetando performance.
Isso é muito importante e pode ajudar na performance de websites. Se precisar de algum apoio, conte conosco!

Ah, dica extra sobre Linux:

Se estiver se perguntando “Como fazer uma animação simples como essa aqui logo acima?“. Bom, é bem simples.

Bate duas fotos(a.k.a. screenshots) por exemplo como foi feito ali no pagespeed, uma na abinha mobile, outra na abinha desktop, e faz o seguinte comando numa pasta contendo apenas essas duas imagens:

$ convert -delay 100 -loop 0 *.png animation.gif

Isso vai gerar um gif com nome animation.gif, que fica passando as duas imagens.

Esse exemplo mostra como gerar um gif a partir de duas imagens png. Mas também é possível fazer com mais!! Quantas forem necessário para sua explicação.

Ótima ferramenta de ensino para tutoriais, blogs, manuais de instrução online(aqueles em html).

Lembrando sempre que o convert é uma ferramenta encontrada dentro do pacote do ImageMagick, então se não tens imagemagick:

$ sudo apt-get install imagemagick imagemagick-common

Por: Hudson Santos
Referência: https://unix.stackexchange.com/questions/24014/creating-a-gif-animation-from-png-files

Monitor de tráfego na interface com tcpdump

Olá pessoal!

Mais um comandinho carta na manga pra nós sysadmins.

Geralmente quando mais precisamos monitorar ou saber quantos mbps estão ‘fluindo’ por determinada inferface, acabamos tendo que instalar pacotes que monitoram largura de banda, tais como iptraf, nethogs, dentre outros.

Mas e quando não tem acesso à Internet. por exemplo e não tem nenhum outro software já instalado pra isso?

# tcpdump -w - |pv -bert >/dev/null #show network throughput

Logicamente, tem que ter o pv instalado, mas provavelmente ja vem instalado por padrão.
Seu output é bem bruto, soma tudo e mostra quanto está passando geral, ou seja, inbound/outbound.

Devem ter maneiras de aperfeiçoar o comando, pra medir apenas inboud, ou apenas outbound, talvez colocando parâmetros a mais ali no tcpdump -w.

Mas para isso teria que fazer mais pesquisas.
Se você descobrir, comenta aí!

Forte abraço!

http://www.commandlinefu.com/commands/using/tcpdump
https://www.cyberciti.biz/open-source/command-line-hacks/pv-command-examples/

letsencrypt: Certificado HTTPS gratuito, automatizado e aberto

Isso mesmo, Let’s Encrypt é uma nova Autoridade Certificadora patrocinada por gigantes como mozilla, facebook, cisco e google-chrome..

Qualquer pessoa que já trabalhou na criação de um site seguro(https) sabe a burocracia que era obter e manter um certificado. Let’s Encrypt automatiza e resolve este problema, permitindo que operadores de sites ativem e gerenciem seu HTTPS com comandos simples. Isso significa:

  • Nenhum e-mail de validação;
  • Sem edição de configuração complicada;
  • Sem certificados expirados quebrando seu site.

E, claro, uma vez que o Let’s Encrypt fornece certificados de graça, não há necessidade de providenciar o pagamento.

Este POST visa descrever como realizar as funções de gestão de certificados mais comuns usando o cliente Let’s Encrypt.

Se quiser aprofundar conhecimento e saber mais sobre como isso funciona nos bastidores, acesse os links nas referências ao final deste POST.

Primeiro passo é acessar seu servidor e fazer uma cópia do cliente letsencrypt:

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto –help

Agora vamos gerar o certificado:

$ ./letsencrypt-auto certonly –webroot –webroot-path /var/www/seu_dominio.com.br –renew-by-default –email webmaster@seu_dominio.com.br –text –agree-tos -d seu_dominio.com.br -d www.seu_dominio.com.br

Logo após a geração, se tudo correr bem, você verá algumas informações importantes tais como essa a seguir. Guarde em local seguro.

IMPORTANT NOTES:
If you lose your account credentials, you can recover through
e-mails sent to webmaster@seu_dominio.com.br.

Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/seu_dominio.com.br/fullchain.pem. Your cert will
expire on 2016-05-26. To obtain a new version of the certificate in
the future, simply run Let’s Encrypt again.

Your account credentials have been saved in your Let’s Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let’s
Encrypt so making regular backups of this folder is ideal.

If you like Let’s Encrypt, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Agora habilite em seu webserver as configurações necessárias apontando para o certificado gerado. Segue as configurações para os webservers mais usados:

Nginx:

listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/seu_dominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seu_dominio.com.br/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

Apache:

Dê uma olhada se há alguma configuração no ports.conf.
Senão, crie um arquivo de configuração para seu domínio: /etc/apache2/sites-available/seu_dominio.com.br-ssl.conf

Com o seguinte conteúdo:

<VirtualHost *:443>
ServerAdmin webmaster@seu_dominio.com.br
ServerName www.seu_dominio.com.br
ServerAlias seu_dominio.com.br
DocumentRoot “/var/www/seu_dominio.com.br/”
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

SSLCertificateFile /etc/letsencrypt/live/seu_dominio.com.br/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/seu_dominio.com.br/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/seu_dominio pf8melp.com.br/chain.pem
</VirtualHost>

…depois faça um link simbólico pra ele dentro de sites-enabled:

ln -s /etc/apache2/sites-available/seu_dominio.com.br-ssl.conf /etc/apache2/sites-enabled/seu_dominio.com.br-ssl.conf

Se quiser fazer o redirecionamento de todo o tráfego entrante de HTTP para HTTPS, use regra 301 do tipo:

server {
listen 80 default;
server_name seu_dominio.com.br www.seu_dominio.com.br;
return 301 https://www.seu_dominio.com.br$request_uri;
}

E se por acaso estiver configurando o certificado num proxy, não esqueça de configurar o proxy para adicionar os cabeçalhos:

    location / {
proxy_pass http://localhost:1234;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

Desta forma, mesmo outros servidores ‘atrás’ do seu proxy terão condições de permanecer em HTTPS para o usuário, como na gravura a seguir:

Para re-validar seu certificado é simples: letsencrypt renew

Por exemplo, usuários nginx poderiam usar um script assim:

#!/bin/sh
if ! /caminho/para/seu/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
nginx -s reload

Para apache:

#!/bin/sh
if ! /caminho/para/seu/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
apachectl graceful

Agora basta fazer o teste pra saber se está tudo OK: https://cryptoreport.websecurity.symantec.com/checker/

Obrigado pela leitura e volte sempre.
Qualquer dúvida fique a vontade para postar nos comentários logo abaixo.

Referências:

Acordo de assinatura: https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf
https://letsencrypt.org/getting-started/
https://letsencrypt.org/howitworks/
https://support.cloudflare.com/hc/en-us/articles/214820528-How-to-Validate-a-Let-s-Encrypt-Certificate-on-a-Site-Already-Active-on-CloudFlare
https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-load-balancing-with-ssl-termination

Documentos a disposição em qualquer dispositivo

Você é daqueles que anda sempre com um HD externo ou pendrive com seus docs?

A google tem uma ótima ferramenta para lhe ajudar.

O Google Drive, possui além do armazenamento dos dados, um editor com funções básicas para você editar seus arquivos.

O melhor de tudo é que você pode baixar o aplicativo em seu dispositivo móvel e ter a possibilidade de ter seus arquivos para consulta e edição a disposição a qualquer hora. Caso você precise dos arquivos em um local sem internet utilize a opção de ter o arquivo offline.

Menu Google Drive

Os editores são parecidos com as ferramentas do Office porém com menos recursos, conforme imagem abaixo do editor de texto.

Exemplo de Menu

Acesse agora mesmo e aproveite essa ferramenta gratuita.

Configurando o VNC no Linux Mint

Este artigo explica como fazer a instalação do x11vnc e configurá-lo para iniciar com o sistema (on boot, Autostart).

Inicialmente, instale os softwares necessários:

sudo apt-get install x11vnc vncserver

Agora, gere uma senha legal para seu x11vnc. Essa senha será requisitada quando alguém tentar conectar em sua máquina, na porta padrão que estará rodando o VNC que é a 5900.

Para gerar a senha:

sudo vncpasswd

Pronto, seu x11vnc está pronto pra executar. Podemos executá-lo e testar com o comando:

x11vnc -rfbauth ~/.vnc/passwd -bg -forever -noxdamage -shared &

Mas a idéia é que inicie automaticamente junto com o gerenciador de login na parte gráfica do nosso linux.
Se você usa o Linux Mint, geralmente terá o MDM gerenciando este processo, então sua configuração de inicialização fica em /etc/mdm/Init.
Portanto, insira a chamada para o seu x11vnc acima da linha ‘exit 0‘ do seu /etc/mdm/Init/Default, como no exemplo:

x11vnc -rfbauth /root/.vnc/passwd -bg -forever -noxdamage -shared &
exit 0

Pronto! Agora basta reiniciar seu computador e terás o VNC configurado, aceitando conexões na porta 5900.

Veja nas referências algumas artimanhas adicionais que dá pra fazer instalando também tk8.4 como por exemplo, manter um tray-icon, permitir ou negar conexões, e avisar com popup sempre que alguém conecta ou desconecta.. Isso pode ser útil pra você.

Por: Hudson Murilo dos Santos

Referências:
http://ubuntuforums.org/showthread.php?t=196572
http://seb.so/vnc-from-boot-without-logging-in-ubuntu-lubuntu-xubuntu-and-mint-lmde/

Migração de mensagens imap

Pesquisando pela Internet, descobri que existe uma maneira muito legal de migração de mensagens entre contas IMAP. De um servidor para outro por exemplo.

Nessas horas é bem comum administradores de rede usarem um cliente de email qualquer como um Thunderbird, Evolution ou o próprio Outlook, e cadastrar a conta antiga e a nova.

Uma vez cadastradas, basta copiar as mensagens e pastas da conta antiga para uma pasta local, e logo em seguida copiar da pasta local para a conta nova.

O problema é que muitas vezes os clientes de email e/ou ambos os servidores são falhos nessa tarefa. Não sincronizam direito. As vezes simplesmente param. Não geram mensagem de erro. Não dizem quais mensagens copiaram com sucesso, e não alertam em qual mensagem parou.

Então, descontente com esta situação, encontrei o imapsync.

É desenvolvido em Perl por Gilles Lamiral, um francês que comercializa este software por 50 euros, mas que também disponibiliza o código opensource para implementação no github. Para instalar em Ubuntu-based é fácil:

[root@localhost]# apt-get install \
libauthen-ntlm-perl \
libcrypt-ssleay-perl \
libdigest-hmac-perl \
libfile-copy-recursive-perl \
libio-compress-perl \
libio-socket-inet6-perl \
libio-socket-ssl-perl \
libio-tee-perl \
libmodule-scandeps-perl \
libnet-ssleay-perl      \
libpar-packer-perl \
libterm-readkey-perl \
libtest-pod-perl \
libtest-simple-perl     \
libunicode-string-perl \
liburi-perl \
cpanminus

Agora, insale manualmente o módulo do Perl Mail::IMAPClient:

  [root@localhost]# cpanm Data::Uniqid Mail::IMAPClient

Faça o download do repositório:

 [user@localhost]$ git clone https://github.com/gilleslamiral/imapsync.git

Dentro da pasta do repositório:

 [user@localhost]$ ./imapsync –host1 imap.server1.com.br –user1 username@dominio.com.br –password1 senha_da_conta_antiga –host2 imap.server2.com.br –user2 username@dominio.com.br –password2 senha_da_conta2

E se por acaso tiver SSL em alguma das contas, é só usar parâmetro:  –ssl1 –port1 993 ou –ssl2 –port2 993

Ao final da execução, o legal é que ele mostra as estatísticas confiáveis:

++++ Calculating sizes on Host2
Host2 folder [Archive]                           does not exist yet
Host2 folder [Drafts]                            Size:         0 Messages:     0 Biggest:         0
Host2 folder [INBOX]                             Size: 232358928 Messages:  3799 Biggest:   5536365
Host2 folder [Junk]                              does not exist yet
Host2 folder [Sent]                              Size:  35289450 Messages:    48 Biggest:  11040301
Host2 folder [Trash]                             Size:         0 Messages:     0 Biggest:         0
Host2 Nb messages:            3847 messages
Host2 Total size:        267648378 bytes (255.25 MiB)
Host2 Biggest message:    11040301 bytes (10.53 MiB)
Host2 Time spent:             20.4 seconds
++++ Statistics
Transfer started on               : Wed Jan 27 18:55:17 2016
Transfer ended on                 : Wed Jan 27 19:46:45 2016
Transfer time                     : 3087.7 sec
Messages transferred              : 1336
Messages skipped                  : 1485
Messages found duplicate on host1 : 0
Messages found duplicate on host2 : 671
Messages void (noheader) on host1 : 0
Messages void (noheader) on host2 : 0
Messages deleted on host1         : 0
Messages deleted on host2         : 0
Total bytes transferred           : 67540850 (64.41 MiB)
Total bytes duplicate host1       : 0 (0.00 KiB)
Total bytes duplicate host2       : 54656054 (52.12 MiB)
Total bytes skipped               : 100381257 (95.73 MiB)
Total bytes error                 : 0 (0.00 KiB)
Message rate                      : 0.4 messages/s
Average bandwidth rate            : 21.4 KiB/s
Reconnections to host1            : 0
Reconnections to host2            : 0
Memory consumption                : 133.2 MiB
Biggest message                   : 5536303 bytes
Initial difference host2 – host1  : -311 messages, 32149440 bytes (30.66 MiB)
Final   difference host2 – host1  : 1026 messages, 99726271 bytes (95.11 MiB)
Detected 0 errors

New imapsync release 1.678 available
Homepage: http://imapsync.lamiral.info/

Referências:

http://imapsync.lamiral.info/INSTALL.d/INSTALL.Ubuntu.txt
https://github.com/gilleslamiral/imapsync

bash: acessar display do X com outro usuário

Quem usa linux dificilmente larga o famoso prompt de comando.
Isso se deve ao grande poder e à conhecida versatilidade do BASH.

Entretando, existem sempre algumas dificuldades que a grande maioria passa.
Neste POST está mais uma dessas, bem como a solução.

Talvez você precise executar um programa no modo gráfico, mas com sua inicialização partindo dum comando.
Isso talvez aconteça pois você quer visualizar os erros/outputs deste programa em específico.

Pra isso, simplesmente você faz:

hudson@vostrolab ~/ $ programa

Mas talvez a idéia seja simplesmente executar um programa com outro usuário. Então você pensa:

hudson@vostrolab ~/ $ su – usuario -c “xlogo”

E aí você obtém:

Password:
No protocol specified
Error: Can’t open display: :0

Isso acontece pois as chaves usadas para autenticar sua sessão do X (modo gráfico) não são mais válidas a partir do momento em que você troca de usuário.
Tal medida de segurança parece exagero, mas é uma herança de quando as sessões X eram muito usadas em rede.

Pra resolver essa, basta liberar sua sessão X para autenticar outros usuários, usando o comando xhost.
Isso deve ser feito antes de trocar de usuário.

hudson@vostrolab ~/ $ xhost +local:local
non-network local connections being added to access control list
hudson@vostrolab ~/ $ su – usuario -c “xlogo”
Password:
hudson@vostrolab ~/ $

xlogo foi usado como exemplo de aplicação, pois abre uma simples ‘janela’ na tela.
Nesse ponto da execução, você deve ver sua aplicação normalmente, seja um mozilla ou um thunderbird =).

Não esqueça de desfazer a autorização com o ‘menos’ ao invés do ‘mais’:

hudson@vostrolab ~/ $ xhost -local:local
non-network local connections being removed from access control list

Referências: http://www.tuxradar.com/content/command-line-tricks-smart-geeks