Archive for the ‘Linux’ Category

Dica do dia: Logando via ssh sem autenticação

dezembro 18, 2009

A dica de hoje vai ser bem rápida, até porque ela é bem simples.

Acessar servidores via ssh é algo que faz parte da nossa rotina, e ficar toda hora colocando a senha, enche o saco. Mas como fazer para não pedir a senha?

Basta fazer o seguinte:

1.Gere o par de chaves pública/privada, na sua máquina.

ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key: (pressione Enter)
Enter passphrase (empty for no passphrase): (pressione Enter)
Enter same passphrase again: (pressione Enter)

2.Mande a chave pública para o servidor que você irá acessar. Neste momento estamos copiando a chave para o arquivo authorized_keys (do servidor) sem sobrescrever o conteúdo anterior e ainda preservando as permissões corretas.

ssh-copy-id usuario@servidor

password: (informe a senha)

Pronto! Falei que seria rápido. 🙂

Agora é só digite o comando ssh usuario@servidor que você estará conectado no servidor, automaticamente, sem ter que informar a senha.

E para terminar, você pode criar um alias e assim, será possível logar no servidor com apenas um comando (ex. server.opala). 😀

P.S.: Há outra forma de logar no servidor com um comando (sem usar o alias), que foi explicada pelo Antonio nesse post.

Alias – “enganando” o Ubuntu

dezembro 13, 2009

Há pouco tempo atrás, descobri que podemos criar alias para executar comandos no terminal, ou seja, um atalho. Uma funcionalidade muito útil, e que torna a interação mais produtiva ainda no Linux.

Neste breve tutorial, irei explicar um pouco sobre essa funcionalidade, e utilizarei exemplos, testados no Ubuntu 9.10.

O que é o Alias?

alias é um comando capaz de criar um atalho customizado para um outro comando, geralmente utilizado para facilitar a interação.

Um exemplo clássico, é o comando ls, que na verdade é um atalho para ls –color.

Como usar?

O comando alias tem a seguinte sintaxe:

alias [-p] [name[=value] …]

Alguns exemplos de uso:

alias home=’cd /home/seu_usuário/’

alias servidor=’ssh root@192.168.0.100′

alias update=’sudo apt-get update’

alias fstab=’vim /etc/fstab’

Como vocês puderam perceber, a criação de alias permite fazer muita coisa, de uma maneira muito mais simples e rápida. Eu mostrei apenas alguns exemplos, como: acessar um diretório, acessar um servidor via ssh, atualizar o SO e editar um arquivo.

alias é uma funcionalidade útil para qualquer tipo de usuário, desde o usuário comum até um sysadmin. E para aqueles aficionados em atalhos, é interessante criar padrões para o nome do alias, para você não se perder, como por exemplo:

  • Acessar diretório: [nome da pasta a ser acessada]dir
    • musicasdir;
    • homedir.
  • Acessar servidores: [nome do servidor ou servidor do que ele é]server
    • webserver;
    • fuscaserver.

[Início Atualização 17/12/09]

Um padrão bem melhor, é o apresentado pelo Antonio, nos comentários:

Eu prefiro utilizar uma string que classificar o tipo de alias como prefixo do alias, exemplo:
~$: server.fusquinha
~$: dir.home

Uso assim pois desta forma fica fácil de ver os alias de mesma categoria no memento que vou utilizar pois a tecla tab faz o autocomplete, assim eu digito “server. + tab + tab” e o bash me lista todos os alias com o prefixo server.

Isto é só uma forma diferente de organizar os alias.

[Fim Atualização 17/12/09]

Para fechar o post, algo muito importante, como deixar permanente os alias criados, pois da forma que estamos criando, direto no terminal, eles durarão até a sessão ser encerrada.

No Ubuntu, eu descobri duas maneiras de fazer isso, uma porca e a outra certa. Então vamos primeiro ver a maneira porca, que  irá ajudar a descobrir a maneira certa.

Adicionar os alias no final (ou em qualquer parte, para ser de uma forma mais porca ainda) do arquivo bashrc (aliás, é nele que está o alias ls):

vim ~/.bashrc

E se você der uma olhada no arquivo, ele explica a maneira certa de adicionar os seus alias:

# Alias definitions.

# You may want to put all your additions into a separate file like

# ~/.bash_aliases, instead of adding them here directly.

Então agora que sabemos como é a maneira certa. vamos fazer:

touch ~/.bash_aliases (para criar o arquivo bash_aliases)

vim ~/.bash_aliases (agora é só colocar os seus alias nesse arquivo)

Depois de salvar o arquivo bash_aliases com os seus alias, basta reiniciar a sua sessão (reiniciando a sua máquina ou fazendo logout), que você já poderá utilizar os alias criados. 😀

E caso você tenha esquecido o nome completo de algum alias, você pode usar o tab (para completar), e se você esqueceu totalmente o nome do alias, é só executar o comando alias -p no terminal, para que serão listados todos os alias que o seu usuário pode usar. 😉

Notas:

Tutorial testado no Ubuntu 9.10.

Eu e o pinguim

dezembro 12, 2009

Neste post irei falar um pouco sobre a minha experiência e impressões sobre o sistema operacional Linux. Não serei nem um pouco técnico, até porque esse post é mais uma reflexão do que uma análise.

As pessoas que me conhecem, sabem que eu não sou um fanático pelo SO que tem como mascote o pinguim Tux. Também não sou um grande entusiasta do Linux, mas então qual seria a minha relação com o Linux? Acredito que no momento, sou um simples consumidor, e como todo bom consumidor sou bem crítico. 🙂

