terça-feira, 13 de setembro de 2016


Fala pessoal, tudo bem? Bom, hoje vim apresentar pra vocês um recurso muito interessante para ser aplicado em servidores linux que possuem um grande acesso de diferentes usuários, onde você precisa limitar o acesso dos mesmos a alguns recursos diretamente na shell, o lshell (Limited Shell).

Basicamente, o lshell fuciona igual ao /bin/bash, mas os usuários que possuem essa shell como padrão só conseguem acessar comandos que você pre define de antemão, tanto como no usuário individual como em sudo.

Instalação do lshell 

O lshell está disponível nos repositórios da maioria das distribuições Linux e não tem segredo na instalação.
 # sudo apt-get update ; sudo apt-get install lshell -y  #Debian Like
 # sudo yum install lshell

Definindo as limitações dos usuários 

O lshell possui muitas formas de controle de acesso ao shell. E pode ser parametrizado tanto por grupos quanto por usuários individuais ou globalmente. Para isso, você precisa editar o arquivo de configuração /etc/lshell.conf. Basimente, as principais diretivas dele são as que estão abaixo:

 # vim /etc/lshell.conf  
 [global]  
 logpath     : /var/log/lshell/  
 loglevel    : 3  
 logfilename   : %y%m%d-%u #Diretorio de Logs separado por usuario. Ao meu ver, �~C© melhor.  
 #logfilename   : syslog  
   
 #Regras aplicadas para todos os usu�~C¡rios  
 [default]  
   
 #Comandos permitidos  
 allowed     : ['ls','echo','cd','ll']  
   
 #Lista de caracteres e parametros proibidos nos comandos. Forkbombs  
 forbidden    : [';', '&', '|','`','>','<', '$(', '${']  
   
 #Lista de comandos permitidos para ser usados como sudo  
 #sudo_commands  : ['ls', 'more']  
   
 #Numero de avisos de Warning antes de desconectar a shell  
 warning_counter : 5  
   
 #Aliases do Bash permitidos.   
 aliases     : {'ll':'ls -l', 'vim':'vim'}  
 
 ## Texto a ser exibido ao iniciar o lshell.
 intro      : "Ambiente restrito  '?' ou 'help' para ver a lista de comandos permitidos." 
 
 #Rodar algum script no login.  
 #login_script   : "/path/to/myscript.sh"  
   
 #Regras aplicadas para os grupos  
 [grp:usuarios]  
 allowed     : ['ls', 'cd', 'cp', 'mv', 'git']  
 forbidden    : ['poweroff', 'reboot', 'init']  
   
 [grp:aws]  
 allowed     : ['ssh', 'cd', 'rm', 'mv', 'git', 'deploymaster', 'deploystage']  
   

Adicionando/Alterando a Shell do Usuário

Alterando a Shell de um usuário já existente
 # usermod -s /usr/bin/lshell usuario  //Ou...
 # chsh -s /usr/bin/lshell usuario   

Criando um usuário com o lshell como default 
 # sudo useradd -m matheus -s /usr/bin/lshell   


Logando com o usuário, e acessando os comandos disponíveis com o 'help', podemos ver que já existe um usuário limitado


Espero ter ajudado :) 

LSHELL :: Criando uma shell limitada para o usuário do Linux

sábado, 27 de agosto de 2016



O Jenkins é um software muito poderoso escrito em Java que faz parte da 'maletinha do DevOps' de muitos projetos e empresas de pequeno, médio e grande porte por aí. Ele é feito para a núvem, e é focado em garantir a qualidade de uma integração contínua, e engloba todas as funções que dizem respeito a controle de versão, build de ambientes customizados, deploy e várias outras funções de dump de banco de dados, integração fácil com a Shell do Linux, que é um fator muito interessante pois te permite executar scripts customizados em shell, Python, Ruby e etc. Vou tentar abordar mais esse tipo de integração em uma série de postagens. Eu vou tentar...