Antes, acho que é interessante, contar a minha história com o Linux, será  bem resumida:

  • O meu primeiro contato foi na faculdade, se não me engano, no terceiro semestre (no começo de 2007). Eu era totalmente leigo em Linux, e achava estranho utilizá-lo por linha de comando;
  • Ah.. na verdade o meu primeiro contato, foi quando eu usava os computadores públicos na Semasa, no centro de Santo André, mas acho que nem conta, como primeiro contato (rs), pois eu nem sabia o que era Linux (rs), só sabia que aquele SO era diferente (rs);
  • Depois aqui na Voice Technology tive um curto contato com o Linux, quando nós tivemos que fazer um teste de um script, e o ambiente de produção no qual o script era rodado era em Linux, mas precisamente a distribuição Fedora, então tive que instalar, e relembrar o que tinha aprendido na faculdade e também foi uma boa oportunidade para aprender coisas novas, como o gerenciador de tarefas agendadas crontab.
  • E por fim, veio o projeto Basix, e aí não teve jeito, foi a primeira vez que usei o Linux instalado na minha máquina mesmo, nada de máquina virtual. E a partir daí, que eu virei realmente um “consumidor” Linux. 😉

Muita coisa mudou desde 2007 até hoje, acho que posso dizer que hoje, os usuários e os profissionais de TI estão muito mais abertos a novas tecnologias, principalmente as soluções open-source.

Durante o tempo que trabalhei no projeto Basix, pude perceber o poder do Linux, e hoje, realmente acredito que ele é o futuro, e quando digo futuro, é o futuro no mundo desktop, pois em servidores o Linux já é realidade e DOMINA.

Momento caranguejo

Ao comprar o notebook, instalei o Windows XP e o Ubuntu 9.04, aí usava o Ubuntu no trabalho, e o Windows em casa, mas por causa do jogos que não rodam no Ubuntu.

O momento caranguejo, foi ao instalar o Windows 7 e tirar o Ubuntu. Confesso que gostei bastante do Windows 7, ele traz boas melhoras na usabilidade, mas ainda tinha que de vez em quando, apertar ctrl+alt+del para matar algum processo que estava travado. A instalação do Windows 7 ocorreu já quando tinha ido para outro projeto, e nesse ainda estamos definindo qual será o SO, a ser utilizado, então ainda estamos fazendo testes em Windows e Linux, mas acredito que no final iremos utilizar o Linux mesmo. 🙂

E uma das coisas que mais me incomodava no Windows 7 era ter que usar o putty, tanto que eu preferia subir uma máquina virtual com o Ubuntu, só para acessar os nossos servidores via ssh. Além disso, como os usuários de Windows sabem muito bem, esse é um mundo limitado e perigoso, usar anti-vírus também é algo muito ultrapassado (rs). No Windows, o usuário é protegido para não fazer nenhuma ação que possa ocasionar em danos no SO, o Windows é voltado para usuários comuns, e usuários que utilizam as tecnologias da Microsoft, e não era essa a minha realidade, eu não uso do Visual Studio, ou o SQL Server, todos os programas que eu uso, tem uma versão para Linux, exceto o Microsoft Office e o Fireworks, mas para esses eu posso usar uma máquina virtual. 🙂

Eu até comentei no twitter, que: ao usar o Windows eu sinto, q dei um passo para trás uahua … mas p/ trabalhar tem q ser o pinguim

Então, tomei uma decisão, instalar o Ubuntu 9.10 e “tacar fogo” no Windows 7, e fui que eu fiz. 🙂

O que mudou

Hoje me sinto muito mais a vontade usando o Ubuntu do que o Windows, e isso tanto no trabalho quanto em casa.

Abaixo, cito algumas vantagens e desvantagens do uso do Linux, para mim:

  • Vantagens
    • Você não se preocupa com vírus;
    • Com o tempo o seu SO não perde performance;
    • Os aplicativos também travam, mas dificilmente irá travar todo o seu SO;
    • Conhecimento, a cada dia você aprende algo novo usando Linux,;
    • Conexão remota com servidores de forma leve e estável via ssh;
    • Há distribuições que oferecem uma excelente usabilidade;
    • Há aplicações muito boas, exemplos: geditvimRhythmbox, crontab, etc;
    • Você tem total controle sob o seu SO;
    • Não “perco” tempo jogando;
    • Você não precisa gastar um centavo para usá-lo e muito menos ter que utilizar seriais.
  • Desvantagens
    • Nem todas as aplicações foram devidamente testadas, na distribuição que você usa;
    • Há distribuições demais, lógico que há o lado bom e ruim disso, mas eu acho que isso prejudica a adoção do Linux;
    • As versões ficam obsoletas em um curto espaço de tempo, comparado ao Windows;
    • Atualizar a sua versão pelo próprio apt-get, geralmente, faz com que algo pare de funcionar ou tenha um comportamento estranho;
    • Drivers ainda é um problema, e depende muito da sua “sorte” e do fabricante do seu PC/note/net, para mim não foi um grande problema, pois só faltou o driver do leitor óptico (o que não faz muita diferença).

Reflexões finais

Você não precisa usar o SO X porque fulano recomenda, ou porque a maioria das pessoas usam, você tem que usar o SO que melhor atenda as suas necessidades, e esse é um dos fatores que faz que o Windows ainda domine os desktops e o Linux domine os servidores. O Windows muitas vezes já vem de fábrica (eu mesmo comprei um Windows Vista sem querer, venda casada do caramba), e há muitos usuários que apenas usam o computador para tarefas básicas, e por isso eles não vão se dar ao trabalho de instalar um outro SO, e muito menos de aprender comandos.

E para usar Linux, você tem que ter em mente, que você irá sofrer, errar, mas você irá aprender e adquirir muito mais conhecimento do que se você usasse o Windows.

E em breve eu acredito que esse post ficará ultrapassado, pois cada vez mais o nosso “desktop” está na nuvem, eu mesmo mal uso o Open Office, até porque prefiro muito mais o Office, e uso o Google Docs.

Por fim, o que eu quero deixar claro é que você não deve ser um torcedor roxo de uma distribuição ou empresa, pois isso causa uma cegueira incrível. O Windows 7 é um SO muito bom, há muitas distribuições excelentes Linux, recomendo o Ubuntu. Portanto, experimente, até porque, no mínimo você irá ganhar uma opinião em relação aquele SO, e não ficará indo na onda das pessoas, e poderá se surpreender, assim como eu me surpreendi com o Linux. 😀

Aumentando a produtividade com o SSH Config File

abril 23, 2009

Quem trabalha administrando um parque grande de servidores Linux, deve achar meio chato ficar digitando o comando ssh username@host para conectar em cada máquina (eu pelo menos acho, pois temos mais de 30 servidores, e temos que connectar diariamente em cada um deles várias vezes), o arquivo de configuração do cliente SSH conta com uma funcionalidade que pode nos ajudar muito a tornar esta tarefa mais simples e rápida.

Utilizando o arquivo de configuração podemos cadastrar todos os servidores nele, neste cadastro atribuimos um Nome para cada host, e configuramos qual o endereço, porta, e usuário que deve ser utilizado para conectar no Host, desta forma para conectar via ssh em um Host cadastrado é apenas necessário utilizar o comando ssh Host ou invés de ssh username@host, o cliente ssh identifica o nome do Host pega as informações no arquivo de configuração e faz a conexão no endereço, porta, e com o usuário configurado para aquele host, sendo necessário você apenas digitar a senha para finalizar a conexão.

O arquivo de configuração do SSH armazena vários tipos de configurações relacionadas a o SSH Client, neste post irei focar apenas na configuração de Hosts, portanto não entrarei em detalhes dos outros parametros de configuração do mesmo.

Existem 2 arquivos de configuração do SSH, um global que é válido para todos os usuários de uma máquina, e um privado de cada usuário, os parametros e a forma de configurar os dois arquivos são iguais, a única diferença é que um é válido para todos os usuário e o outro apenas para um usuário, abaixo descrevo onde cada arquivo pode ser encontrado:

Publico:

/etc/ssh/config

Privado:
/home/.ssh/config

Abaixo segue um exemplo de como configurar o arquivo:
Host lab-server-001
HostName 192.168.0.21
User root
Port 22

Nesta configuração de exemplo estamos definindo o nome do Host como “lab-server-001”, o memso está no enedereço ip “192.168.0.21”, a porta ssh é “22”, e o usuário que utilizamos para conectar nele é o “root”.

Com esta configuração para connectar neste servidor basta digitar:
asouza@ant-note:~$ ssh lab-server-001
root@192.168.88.17's password:
Last login: Fri Apr 24 00:07:25 2009 from 192.168.191.104
[root@ipx017 ~]#

Aumentando ainda mais a produtividade:

  • Uma das grandes vantagem de fazer a configuração de todos os Hosts que você trabalha é que no Ubuntu o bash faz autocomplete dos Hosts cadastrados, desta forma eu posso apenas digitar “ssh l” pressionar “tab” e o bash vai autocompletar o nome do host (exatamente igual ele faz para os comandos), veja o video abaixo:
  • A outra é para quem utiliza o Gnome-do, ele conta com um plugin do SSH que interpreta o arquivove de configuração desta forma fica muito simples você connectar visualmente no servidor desejado, veja o video abaixo:

Eu criei um arquivo de configuração com todos os servidores que nós da Voice normalmente conectamos (desta forma é só fazer o download do mesmo no enedreço “~/.ssh/config” e desfrutar as novas facilidades adicionadas, este é só para o pessoal da Voice).

Novidades do FileSystem Ext4

abril 4, 2009

O Ext4 é o sucessor do Ext3 (Extended 3), o qual é o file system mais popular no mundo Linux atualmente.
Em outubro de 2008 o “EXPERIMENTAL” do Ext4 no Kernel Linux foi removido, fazendo com que as mais novas distribuições como Ubuntu 9.04 Alpha e Fedora 11 Beta já disponibilizassem a opção de criar uma partição de disco baseada neste novo FileSystem e possivelmente as versões finais virão com o Ext4 como padrão.

Agora, o Ext4 é melhor que o Ext3? Bem, pelo que eu pude ver nas pesquisas que fiz, o Ext4 trás bastante melhorias e várias NOVAS funcionalidades em relação ao Ext3.

Algumas melhorias:
-Suporte a arquivos individuais de 16TB, contra 2TB do Ext3 (Isso com Blocos de 4k)
-Suporte a Tamanho de Sistema de arquivos de 1EB (ExaByte), contra 8TB (Com blocos de 4k)

Agora as Principais novas funcionalidades do Ext4 são:

Extents (Medida):
É o nome da feature que descreve como os dados serão “estabelecidos” (controlados) no disco para armazenar as informações de um arquivo.

O Ext3 usa um método indireto para acompanhar os blocos usados por um arquivo em particular, isso significa que, para cada arquivo ele terá que acompanhar cada um dos blocos pertencentes àquele arquivo. Ex: um arquivo de 100MB vai usar 25,600 blocos de 4KB, então o ext3 terá que acompanhar todos os 25,600 blocos e como eles estão ordenados.. (Nossa!!)
Já o Ext4 usa um tipo de medida (extens), que é uma série contínua de blocos, dessa maneira o Ext4 precisará apenas da informação de início e quantos blocos mais serão usados por essa medida, na qual o arquivo está.
Ganho: menos fragmentação pelo fato do uso de blocos contínuos. Mais performance ao apagar arquivos, pois existem menos informações de controle.