Já utilizei o Jenkins de uma forma mais customizada, onde eu utilizava o mesmo para construir ambientes inteiros, com cópia do banco de dados de produção, clone de uma determinada branch e/ou um determinado commit específico do Github ou Bitbucket, integração com a API da Amazon para gerar um Virtualhost específico para o projeto, tudo isso para testes do cliente, QA e Hotfixes, tudo isso em tempo hábil durante o build. Pra aplicações PHP, eu garanto que é poderoso pra caramba.

Site do projeto: https://jenkins.io/

Instalação do Jenkins.

Instalando o Java 
Como já foi dito, o Jenkins roda em Java, portanto vamos instalar o mesmo.
Via repositório, não tem segredo. Estarei simulando em um ambiente Ubuntu 14.04 para ficar mais fiel a um ambiente AWS. Mas homologuei em Debian 8 Jessie e funciona 100% com esses passos.
 # sudo apt-get install python-software-properties   
 # sudo add-apt-repository ppa:webupd8team/java   
 # sudo apt-get update ; sudo apt-get install oracle-java7-installer   
 
 # Ou...
 # apt-get install openjdk-7-jdk #Caso esteja utilizando Debian 


Instalando o Jenkins no Ubuntu Server / Debian

Primeiramente, vamos baixar a chave GPG do repositório do Jenkins e adicionar o mesmo na nossa lista de sources do servidor. Em seguida, vamos atualizar nossas listas e instalar o pacote
 # wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -   
 # echo "deb http://pkg.jenkins-ci.org/debian binary/" >> /etc/apt/sources.list   
 # sudo apt-get update ; sudo apt-get install jenkins   



Instalando o Jenkins no CentOS/RHEL 7 

Vamos agora fazer os mesmos passos, mas agora em um ambiente Red Hat Like e adiconando as chaves e repositórios nas listas do RPM
 # sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo  
 # sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key   
 # sudo yum install jenkins   


Feito isso, o servidor do Jenkins já vai estar no ar. Ele roda por Default na porta 8080 do sistema. Então basta acessar:

http://ip-do-server:8080



Quando acessarmos pela primeira vez, o Jenkins irá pedir para que informemos o password administrativo que ele gerou. Isso foi implementado nas novas versões. Caso esteja utilizando alguma versão mais antiga, esse passo não vai existir. O mesmo se encontra no arquivo de log /var/lib/jenkins/secrets/initialAdminPassword. Basta copiar e informar na pagina inicial do Jenkins.
 # cat /var/lib/jenkins/secrets/initialAdminPassword  



Após esse passo, será perguntado se você deseja instalar os plugins recomendados ou informar todos que você deseja da lojinha do Jenkins manualmente. Daí vai de você. Se você já sabe exatamente o que você vai usar, vá em frente. No exemplo eu vou seguir os recomendados para não demandar muita enrolação.

 

Após a instalação dos plugins recomendados, você terá de informar a primeira senha de admin. Basta criar a vontade. Mais pra frente você poderá adicionar mais usuários e limitar as permissões dos mesmos dentro do sistema. Após inserir você já será capaz de se logar no sistema. 



Fique ligado aí, assine o feed e siga as redes do blog pra ficar por denro de mais tutoriais de Jenkins para turbinar suas skills de DevOps :D

Jenkins 2.19 :: Instalação do Gerenciador de Build & Deploy para Integração Contínua


Para fazer uso dos respositórios PPA no Debian, é bem simples. Inicialmente iremos adicionar um script nos nossos binários que irá 'emular' o comportamento do add-repository nativo do Ubuntu.

Esse script já era bem antigo na internet, porém eu tomei a liberdade de pegar uma dessas 'versões de fórum e dar uma customizada. Essa versão pode ser encontrada no meu Github. Vou mostrar como fazer manualmente, pra você ter a certeza do que está acontecendo, e depois um simple install que eu fiz pra automatizar esse trabalho.

Github do projeto: https://github.com/msfidelis/PPA-Repository-Debian

Instalando o script manualmente

Abaixo temos o script que vai fazer essa conversão pra gente. Basta copiá-lo e colar num arquivo chamado add-apt-repository.sh
 #!/bin/bash  
   
 if [ $# -eq 1 ]   
     NM=`uname -a && date`  
     NAME=`echo $NM | md5sum | cut -f1 -d" "`  
 then  
     ppa_name=`echo "$1" | cut -d":" -f2 -s`  
   
 if [ -z "$ppa_name" ]  
 then  
     echo "PPA name not found"  
     echo "Utility to add PPA repositories in your debian machine"  
     echo "$0 ppa:user/ppa-name"  
 else  
     echo "$ppa_name"  
     echo "deb http://ppa.launchpad.net/$ppa_name/ubuntu lucid main" >> /etc/apt/sources.list  
     apt-get update >> /dev/null 2> /tmp/${NAME}_apt_add_key.txt  
     key=`cat /tmp/${NAME}_apt_add_key.txt | cut -d":" -f6 | cut -d" " -f3`  
     apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $key  
     rm -rf /tmp/${NAME}_apt_add_key.txt  
 fi  
 else  
     echo "Utility to add PPA repositories in your debian machine"  
     echo "$0 ppa:user/ppa-name"  
 fi  
   

Após copiar criar o arquivo, vamos dar permissão para o mesmo e colocá-lo dentro da pasta /usr/sbin com o nome de add-apt-repository
 # chmod +x add-apt-repository.sh   
 # mv add-apt-repository.sh /usr/sbin/add-apt-repository  

Instalando o script via pacote do Github 

Coloquei todo esse conteúdo no Git com um script mais simples ainda de instalação. Coisa bem besta mesmo, mas que automatiza um certo tempo aí. Primeiramente vamos fazer o clone do projeto e em seguida rodar o script install.sh dentro dele. Ele vai automatizar todo esse processo manual pra gente.
 # git clone https://github.com/msfidelis/PPA-Repository-Debian.git  
 # cd PPA-Repository-Debian/  
 # chmod +x install.sh  
 # ./install.sh  


Adicionando repositórios PPA 

O script basicamente abstrai o nome do repositório informado e adiciona ele no sources.list da maquina. Nada de especial, então basicamente precisamos informar eles da mesma forma que fazemos no Ubuntu.
 # sudo add-apt-repository ppa:ppa-name  

Espero ter ajudado :)




Adicionando repositórios PPA no Debian 8 Jessie

sábado, 20 de agosto de 2016


Esta dica é ideal para pessoas que utilizam computadores ou servidores com pouca memória RAM, como é o caso da T1, T2 da Amazon e etc. Neste post iremos utilizar o zRam, um módulo do Kernel muito simples de se instalar, que já executa todas as suas configurações Default diretamente na inicialização do sistema, cuja função é de criar blocos de memória parecidos com a SWAP, que armazena dados da RAM e os comprime diretamente na memória do sistema.

Essa operação gera um ganho significativo de performance em servidores que necessitem de processos que consumam grande quantidade de memória e poucas threads de processamento. Ele já tem suporte para versões do Kernel acima da versão 3.2 e já vem nativo em algumas distribuições e inclusive em algumas versões do Android. A instalação é bem simples.
 # sudo apt-get install zram-config  # Debian 
 # sudo yum install zram # CentOS

Checando o funcionamento do zram


Podemos ver se o sistema está iniciando, e as operações de movimentação dos blocos de memória através do comando nativo dmesg:
 root@matheus:/home/matheus# dmesg | grep -i zram  
 [  19.458938] zram: Added device: zram0  
 [  19.459214] zram: Added device: zram1  
 [  19.570123] zram0: detected capacity change from 0 to 477995008  
 [  19.577613] Adding 466788k swap on /dev/zram0. Priority:5 extents:1 across:466788k SSFS  
 [  19.578612] zram1: detected capacity change from 0 to 477995008  
 [  19.586030] Adding 466788k swap on /dev/zram1. Priority:5 extents:1 across:466788k SSFS  
 root@matheus:/home/matheus#   