Journaling Checksumming:
No Ext3 as alterações feitas no file system não são efetivadas em tempo real. De tempos em tempos o file system “commita” (confirma) essas mudanças. O Journal é a lista dessas mudanças. Quando o sistema de arquivos se recupera de um crash, ele simplesmente dá um outro commit nesse ultimo journal, com isso voltando à um estado consistente.    O Journaling Checksumming (feature do Ext4) cria um checksum do journal, com isso é capaz de dizer se a área do journal está falhando. Melhora a confiabilidade.

Multi-Block Allocation:
O Ext3 aloca blocos para um arquivo um por vez. Para um arquivo grande, a função que faz essa alocação é chamada milhares de vezes. O Ext4 usa (como o próprio nome já diz) a alocação de múltiplos blocos por chamada da função. Isto melhora consideravelmente o desempenho, especialmente em arquivos grandes.

Delayed Allocation:
No Ext3, blocos são alocados tao logo quanto eles são necessários por uma função de escrita. Na verdade eles não vão ser precisos tão já, porque os dados podem estar no cache por algum tempo. Então o delayed allocation (atraso de alocação, em tradução livre) permite que os blocos possam ser alocados somente quando é realmente preciso escrever os dados. Isto pode realmente melhorar o desempenho porque durante esse tempo (esse “delay”) o alocador pode estar otimizando a alocação de blocos para minimizar a fragmentação e aumentar a performance.

Para não só ficar na ladainha, vou citar aqui um benchmark realizado por Jeffrey B. Layton, em 28 de Março 2009, para a revista Linux Magazine americana.

Ele criou quatro partições, duas usando Ext3 e duas usando Ext4. Em cada um dos Filesystems uma partição apelidada de DEFAULT e a outra PERFORMANCE.
A DEFAULT é uma partição formatada com os parâmetros default, na PERFORMANCE são algumas modificações na qual o objetivo é ilustrar o quanto você pode obter de performance realizando algumas alterações. Os comandos para a criação dos sistema de arquivos foram estes:

% mke2fs -t ext3 /dev/sda1
% mke2fs -t ext4 /dev/sdb1
% mke2fs -t ext3 /dev/sda1
% mke2fs -t ext4 /dev/sdb1

Na partição Ext3 PERFORMANCE os parâmetros de montagem foram estes:

/dev/sda1  /data_ext3   ext3    defaults,data=writeback,

noatime   0 0

Na Ext4 PERFORMANCE os parâmetros foram:

/dev/sdb1  /data_ext4   ext4    defaults,data=writeback,noatime,barrier=0,extents,journal_checksum    0 0

** Este “barrier=0” seria para desabilitar a função barries, o qual é desabilitada no Ext3, para deixar as coisas mais ou menos iguais.

Seguem os resultados obtidos pelo Jeffrey:

Benchmark Ext3 Ext4

Benchmark Ext3 Ext4

O que podemos extrair de cara é que o DEFAULT do Ext4 superou o Ext3 DEFAULT e inclusive o Ext3 PERFORMANCE em write, rewrite, read e reread.
Por este benchmark, dá pra se ter uma idéia que o Ext4 produz SIM mais performance que o Ext3.
E como não se encontra mais em EXPERIMENTAL, acho que vale a pena SIM usá-lo.

Abraços!

Artigo – Iptables básico

janeiro 29, 2009

Retirado do blog Techfree

Há algum tempo estou inclinado a escrever um post com os conceitos básicos sobre o iptables, mas porque? Participo de algumas listas de discussão e muitas vezes percebo que existem pessoas iniciantes que precisam saber o que estão fazendo com seus servidores, pois a maioria deles não vão além da “receita de bolo” que encontrou no Google. Sendo assim, segue abaixo uma breve introdução dessa poderossíma ferramenta que é o Iptables.

IPTABLES

O iptables nada mais é que uma interface utilizada para inserir regras de filtragens e modificação de pacotes, pois com base nessas regras o kernel efetua as ações devidas, mas necessariamente o módulo ip_tables.

Como é uma ferramenta em linha de comando, muitos dos iniciantes sentem um certo temor ao aprender, mas não há o que temer. É bem simples, basta ler e entender.

A linha de comando do iptables escrita é como uma ação que você deseja que seja tomada com um determinado pacote, para isso deverá fornecer parâmetros para o kernel identificar que pacote deseja fazer tal ação.

Exemplo:

Desejo que todos pacotes do ip 192.168.0.2 sejam bloqueados.

iptables -t filter -A INPUT -s 192.168.0.2 -j DROP

Entendeu? Não conhece as sintaxes do iptables ainda? Vamos para as básicas:

Tabelas

O parâmetro -t informa qual tabela será usada. Nesse post só tratarei de filter e em outro post NAT.

Filter é a tabela responsável por armazenar as regras para filtragem de pacotes propriamente dita. Bloqueio ou liberação.

Nat é a tabela responsável por armazenara as regras para modificação do pacote. Modificar a porta de destino, origem e afins.

sendo assim se desejar criar uma regra de filtragem apenas coloque -t filter, se for NAT coloque -t nat

Tipo de inserção

Se houver duas regras com ações distintas para o mesmo tipo de pacote? Depende da ordem de inserção.

Para adicionar uma regra há dois tipos de parâmetros que podem ser utilizados:

-A adiciona a regra no final da fila. Assim se houver muitas, essa será a ultima e se houver regra com parâmetro idênticos, essa nem será lida.

-I adiciona a linha onde desejar. Se omitir o local, será sempre adicionada no topo da fila.

Exemplo:

iptables -I INPUT 3 ….

Será adicionada na linha 3 da fila do INPUT.

Chain ou Fila

O nome correto é chain, mas vou chamar de fila para facilitar o entendimento.

Existem três tipo de fila na tabela filter; INPUT, OUTPUT e FORWARD.

INPUT

—> | Interface |

É a fila que é checada para pacotes que acessam o servidor por uma determinada interface.

OUTPUT

| interface | —->

É a fila que é checada para pacotes que saem do servidor por uma determinada interface.