Para ter certeza, vamos consutar o arquivo swaps da pasta virtual de configuração do sistema, pra ver se existe algum dispositivo ativo do zram
 root@casa:/home/andrea# cat /proc/swaps  
 Filename                    Type          Size     Used     Priority  
 /dev/dm-0                partition     1981948     0     -1  
 /dev/zram0               partition     466788     37124     5  
 /dev/zram1               partition     466788     37088     5  
 root@casa:/home/andrea#   

Espero ter ajudado :)

zRam :: Otimizando a memória RAM do Linux

sábado, 13 de agosto de 2016


Fala galera, tudo bem? Hoje vim trazer uma série de dicas bem bacanas pra quem curte utilizar o VIM para automatizar algumas tarefas na hora de edição de arquivos e até mesmo em desenvolvimento. Na verdade, vim trazer uma lista de vários recursos nativos do VIM que podem fazer com que o mesmo se aproxime de uma IDE de desenvolvimento completa na hora de programar scripts direto nos servidores ou localmente mesmo, daí vai de você.

Antes de mais nada, vou advertir que o conteúdo deste post não é para usuários iniciantes, então se você não teve nenhum contato com o VIM como ferramenta de edição de texto, ou está começando, sugiro que dê uma olhada no post que eu fiz explicando alguns comandos diários do VIM.



Setando o Filetype no VIM

Para fazer o vim reconhecer o tipo de arquivo que você está se editando, ou seja, para ele respeitar o destaque de funções específicas da sua linguagem, seja ela PHP, Python, Ruby, Shell e etc, precisamos habilitar o filetype no console do VIM.
 filetype plugin on  

Setando a verificação de Sintaxe no VIM

Para fazer com que o editor reconheça e destaque partes do seu código, como classes, chaves, funções variáveis , constantes e etc, é interessante ligar o Syntax ON no console do VIM
 :syntax on #Set  
 :syntax off #Unset  


Setando a exibição do numero de linhas no VIM 

Para habilitar a exibição do número de linhas no VIM, basta utilizar o set nu. Essa como outras ficas já foram dadas neste post. Mas vou repetir algumas aqui só pra deixar tudo mais enxuto pra quem abrir essa paginazinha do zero. Para retirar a numeração, basta setar o nonu
 :set nu  #Set
 :set nonu  #Unset

Ajustando o Espaçamento nos Tabs

Esta é uma variável que eu prefiro não adicionar no meu .vimrc, porque eu programo em algumas linguagens além do PHP, e isso me incomoda um pouco quando eu vou programar em Javascript ou em Python que eu utilizo espaçamento nos Tabs de 4 enquanto no PHP eu utilizo espaçamento de 2 nos tabs.
 :set expandtab ts=4 sw=4   


Setando o Auto Indent no Vim

Acho que uma das coisas que mais dificultam no desenvolvimento utilizando diretamente o VIM é o fato da indentação de código. Porém para resolver isso existe o Auto Indent no console, conhecido como o parâmetro ai. Após configurar o espaçamento, o Auto Indent irá respeitar certinho o que você definir.
 :set ai  #Set
 :set noai  #Unset

Setando o autocomplete de PHP no VIM

Por default, todos as funções do Omni Completation vem desabilitadas por padrão. No PHP, funciona bem pra caramba, basta setar no console o parâmetro
 :set omnifunc=phpcomplete#CompletePHP  

Enquanto estiver escrevendo alguma função no PHP, basta pressionar o CTRL + x e CTRL + o para abrir as opções de autocomplete.


Dividindo o terminal com outros arquivos utilizando o Split

Para dividir a exibição do editor em várias páginas, utilizamos o comando Split. Podemos abrir mais janelas, já com um documento aberto, ou abrir elas todas de uma vez utilizando o parâmetro -O quando chamamos do vim para editar os arquivos. Para navegar entre os splits, basta utilizar o CTRL+ww
 # vim -O arquivo1.php arquivo2.php arquivo3.php  


Para abrir um documento, já com a janela aberta, basta utilizar no console o comando:
 :split arquivo.php  

Checando análise de erros de sintaxe diretamente pelo VIM

O VIM funciona como um X-Debug integrado, validando praticamente todo o arquivo editado, fazendo várias validações como sintaxe, variáveis não definidas, funções não fechadas e etc. Depois de salvar o arquivo, digite no console:
 :!php -l %  



Abrindo vários arquivos e navegando entre eles

Em alternativa com o Split, podemos reservar toda a tela do terminal para somente um documento, e mesmo assim estar editando vários de uma só vez. Você pode navegar entre os documentos abertos utilizando :n no console para avançar e :N para voltar entre os arquivos, e utilizar :ls para listar os documentos abertos. Para abrir vários documentos, a maneira é bem similar:
 # vim documento1.php documento2.php documento3.php  

Para navegar entre os documentos:
 :n #Ir para o próximo documento  
 :N #Ir para o documento anterior  
 :n documento4.php # Abrir novo documento
 :ls #listar documentos abertos


Persistindo as configurações 

Se você sempre for usar algumas opções de edição, como o autocomplete, o auto indent, a numeração de linhas, não é muito legal ficar sempre setando os parâmetros um atrás do outro sempre que abrir um arquivo. Para isso, nós devemos setar todos os comandos dentro do arquivo .vimrc do usuário.
 $ vim ~/.vimrc  



Update 15/08/2016

Busca inteligente de arquivos no diretório do projeto com CtrlP

Site do projeto: http://kien.github.io/ctrlp.vim/ 

Essa dica veio do Rafael, que trabalha aqui comigo. O Ctrl P é um plugin muito bacana de busca do diretório atual, te possibilitando abrir janelas com os arquivos encontrados a partir do parâmetro buscado. Por exemplo, se eu setar CTRL + P e em seguida digitar "controller" ele vai buscar pra mim todos os arquivos que tenham "controller" no nome.


Instalação do CtrlP

 $ cd ~/.vim  
 $ git clone https://github.com/kien/ctrlp.vim.git bundle/ctrlp.vim  

Com o projeto clonado, edite sem vimrc e adicione a seguinte linha:
 $ vim ~/.vimrc  
set runtimepath^=~/.vim/bundle/ctrlp.vim 


Agora no VIM, rode o comando no console para carregar os helps
:helptags ~/.vim/bundle/ctrlp.vim/doc

Agora só reiniciar seu VIM e digitar um CTRL + P para acionar as buscas

Espero ter ajudado :)


VIM :: Transformando o editor texto em um ambiente de desenvolvimento PHP




O Robomongo é um client de consulta bem bacana e performático para bancos não relacionais de alta performance MongoDB. Ele possibilita configurar várias conexões e realiza as consultas de forme bem simples e intuitiva, possibilitando até mesmo vários modos de visualização e exportação das querys construídas no console pra te auxiliar no desenvolvimento das suas aplicações.

Site do projeto: https://robomongo.org/

Download do projeto:

Faça o Download do software para a sua plataforma no link de Download do site do projeto. Baixando o mesmo vamos descompactar e mover o mesmo para a pasta /opt do sistema.

Link de Download: https://robomongo.org/download

 # wget https://download.robomongo.org/0.9.0-rc9/linux/robomongo-0.9.0-rc9-linux-x86_64-0bb5668.tar.gz  
 # tar xvf robomongo-0.9.0-rc9-linux-x86_64-0bb5668.tar.gz  
 # mv robomongo-0.9.0-rc9-linux-x86_64-0bb5668/ robomongo  ; mv robomongo /opt/
 # cd robomongo/bin/  
 # ./robomongo  


:)


Robomongo :: Um cliente muito poderoso para MongoDB

 
Nanoshots | Open Source Security, Linux e Tutoriais © 2015 - Designed by Templateism.com