FORWARD

—–|–interface–|—–>

É fila que é checada para pacotes que passam pelo servidor, ou seja, apenas são redirecionados.

Agora vamos a alguns parâmetros de identificação de pacotes.

O parâmetro abaixo determina:

– i   interface utilizada

-s   ip de origem do pacote

-d   ip de destino do pacote

-p  protocolo utilizado (tcp,udp,icmp)

Obs: Após o parâmetro -p é possível especificar  portas. Tanto de destino, como de origem.

–sport  porta de origem

–dport porta de destino

Existem outros parâmetros que podem ser utilizados, para maiores detalhes acesse essa página(Em inglês).

e por fim é necessário informar qual a ação a ser tomada pelo pacote.

Para isso utilizamos o -j

As ações mais usadas na tabela filter são ACCEPT e DROP.

ACCEPT aceita os pacotes que encaixam nos parâmetros especificados no comando e DROP ignora os pacotes, por fim rejeitando, mas com DROP o usuário não receberá retorno informando que está bloqueada, a requisição apenas será ignorada.

Por fim vamos fazer uma regra para assimilar:

iptables -A INPUT -s 192.168.0.10 -i eth1 -p tcp –dport 80 -j DROP

Traduzindo a regra; Todos os pacotes que têm como objetivo o servidor, como ip de origem 192.168.0.10, que acessarem pela interface eth1, utilizando o protocolo tcp, com porta de destino 80 (web) serão ignorados.

Pronto!

Agora vamos a alguns adendos da tabela filter.

o iptables tem algumas regras padrões, que se chamam políticas. Por padrão as políticas são totalmente permissívas. Assim todas elas já estão com a ação ACCEPT.

Para modificar é simples

iptables -P <chain ou fila> <ação>

exemplo:

iptables -P INPUT DROP

Dessa forma qualquer pacote que acessar a fila INPUT e não tiver nenhuma regra específica será aplicada a regra padrão descita na política. Nesse caso ignorar. Note que não é preciso utilizar o argumento “-j”, antes do DROP.

Maiores informações sobre o desenvolvimento do Iptables pode ser encontrado no site do projeto.

Ubuntu 8.04 Server no VirtualBox 2.0.2

outubro 14, 2008

Após instalar o Ubuntu 8.04 LTS Server Edition no Virtual Box 2.0.2 é exibida a seguinte mensagem durante o boot da máquina virtual:

Starting up …
This kernel requires the following features not present on the CPU:
0:6
Unable to boot – please use a kernel appropriated for your CPU.

Isso acontece pois o kernel padrão do Ubuntu Server utiliza o recurso PAE e a configuração padrão do VirtualBox não habilita suporte a esse recurso na máquina virtual.

Para ativar o PAE edite a configuração da máquina virtual (botão direito, Settings) e ative a opção Enable PAE/NX como indicado abaixo:

Agora é só ligar e se divertir!

Postado originalmente em http://marcoshack.blogspot.com/

Buscando Documentação em um Sistema Linux

setembro 11, 2008

Quinta-feira, dia de um delicioso macarrão com frango. Isso me inspirou a escrever. Que tal um pouco sobre documentação? Documentação sobre … ? Linux uai!! = ))
Hoje veremos como pesquisar sobre aplicativos e programas dentro do próprio sistema Linux!

Introdução
O Linux vem crescendo porque a comunidade que contribui para o sistema e sua documentação não tem medo ou receio de compartilhar isso e coloca o que foi desenvolvido no próprio sistema. Ou seja, antes de recorrermos a ajuda de outras pessoas, devemos lembrar que podemos as respostas que precisamos em nosso próprio sistema.
Toda essa documentação que possuímos no sistema, está disponivel aqui ( pergunta de LPI isso hein… ).
Bom, vamos ao que interessa!

Comando Help
O comando help fornece uma ajuda rápida e útil para saber que opções podem ser usadas com os comandos internos do shell.
Para mostrar todos os comandos disponíveis
#help

Para mostrar uma ajuda rápida de comandos internos
#help [comando]

Para comandos externos
#[comando] –help

O MAN
Man é o responsável por trazer a documentação mais completa sobre determinado comando ou arquivo de configuração. Os manuais são divididos em nivéis.

* man 1 – Programas executáveis e comandos do shell.
* man 2 – Chamadas de sistema (funções providas pelo Kernel).
* man 3 – Chamadas bibliotecas (funções como bibliotecas do sistema).
* man 4 – Arquivos de dispositivo (localizados normalmente em /dev).
* man 5 – Arquivos de configuração e convenções.
* man 6 – Jogos.
* man 7 – Variados (incluindo pacotes de macros e convenções).
* man 8 – Comandos de adminstração do sistema (normalmente usado somente pelo root).
* man 9 – Rotinas de Kernel.

Para usar é fácil
#man [comando]

Podemos também especificar o nivel
#man [nivel] [comando]

Comando Info
As “info pages” são como as páginas de manuais, porém são utilizadas com navegação entre as páginas. Elas são acessadas pelo comando info.
O comando info é útil quando já sabemos o nome do comando e só queremos saber qual a respectiva função.
Para listar todos os manuais
#info

Para especificar um manual de um comando
#info [comando]

Para sair do comando info aperte “q” (sem aspas).

Comando Apropos
O apropos é utilizado quando não se sabe qual documentação acessar para um determinado assunto, mostrando as man pages que contém a palavra-chave que foi especificada.
#apropos [palavra-chave]

O apropos utiliza um banco de dados construído com o comando catman. Para contruir o banco de dados…
#catman

Comando Whatis
Tem basicamente a mesma função do apropos, porém com buscas mais específicas. O apropos busca as páginas de manuais e descrições de maneira mais genérica. Já o whatis busca somente o manual com o nome exato da palavra pesquisada.
#whatis [comando]

Comando Whereis
Usado para mostrar a localização do binário do comando, do arquivo de configuração e a localização das páginas de manuais do determinado comando ou arquivo.
#whereis [comando]
ou
#whereis [arquivo]

Comando Which
O comando witch é bem semelhante ao comando whereis, só que mostra apenas a localização do binário do comando.
#witch [comando]

Howto’s
Os howto’s são documentos que focam a necessidade específica, como montar um firewall, instalar uma webcam, configurar placas de som, configurar um servidor web entre outros. Normalmente esses documentos são instalados juntamente com a aplicação. Algumas vezes é necessário instalar um pacote específico para essa documentação.
O diretório dos howto’s é /usr/share/doc.

Por exemplo, se queremos saber como configurar um servidor Samba, podemos consultar um exemplo prático…
#/usr/share/doc/samba

Espero que tenham gostado =)

Abraço

Wesley Volcov

Centralizando a visualização de logs com Ossec-Hids

setembro 10, 2008

Em um ambiente com um servidor, que precisa ser tolerante à falhas é essencial uma boa olhada nos logs de vez em quando. Mas e no caso de vários servidores a serem monitorados? Pois bem, neste post apresentarei o Ossec-Hids. Uma ótima ferramenta de monitoração de logs, que permite a centralização deles. Então mesmo tendo muitos servidores à monitorar, você vai precisar olhar somente em um lugar. Isso porque o Ossec-Hids funciona como um servidor de logs, recebendo a informação dos clientes e apresentando em uma interface WEB.
Além de apresentar os logs de uma maneira centralizada, o Ossec também faz a checagem de integridade no filesystem. Você terá o controle de arquivos criados, modificados, deletados. Tudo configurável à partir dos arquivos na estrutura xml do Ossec, inclusive as regras de monitoramento e alarme dos logs.
Ah, ía me esquecendo, o desenvolvedor e mantenedor do Ossec é um brasileiro. Bem mãos a obra.

Instalando
Baixe o software aqui.
Descompacte o ossec-hids-1.4.tar.gz.

tar -zxvf ossec-hids-1.4.tar.gz

Rode o ./install.sh.
O script perguntará qual tipo de instalação você fará

  • server – será o server que tratará os logs
  • agent – cliente que enviará os logs pro server
  • local – no caso de apenas um servidor sem agents a monitorar logs.

Escolha server.
A seguir, o script aplicará as RULES (regras) em alguns logs (messages/secure…), compilará os módulos e te perguntará o tipo de arquivo de inicialização rc.d ou red hat like (/etc/init.d).

WEB GUI
Para instalar o WEB GUI você precisará do Apache e PHP
WEB GUI aqui.
Descompacte o arquivo no ROOT do seu apache (ex. /var/www/html).

tar -zxvf ossec-wui-0.2.tar.gz -C /var/www/html</span>\

Entre na pasta e rode o ./setup.sh
Depois adicione o usuário do seu serv. WEB (ex. apache) no grupo OSSEC

gpasswd -a ossec apache

acesse a URL http://localhost/ossec-wui

Agents (clients)

Os clients podem ser tanto Linux como Windows
A versão windows aqui.
A versão Linux é o mesmo tar.gz da instalação do server, você só precisará mudar na hora de escolher o tipo de instalação. Escolha Agent.
Rode ./install.sh.
no tipo de instalação escolha agent
informe o IP do servidor quando for solicitado.

Adicionando os agents
A comunicação entre os agents e o server é criptografada. Para adicionar os agents é necessário uma chave que será criada no server. Para isso, no Server, entre no diretório /var/ossec/bin e rode ./manage_agents.
O comando te lista 5 opções. Para adicionar os agentes escolha a opção “(A)dd an agent (A)”,
informe um nome e o IP do agente (client). Depois de adicionado o agente, será necessário extrair a chave.
Escolha a opção “(E)xtract key for an agent (E)”, o script listará os agentes disponíveis, identificados por um ID. Escolha o agent. E a chave será impressa na tela.
Vá no agent, na pasta /var/ossec/bin e rode o mesmo ./manage_agents. Escolha a opção (I)mport key for the server (I). E cole a chave.
Agora só reiniciar o serviço Ossec

/etc/init.d/ossec restart (no server e no agent).

O Ossec permite muito controle sobre o que é apresentado ou não. No diretório /var/ossec/rules estão todas as regras aplicadas nos logs.
Você pode filtrar uma mensagem específica no log (fazendo uma regex), mandar printar só se aparecer N vezes, enfim, uma infinidade de opções que valem muito a pena serem exploradas.

Ah, e tem o Active Response, que é uma medida que o Ossec toma caso alguma regra que você configurou bata. Ex. colocar um IP em /etc/hosts.deny após algumas tentativas de acessos sem sucesso por ssh, executar comandos específicos, scripts…. Aí é soltar a imaginação.

O site oficial é http://www.ossec.net
Vale muito a pena dar uma olhada no “http://www.ossec.net/main/manual/” para poder filtrar melhor os alarmes.

Até mais e espero que gostem,

Adelson Junior

Usando ACL para permissões avançadas no Linux

setembro 8, 2008

Retirado do site GuiadoHardware.net

Algum um tempo atrás eu me perguntava se só poderiam existir três permissões nos sistemas Unix-Like, a permissão de dono, grupo e outros, o que me limitava bastante, principalmente quando se tratavam de fileservers (servidores de arquivo). Em um sistema Linux (ou Unix), as permissões de arquivos são definidas pelo modo do arquivo, que contém nove bits que determinam as permissões de acesso ao arquivo, mais três bits especiais. Este mecanismo permite definir justamente a permissão para os três tipos de classes de usuários: o proprietário do arquivo, o grupo e outros. Este mecanismo é muito simples, e com uma combinação destes bits, muitas permissões podem ser modeladas.

Utilizávamos Samba na empresa em que trabalhei e precisávamos de mais do que esses três tipos de permissões de usuários em certas pastas, o Linux então já não estava me satisfazendo. A necessidade era definir uma permissão para um grupo e outra para outro grupo, mas como fazer isso sendo que só poderia existir apenas um grupo dono daquela pasta ou arquivo?

Eu sabia que o Microsoft Windows já suportava a bastante tempo esse tipo de permissão, desde que a partição do sistema e/ou qualquer outra que ele fosse administrar estivesse formatada em NTFS, ou seja, você conseguia definir para vários grupos ou vários usuários o tipo de permissão que ele exercia naquele diretório, quantas vezes necessitasse. Um bom exemplo é leitura para certos usuários/grupos, leitura e escrita para alguns outros usuários/grupos, negado para os demais, e o que mais necessitar.

Eu precisava fazer isso, pois algumas aplicações requerem mais permissões do que este modelo que o Unix oferece. Iniciei minha pesquisa em forums e diversos sites (alguns em inglês). Foi então que encontrei as ACL (Access Control List), um sistema muito interessante onde você consegue definir qualquer tipo de permissão para qualquer usuário ou grupo. O Linux já suporta nativamente desde o Kernel 2.6. Com ACL podemos ter um modelo mais refinado de permissões. Além do proprietário do arquivo, do grupo e de outros, que o Unix nos oferece, usuários e grupos adicionais podem ter o acesso modelado, não sendo identificados pelo sistema, simplesmente como “outros” .

Comecei a testar e isso me surpreendeu bastante, enfim, você consegue fazer qualquer permissão do mesmo modo que você faz no Windows. E é suportado por partições ReiserFS, Ext2, Ext3, JFS e XFS.

Explorando

Quando você executa o comando $ ls -l em uma pasta qualquer que não está com as definições de ACL você vê essa saída:

drwxr-xr-x 3 root root 88 2003-09-15 10:07 dhcp3
drwxr-xr-x 2 root root 136 2007-06-01 11:55 dhcpc
drwxr-xr-x 2 root root 144 2005-03-25 00:59 dictionaries-common
drwxr-xr-x 2 root root 88 2006-02-22 18:50 discover.conf.d

Exemplo de saída do ls -l

Observe que o usuário dono é o root e o grupo também é o root, mas não era isso que eu quero que chame a atenção, notem na estrutura da primeira coluna: drwxr-xr-x, significa que d é um diretório, os três primeiros campos são os privilégios do dono do arquivo, no caso rwx é leitura escrita e execução (para que os diretórios possam ser acessados, é obrigatório ter a opção x), a segunda parte (do quarto ao sexto campo) é o grupo, que nesse caso está configurado para somente leitura e execução (r-x), e a terceira parte (do sétimo ao nono campo) são os outros, enfim, qualquer usuário que faça logon nesse computador, tem a mesma permissão do grupo (para esse caso) que é leitura e execução (r-x).

Quando você instala as ACL e personaliza e refina a configuração de permissões do diretório, você vê essa saída com o comando $ ls -l:

drwxrwxr-x 9 usuariodono grupo 288 2007-09-26 10:10 Pasta1
drwxrwx—+ 2 usuariodono grupo 3208 2007-10-02 17:35 Pasta2
drwxrwx—+ 5 usuariodono grupo 85512 2007-10-03 08:59 Pasta3
drwxr-x— 2 usuariodono grupo 1448 2007-09-24 17:07 Pasta4

Exemplo de saída do ls -l

Você pode observar que o primeiro diretório Pasta1 ainda está com as permissões comuns do Linux, sem ACL. Notem os 2 próximos diretórios, no final, onde mostram as permissões comuns, ainda tem um sinal +, que significa que estes diretórios estão personalizados, ou seja, utilizam ACL. Posteriormente você verá como saber afinal qual é a permissão real para esse arquivo, ou ainda, o que tem por trás desse sinal de + se você preferir.

Começando a Instalação das ferramentas

Para começar a instalação das ferramentas, primeiro veja qual é o kernel do seu sistema, para isso utilize o comando:

# uname –a

A saída desse comando deve ser algo parecido com isso:

Linux computador 2.6.17.6-slh-up-1 #1 PREEMPT Sun Jul 16 02:05:58 CEST 2006 i686 GNU/Linux.

Reparem que o kernel que estou utilizando (meio velhinho por sinal), é o 2.6.17.6. Como dito anteriormente, se o seu kernel for o 2.6, ele já suporta as ACL nativamente, ou seja, não necessita de instalação do módulo. Entretanto, se seu kernel não for 2.6 ou superior (por exemplo, kernel 2.4) você deverá instalar o módulo de ACL e recompilar o kernel, o que é um pouco difícil e trabalhoso, portanto não abordaremos nesse tutorial.

Agora depois de checado e o seu kernel, você já pode começar a instalação das ferramentas. Irei me aprofundar mais em distribuições baseadas no debian (apt-get), mas vou comentar sobre distribuições que utilizam urpmi e o yum.

Para instalar as ferramentas de administração de ACL no debian ou outras distros que utilzam apt-get você deve utilizar o comando:

# apt-get update
# apt-get install acl

Para instalar no mandriva ou outras distros que utilizam o urpmi você deve utilizar o comando:

# urpmi acl

Para instalar no fedora ou outras distros que utilizam o yum você deve utilizar o comando:

# yum install acl

Para instalar no SuSE utilize o comando:

# yast2 –i acl

Se você prefere fazer download das ferramantas e instalar manualmente, você pode encontrar para download no site http://acl.bestbits.at/download.html

Habilitando ACL

Depois que as ferramentas de console para uso do ACL forem instaladas, para começar a utilização você deve habilitar a ACL para a partição desejada. Para isso edite o arquivo /etc/fstab, adicione a string “acl” nas opções do sistema de arquivo desejado:

# vi /etc/fstab

Veja abaixo a string “acl” em negrito nas opções:

# /etc/fstab: filesystem table.
#
# filesystem mountpoint type options dump pass
/dev/sda1 / reiserfs noatime,acl,notail 0 1
/dev/sda2 none swap sw 0 0

Se o seu sistema de arquivos (partição) já está montado, você pode reinciar o sistema ou simplesmente remontar a partição:

# mount / -o remount,acl

Configurando ACL

Com a instalação das ferramentas e nenhum erro após habilitar as ACL para o sistema de arquivos, então agora vamos colocar a mão na massa.

Supondo que você tenha um diretório e necessite que dois grupos tenham permissões diferentes, ou ainda personalizar dois usuários para permissões diferentes, vamos imaginar essa situação.

Primeiro vamos criar uma pasta e alterar os donos dela normalmente como se faz:

# mkdir pasta1
# chown user pasta1
# chgrp desenv pasta1

Pronto, criamos o diretório pasta1 e configuramos para que o usuario “user” seja o dono e o grupo “desenv” seja o grupo dono, agora vamos definir permissões para a pasta:

# chmod 750 pasta1

Agora configuramos para que o dono do diretório (usuario “user”) tenha acesso total (rwx), o grupo tenha acesso somente de leitura (r-x) e os outros não tenham nenhum acesso (—) (deny).

Vamos agora refletir, como é que eu poderia definir para que mais usuários tivessem controle total (rwx) sendo que eu preciso que o grupo “desenv” fique com permissões de acesso para somente de leitura? Na verdade não existe como, se você precisa que mais um grupo acesse com controle total (rwx), você teria que trocar as permissões de acesso do grupo “desenv” para controle total (rwx), e acrescentar usuários que necessitam de controle total no grupo “desenv” e mudar a permissão, de modo que o grupo “desenv” obtenha controle total a pasta. Esse tipo de problema acaba, graças a flexibilidade das ACL.

Personalizando/refinando permissões de arquivo com ACL

Para utilizar as ACL vamos usar 2 comandos basicos, setfacl e getfacl, o set é para definir e o get é para saber quais foram as permissões definidas (ou seja o que tem por trás do +)

Supondo que eu tenha o grupo “edita” e quero que esse grupo tenha controle total para a pasta1, você deve utilizar o seguinte comando:

Primeiramente vamos criar o diretório

# mkdir pasta1

Definir para controle total do grupo e usuário (root), e leitura e execução para outros

# chmod 775 pasta1/

Agora vamos executar o comando ls -l para ver o como está sendo exibido:

# ls -l
total 2
drwxrwxr-x 2 root root 1024 2008-05-06 11:41 pasta1

Vamos então aplicar uma ACL simples para que o grupo edita possa ter execução total

# setfacl -m g:edita:rwx pasta1/

Executando o comando ls -l

# ls -l
total 2
drwxrwxr-x+ 2 root root 1024 2008-05-06 11:41 pasta1

Reparem que agora existe um + após os 9 digitos binários, o que significa que existem permissões extras além do já permitido por padrão.

Vamos pegar o resultado agora com o comando getfacl, ele irá nos mostrar como estão aplicadas as ACL (o que tem por trás do +).

# getfacl pasta1/
# file: pasta1
# owner: root
# group: root
user::rwx
user:root:rwx
group::rwx
group:edita:rwx
mask::rwx
other::r-x

Podemos observar que as ACL foram corretamente aplicadas, de modo que o grupo edita é capaz de editar, ler e listar o conteúdo da pasta1.

Agora essa pasta está com as ACL definidas, portanto, podemos testar, entrando com os usuários bloqueados, usuários que são aceitos somente para leitura, usuários que são aceitos para controle total (leitura e escrita e etc).

Mais exemplos

Se necessitar que um usuário tenha apenas permissão de leitura em um determinado arquivo você pode usar a seguinte sintaxe abaixo:

# setfacl -m u:usuario:r– arquivo.txt

Se for um grupo altere para “g:grupo” e assim por diante, é infinito o que você pode fazer com essas ACL.

Configurações para o Samba

Para que o samba consiga interpretar corretamente as ACL você deve seguir o exemplo abaixo:

Adicione o parâmetro map acl inherit = Yes no compartilhamento no qual você deseja ativar ACL (ou na pasta compartilhada que você alterou permissões e deseja efetivar as ACL).

Por padrão eu crio o meu compartilhamento da maneira descrita abaixo:

[compartilhado]
comment = compartilhado
path = /compartilhado
read only = No
create mask = 0777
force create mode = 0777
directory mask = 0777
force directory mode = 0777
map acl inherit = Yes

Não esqueça depois de alterar as ACL de reiniciar o samba para que ele aplique as configurações corretas.

# /etc/init.d/samba restart

Distribuições como fedora, mandriva, openSuSE, pode-se utilizar também o um dos seguintes comandos (variando de distribuição pra distribuição):

# service samba restart
# service smb restart

Conclusão

O que podemos observar é que com as ACL a combinação, personalização e refinamento necessário para permissões tornam-se quase infinitas. A forma de organização é bastante maleável e de fácil administração. Mas, o mais utilizado para isso seria num sistema de um servidor de arquivos, pois é um ambiente compartilhado onde se deseja que existam diversos perfis, e um determinado usuário ou grupo não deve ter acesso a alguma pasta.

Em breve estarei escrevendo um outro artigo para que vocês possam fazer as ACL e alterações direto no seu gerenciador de Janelas (KDE e GNOME) com ferramentas que eles já suportam.

Fonte: Luis Felipe Silveira da Silva
Agradecimentos: http://alvaro.mendes.oliveira.nom.br/acl.htm