Archive for setembro \25\UTC 2008

Qual a motivação do desenvolvimento de Software Livre?

setembro 25, 2008

Caro desenvolvedor ou qualquer pessoa que se interesse por tecnologia. Hoje em dia, consagrado o amplo sucesso dos softwares livres, com a maturidade destes, nos sentimos confortáveis em utilizá-los em nossas tarefas. Softwares como o próprio Linux, Apache, Asterisk, Openser são exemplos de maturidade, estabilidade, escalabilidade e Customização baseando-se neste tipo de desenvolvimento de Software.

Bem, é bom lembrar que Software Livre não é “Cerveja Grátis” mas sim, Softwares que têm seu código fonte aberto e com isso qualquer pessoa pode adaptá-lo às suas necessidades, o tornando melhor. Por isso, não há um conjunto de programadores em uma determinada empresa pagos para desenvolvê-los, mas sim programadores espalhados por todo o Globo. Deste modo:  NÃO há RENDA à estes programadores… eu lhe pergunto: Você, que utiliza Software Livre, já parou pra pensar o que motiva esses caras (programadores) a desenvolver esses softwares para nós utilizarmos? O que leva essas almas a gastarem seu tempo, seus conhecimentos, suas habilidades desenvolvendo estes softwares??

Simplesmente é algo que não têm preço: o Conhecimento.
É o que diz um estudo denominado “Toward an Understanding of the Motivation of Open Source Software Developers

Para entendermos o estudo, precisamos dividir o tema em dois Posts. O primeiro vai desmistificar a estrutura por dentro do desenvolvimento e o segundo irá tratar o estudo da motivação dessas pessoas.

Comunidades Open Source.

A peça principal para o sucesso de um Desenvolvimento de Software Livre (projeto) é a comunidade envolvida.
O que é esta “Comunidade”?
São Grupo de pessoas que pelos seus interesses em comum se tornam informalmente “parceiros” em um assunto/projeto/busca/ideal específico. São voluntários cuja a motivação os levam a participar e contribuir com o projeto. A comunidade provê ao projeto uma plataforma de compartilhamento de conhecimento com os membros, dessa forma disseminando o conhecimento.

Diferente do desenvolvimento fechado, que há um chefe, que se encarrega de alocar uma equipe designada à programar, onde já está definido quem serão os usuários do sistema em um cenário em que há uma separação clara: usuários e desenvolvedores. No desenvolvimento fechado um usuário não se tornará um desenvolvedor, a menos que quando o chefe achar que ele mereça, ele suba de cargo e venha a tornar-se um programador. No desenvolvimento Open Source não há uma distinção clara de quem é usuário e quem é desenvolvedor, qualquer membro da comunidade pode se tornar um programador em potencial, bastando este ter o conhecimento para tal, sendo que, como membro da comunidade, ele buscou e busca conhecimento e contribua para o software. Esta “transição” de, digamos, “status”, os autores do estudo denominam de “role transformation”.

Dentro da comunidade temos uma espécie de Distinção Social. No começo pessoas envolvidas criam uma comunidade envolta de um projeto particular motivados por um interesse compartilhado em utilizar e/ou desenvolver o Software. Membros da comunidade assumem por si mesmos as “roles” de acordo com seus interesses pessoais no projeto. Estudando quatro projetos Open Source, os autores do estudo puderam classificar oito (8) “roles”:

Project Leader (Lider de Projeto): A pessoa que iniciou o projeto. O Project Leader é o responsável pela visão e os rumos que o projeto seguirá. (Mark Spencer é o criador e assim o Project Leader do Asterisk)

Core Member: São responsáveis por guiar e coordenar o desenvolvimento do projeto. São aquelas pessoas que estão envolvidas com um projeto durante muito, muito tempo, fizeram e fazem contribuições significantes para o desenvolvimento e a evolução do Software.

Active Developer: São os que regularmente contribuem com novas features e bug fixes para o software. São as maiores forças do desenvolvimento do Software Livre.

Peripheral Developer: São pessoas que ocasionalmente contribuem com novas funcionalidades ou features para o sistema. Sua contribuição é irregular e o período de envolvimento é curto e esporádico.

Bug Fixer: São pessoas que corrigem os bugs encontrados por elas mesmas ou reportados por outros membros. Bug Fixer precisam ler e entender algo do código do software.

Bug Reporter: Descobrem e reportam bugs. (Hmm.. Quando o seu Firefox bugou e abriu aquela tela de Bug Report, você se tornou um Bug Reporter? Ou cancelou?). Ele não corrige o bug e não possui conhecimento do código fonte. São como se fossem a área de Quality Assurance do projeto. (Legal não?!) Por isso, para um Software com muita qualidade e com poucos bugs, é essencial vários membros que contribuam como Bug Reporter (Lembre-se disso!).

Reader: São usuários ativos do Software. Não somente usam o Software, mas tentam entender como o software funciona, lendo o código, documentação… Dado a alta qualidade dos Softwares Livres, alguns Readers, para aprender a programar, lêem o código do software ou usam-no como referência à desenvolvimento de softwares similares.

Passive User: Apenas ultilizam o software para alguma determinada necessidade. (A maioria de nós) São atraídos a utilizá-los pela alta qualidade e o potencial de ser alterado quando surgir a necessidade.

Essas oito Roles não são REGRAS em todas as comunidades e a porcentagem de membros em cada uma varia.

Estrutura.
Apesar de não existir uma distinção hierárquica, a estrutura da comunidade não é completamente plana.
Dependendo de qual role o membro participa, mais ou menos influência este terá no Software e na Comunidade.
Considere as camadas da imagem acima como os “roles”. Quanto mais perto do centro, mais influência este terá na comunidade e no Software. Em outras palavras, a atividade do Project Leader influenciará mais membros do que o Core Member, no qual terá mais influencia do que o Active Developer e por aí vai.
Como exemplo, citamos a responsabilidade do RoadMap que é uma atividade do Project Leader que impacta toda a comunidade e, partindo para outra “camada”, uma alteração em um determinado ponto do código pelo Bug Fixer não necessariamente impactará para todos, mas para aqueles que utiliza a feature que for corrigida. Não que uma role seja “mais importante” que a outra. As camadas externas têm sua importância, tanto social dentro da comunidade, como psicológica, atraindo e motivando mais pessoas, podendo esses serem potencialmente membros mais ativos e conseqüentemente, aprofundando seus conhecimentos e contribuindo mais ativamente, alcançando outros roles. Como analogia, imaginemos as camadas do centro como atores de uma peça de teatro, e o restante como a platéia… o que são os atores sem aplausos?? Não serão motivados? O grau de influência dentro da comunidade pode ser considerado mais uma motivação? Gostaria que expressassem suas opiniões para discutirmos, e com o segundo post teremos a visão do estudo sobre a questão.

Um abraço e até lá.

Adelson Junior

Anúncios

Principais Aspectos do Seminário Catarinense de Teste de Software

setembro 24, 2008

Ocorreu em 19 de setembro de 2008 em Florianópolis o 1º Seminário Catarinense de Qualidade e Teste Software. O evento foi uma iniciativa privada em parceria com Senai SC. Conduzido por Erika Tatiana Hmeljevsk, diretora regional da Associação Latino – Americana de teste de software (ALATS) de Santa Catarina, reuniu profissionais da área de teste de software da região sul do país. Houve nove palestras, na média, todas com conteúdos relevantes e pertinentes.

Resumi as palestras que mais me chamaram atenção.

A palestra “Projeto de software com testes unitários”, apresentada por Lucas, que é desenvolvedor, mostrou e exemplificou o uso de TDD (Test-Driven Development) em projetos. O desenvolvimento orientado a teste consiste basicamente em adicionar o teste que inicialmente falhará, codificar e depois refatorar o código se necessário. Nas palavras do palestrante: “Durante os primeiros dias de cada iteração, nós discutimos as stories com o cliente. Nós utilizamos toda a informação capturada através das iterações com os clientes para escrever high-level test cases para cada story. Quando o desenvolvedor inicia a codificação de uma story, ele estuda os test cases para garantir que as funcionalidades básicas foram entendidas. Assim que a codificação inicia, é escrito um teste executável simples para a story. O programador escreve código para fazer o teste passar e então mais testes unitários podem ser adicionados para adequar a cobertura.” [1]

A palestra “Automação de Testes: Mitos e Verdades” ministrada por Elias, enfatizou que é necessário estudar a ferramenta, que é recomendável priorizar a automatização escolhendo, por exemplo, testes de funcionalidades críticas, repetitivos e de regressão. O custo inicial da automatização é alto, trata-se de investimento de longo prazo, sendo o engenheiro de teste aquele que realiza a automatização codificando os testes e sendo capacitado para optar pela melhor ferramenta. As ferramentas de automatização de testes são muito caras variando, no exemplo citado na palestra, de 2 a 10 mil dólares por uma licença, de um usuário, de um módulo. Existem ferramentas opensource como: JMETER, OpenSTA, Webload, entre outras. Outro aspecto ressaltado foi que o teste automatizado nunca vai substituir o manual, a ferramenta executa de forma linear os casos de teste, diferentemente da execução humana que ao se deparar com algum bug consegue fazer testes exploratórios saindo do roteiro inicial visando encontrar outras falhas. Em contrapartida, a ferramenta executa os testes rapidamente, sem se cansar e sem variações de humor. [2]

A palestra “Processo de Teste tratado como Projeto” por Moreira, foi fundamentada no PMBOK. Apresentou o processo de teste enquanto planejar, projetar, executar, analisar resultados e gerenciar erros. Tudo se passa como se fossem três projetos: o desenvolvimento do software, o de testes e o que o cliente percebe. Enfatizou o projeto de testes. Comentou sobre os papéis dentro da equipe do projeto de testes: testador, analista de teste, arquiteto de teste, líder do projeto que seria equivalente ao gerente do projeto, mas hierarquicamente abaixo do gerente do projeto. Ele evidenciou que o papel da equipe de teste é: “fazer parte da equipe de projeto de desenvolvimento de software, dentro de uma estrutura matricial, devendo estar envolvida desde o inicio do projeto até o seu término.” [3]

Na palestra “A qualidade aplicada no processo de testes: Da análise dos requisitos até a geração dos casos de testes” apresentada por Marcello, são propostos processos de revisão e análise de ambigüidade aplicados aos requisitos e aos casos de teste para melhorar a qualidade. Há três processos de revisão: informal, por pares e formal. O processo formal possui sete etapas: planejamento, abertura, preparação, reunião de revisão, correções, atualização, repetição da revisão (opcional). Nesse processo há papéis e responsabilidades como: coordenador, moderador, autor, apontador e revisores. O palestrante mostrou pontos importantes a respeito da equipe de testes no contexto do projeto “é importante que a equipe de testes inicie no projeto o mais cedo possível, os testes não comecem só quando o sistema estiver pronto, as revisões em cada etapa do processo reduzem a propagação das falhas para a etapa seguinte” [4]. Exemplificou também boas práticas de redação de casos de teste tais como não engessar dados, ter cuidado com informações excedentes ou limitantes. A análise de ambigüidade nos requisitos e a verificação de consistência, também foram recomendações importantes.

A palestra “Agilidade e Qualidade: Lados da mesma moeda” conduzida por Adail abordou o ciclo PDCA: Plan, Do, Check, Act. Depois apresentou uma visão de Qualidade na qual expectativa do cliente, resultado e especificação são vetores com direção e sentido, e a falta de alinhamento entre esses vetores caracteriza um problema. O palestrante considera a tentativa de excesso de controle de prazo, escopo e custo – a tríplice restrição do gerenciamento de projetos – como causadora dos problemas em projetos de desenvolvimento de software: inflexibilidade, má qualidade, falta de visibilidade, atrasos e falta de confiabilidade. Estimativas devem sempre ter dois números, determinando uma faixa, ou um número e uma porcentagem, não devendo ser considerada como compromisso; mudanças acontecem e nem sempre devem ser evitadas. Com base nesses argumentos, apresentou as metodologias ágeis e suas principais práticas: ciclos curtos ou fluxo contínuo, testes unitários, integração e testes contínuos, refatoração, colaboração entre desenvolvedores, programação em pares, revisão por pares e inspeções, cliente mais próximo, lições aprendidas. [5]

Não houve muita ênfase comercial nas palestras e de uma forma geral o evento cumpriu seu propósito congregando profissionais da área de teste de software, que puderam compartilhar experiências, trazendo conhecimento e luz sobre alguns assuntos já conhecidos.

Aqui podem ser verificados os comentários de um dos palestrantes e estão disponíveis as apresentações para download.

Referências Bibliográficas:

[1] Lucas Nazário dos Santos Projeto de software com testes unitários

[2] Elias Nogueira Automação de Testes: Mitos e Verdades

[3] Trayahú Moreira Processo de Teste tratado como Projeto

[4] Marcello Lima  A qualidade aplicada no processo de testes: Da análise dos requisitos até a geração dos casos de testes

[5] Adail Retamal  Agilidade e Qualidade: Lados da mesma moeda

Falando de Estratégia

setembro 22, 2008

Este post foi baseado no artigo “Você sabe dizer qual a sua estratégia?”, da revista Harvard Business Review. O post mostra algumas idéias principais e trechos do texto. Quem gostar do assunto, vale ler o artigo na íntegra (O Antônio tem a revista).

De acordo com o dicionário, estratégia é a “arte de explorar condições favoráveis com o fim de alcançar objetivos específicos“.

Segundo o Capitão Nascimento, do Tropa de Elite, Estratégia vem do grego (fala-se estrategía)… e quem dormir durante o post, a granada vai explodir. O post ficou meio longo, mas resume alguns aspectos da estratégia.

Estratégia é um assunto que muitos artigos e reportagens abordam somente como algo para executivos ou gestores de uma empresa. Estratégia pode ser útil pra todos nós e podemos aplicar ao nosso dia-a-dia.

Poucas pessoas saberão claramente definir a estratégia da empresa ou grupo em que trabalham. Muitos gestores não conseguem nem citar quais elementos compõem uma estratégia bem definida. Ou então, o gestor da empresa sabe qual é a estratégia, mas seus colegas de trabalho não definiriam a estratégia da empresa da mesma forma, não estão todos alinhados.

Em uma empresa sem estratégia, podemos ter dez mil cabeças dando duro e tomando decisões, que individualmente parecem corretas. Porém, as decisões de uma área podem não estar em acordo com as decisões da outra. A definição da estratégia seria como passarmos um imã sobre os colaboradores, alinhando a conduta de todos na empresa. A estratégia não irá definir todas as atividades que devem ser feitas, mas sim, permitir que cada pessoa tome decisões que reforcem a dos demais.

O artigo dá uma sugestão muito boa para garantir que todos os colaboradores estejam alinhados com a estratégia. O artigo sugere que as empresas produzam uma declaração de estratégia com 35 palavras, fornecendo detalhes sobre o objetivo e como ele seria alcançado. Temos o exemplo de uma corretora americana, Edward Jones, que fez sua declaração de estratégia da seguinte forma: “Chegar a 2012 com um total de 17 mil consultores financeiros [de cerca de 10 mil atualmente]. Para isso, prestaremos assessoria financeira confiável, conveniente e cara a cara ao investidor pessoa física conservador, que delega suas decisões financeiras por meio de uma rede nacional de agências com um único corretor”.

Mesmo para nós que não conhecemos a empresa, esta declaração de estratégia já deixa muito claro qual o objetivo da empresa e como ela pretende alcançar este objetivo. A criação de uma declaração de estratégia para a empresa, para nosso grupo de trabalho ou para nossa própria vida é extremamente útil. Para facilitar esta criação, o artigo identificou os principais elementos que compõe uma boa declaração de estratégia: objetivo, escopo e vantagem competitiva.

Objetivo

A declaração de valores ou missão não é o objetivo estratégico. O objetivo estratégico norteará as operações nos próximos anos e deve ser absolutamente claro. O objetivo deve ser específico, mensurável e sujeito à prazos. Na nossa declaração de exemplo: “Chegar a 2012 com um total de 17 mil consultores financeiros”.

Temos que criar um objetivo para empresa ou área que seja audacioso, mas que os envolvidos aceitem que seja viável e faça sentido. Temos que definir até quando ele será atingido e como será medido. De nada adianta um objetivo que as pessoas não acreditem ou que não achem que seja o melhor para a empresa.

Escopo

O escopo tem três dimensões: cliente ou produto, localização geográfica e integração vertical. Cada empresa irá definir qual destas dimensões é mais importante para o seu negócio. No nosso exemplo, a dimensão mais importante é o cliente. A empresa foi configurada para satisfazer as necessidades de um público específico. Ela não definiu o seu cliente pelo patrimônio ou renda, mas sim, pelo perfil.

O fato de você definir bem o escopo não significa que você sempre irá trabalhar dentro dos limites estabelecidos. Mas, deve definir, em quais áreas a empresa não pisará, para evitar esforços e investimentos desnecessários.

Vantagem Competitiva

A vantagem é o aspecto mais crítico da declaração de estratégia. A clareza em relação àquilo que distingue a empresa é o que mais ajuda o pessoal a entender de que maneira contribuir para a execução da estratégia. A definição da vantagem competitiva de uma empresa tem duas partes:

  • Proposta de Valor para o cliente: Explicar o porquê de um cliente optar pelo seu serviço ou produto. Pode ser um gráfico que compare sua proposta de valor à dos rivais. No artigo tem um bom exemplo da proposta de valor do Wal-Mart.
  • Atividades singulares: O que permite somente a empresa tornar a proposta de valor uma realidade. O que vai diferenciar a empresa das rivais.

A proposta de valor da corretora é oferecer serviços e assessoria pessoal convenientes e confiáveis. O que mais distingue a corretora Edward Jones é contar com apenas um consultor financeiro por agência, o que permite que tenha mais estabelecimentos que as concorrentes, com um ambiente mais informal e tranquilo.

Outras empresas no mesmo setor possuem também uma proposta de valor distinta das outras e uma configuração de atividades que possibilitem a execução desta proposta.

Não devemos subestimar o valor de uma frase. Palavras levam à ação. Dedique o tempo necessário para formular o breve enunciado que sintetize de verdade a estratégia, algo que dê força para as pessoas de sua empresa ou grupo de trabalho.

Leia o artigo completo, tente fazer a declaração de estratégia de seu grupo de trabalho ou até mesmo da sua vida profissional! Quem desejar, pode enviar sua declaração de estratégia para andre@voicetechnology.com.br, juntaremos os interessados e discutiremos sobre nossas declarações.

Até mais,

André

Fundamentos sobre redes

setembro 22, 2008

Quando falamos sobre redes, logo lembramos da grande teia (WWW), afinal ela está crescendo a cada minuto, e estamos ficando mais dependentes dela. Sendo umas das maiores invenções do ser humano que como um tornado modificou o dia-a-dia de bilhões de pessoas.

A internet é hoje a maior rede do mundo. Conectando pessoas dos cinco cantos do planeta, que a acessam por vários dispositivos, como: computadores, notebooks, smartphones, PDAs, celulares entre outros.

A palavra rede é bem antiga e vem do latim retis, significando entrelaçamento de fios com aberturas regulares que formam uma espécie de tecido. A partir da noção de entrelaçamento, malha e estrutura reticulada, a palavra rede foi ganhando novos significados ao longo dos tempos, passando a ser empregada em diferentes situações. [1]

Para compreender melhor o funcionamento de uma rede, precisamos conhecer os seus componentes que independente da tecnologia são:

Transmissor: quem possui a informação e a transmite.

Receptor: quem recebe a informação transmitida.

Meio: caminho pelo qual a informação é transmitida.

Protocolo: conjunto de regras que definem um padrão pelo qual a informação deverá está de acordo.

Ruído: qualquer dificuldade que a informação encontra até chegar ao seu destino

Abaixo uma tabela com alguns exemplos:

Transmissor

Receptor

Meio

Protocolo

Ruído

Humano

Humano

Ar

Idioma

Barulhos

Computador

Computador

Cabos

Tcp/Ip

Elétricos

Celular

Celular

Ar

GSM

Paredes

Telefone

Telefone

Cabos

SIP

Velocidade da rede

Exemplo básico de comunicação por VoIP:

Comunicação VoIP

Comunicação VoIP

Bem, pessoal por hoje é só. Em futuros artigos estaremos detalhando melhor uns dos componentes das redes, os protocolos. Até lá!

Fonte:

[1] http://www.rits.org.br/redes_teste/rd_oqredes.cfm

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

Blogs de nossos colaboradores

setembro 8, 2008

Pessoal,

O principal objetivo do blog do Ensinar é incentivar as pessoas a escrever sobre um determinado assunto que conheçam ou tenham pesquisado.

A parte mais importante deste exercício é o fato do escritor do post pensar em como vai passar informações sobre um determinado assunto, de forma que uma pessoa leia e entenda. Pode parecer simples, mas com a prática descobrimos dificuldades, aprimoramos nossa escrita e estudamos sobre os mais variados assuntos.

Alguns de nossos colaboradores já mantém blogs, já praticam este exercício, e quem quiser podeprestigiá-los, segue abaixo um link para os últimos que foram atualizados:

Leia, comente, critique ou elogie. À partir da impressão que uma pessoa tem ao ler o seu texto é que podemos melhorar.

Você quer tentar publicar um post?  Quer ajuda com um tema?  Fique à vontade para postar um tema no Ensinar.

André Pantalião Ferreira

Usando o Google de melhor forma.

setembro 5, 2008

Bom galera, ai vai umas dicas sobre como utilizar o google, para fazer buscas mais específicas, e obter mehlores resultados!

1 – Aprimore suas pesquisas no Google

Você pode aprimorar suas pesquisas usando operadores (+ e -):

palavra +palavra2: procurará páginas que contenham palavra e palavra2;

palavra -palavra2: mostrará páginas que tenhama palavra, mas que não tenha palavra2 (não dê espaço antes do segundo termo);

É possível combinar as operações. Por exemplo, palavra + palavra2 -palavra3.

2 – Pesquise pela frase exata

Se você digitar a frase determinação de um trem, o Google mostrará páginas que tenham as palavras determinação, de, um, trem, mesmo que não esteja nesta ordem. Para procurar a frase exata, digite-a entre aspas: “determinação de um trem”.

3 – Faça busca por sistema operacional

Pouca gente sabe, mas o Google tem páginas para sistemas operacionais. Assim, se você é usuário de Linux ou Mac, por exemplo, poderá buscar assuntos específicos para esses sistemas. Veja lista de páginas:

Google para Palm: http://www.google.com/palm

Google para Linux: http://www.google.com/linux

Google para Mac: http://www.google.com/mac

Google para Windows: http://www.google.com/microsoft

4 – Faça cálculos no Google

Fazer cálculos no Google é simples. Digite, por exemplo, 42 + 20, 18 * 3 (multiplicação), 14 / 8 (divisão) ou 4 – 3 e veja o que acontece. O Google consegue realizar desde operações básicas até as mais complexas. Basta digitar o tipo de cálculo desejado. Veja a lista:

Digite e o Google fará
5 ^ 3 = 5 elevado a 3
sin(45 degrees) = o seno de 45 *
tan(45 degrees) = a tangente de 45 *
cos(45 degress) = o cosseno de 45 *
sqrt (90) = a raiz quadrada de 90
ln (13) = o logaritmo base e de 13
log (1,000) = o logaritmo base 10
50! = o fatorial de 50
4th root of 64 = o cálculo da quarta raiz de 64 **

* O degrees não é obrigatório. Digite-o somente quando desejar o valor em graus. Sem o degrees, o valor é fornecido em radianos.

** Para 1, deve-se usar st em vez de th. O mesmo vale para 2, onde deve-se nd e 3, onde deve-se usar rd. Para 4 e os demais números, deve-se usar th.

Obs.: os valores usados na lista servem de exemplo. Obviamente você pode utilizar os valores que quiser.

Você não precisa usar cada operação por vez. É possível fazer combinações. Por exemplo, digite (14+554)*ln(13)/tan(90)+ 1. O Google dará como resultado -729.197942.

5 – Faça conversões

É possível fazer conversões no Google. Veja a lista de conversões:

Digite e o Google converterá
30 cm in ft = 30 centímetros em pés
50 km in miles = 50 quilômetros em milhas
10 kg in lb = 10 quilos em libras
VI in arabic numerals = VI em número arábico (o que utilizamos hoje em dia)
2004 in roman numerals = 2004 em números romanos

Em todos os casos, é possível que você faça as operações de modo contrário. E há outras conversões. Basta saber os nomes das medidas em inglês e experimentar no Google. No lugar dos valores, você pode usar equações. Por exemplo, 10/5+459 in roman numerals. O Google mostrará CDLXI.

6 – Dicionário

É possível usar o Google como dicionário. Para isso, digite a palavra define, seguida de : (sinal de dois pontos) mais o termo. Por exemplo, suponha que você queira saber o que é Linux. Então, no Google, digite: define: linux. Agora, é só ver o significado.

Espero que tenham gostado : )

Wesley Volcov

Feed do blog

setembro 5, 2008

Os blogs há um bom tempo deixaram de ser diários pessoais, para se tornarem algo parecido com colunas de jornais, criando artigos em comunidades e tornando-se repótirios de informação. Na forma tradicional de fóruns, os usuários obtinham uma lista com os links normalmente ordenados de acordo com a data da última atualização. Quando os blogs começaram a se tornar populares, poucas pessoas se sentiam confortáveis em ter que viajar de página a página para saber quais haviam sido atualizadas.

Mas agora a montanha vem a Maomé. [1]

Os membros deste grupo já devem saber, mas vamos ao “for dummies”. Quando um site disponibiliza o seu feed, você recebe a atualização direto no seu agregador. Assim, eu posso assinar o feed do blog Ensinar [2] e quando ele for atualizado aparecerá na tela do meu agregador junto das atualizações dos outros sites que eu assino (gizmodo, cnn, hightechlive, idgnow, etc).

Como para fazer parte deste grupo é necessário ter uma conta Google, acho que muitos usarão as ferramentas disponíveis online pelo mesmo. Clicando no link para assinar o feed do Ensinar [2], você será questionado sobre que serviço usar, então pode selecionar Google, e escolher entre duas opções. O iGoogle [3] talvez seja a mais popular, podendo customizar a página principal do site de busca para acrescentar aplicativos na forma de caixas de maneira bem intuitiva. Já o Google Reader, mais limpo e sem tantas firulas, é feito exatamente para assinar feeds e se parecer com um portal de notícias.

E se você não quer recorrer a um agregador online, use seu navegador de internet. Olha ali na barra de endereços, está vendo um ícone laranja como este [5] ? Então clica no dito cujo e veja a mágica acontecer. Você escolhe como organizar assim como os favoritos. Difícil né?!

That’s all folks.

Petri Nocentini

Fonte:

[1] http://pt.wikipedia.org/wiki/Feed
[2] https://ensinar.wordpress.com/feed/
[3] http://www.google.com.br/ig
[4] http://www.google.com.br/reader/view/#directory-page
[5] http://upload.wikimedia.org/wikipedia/commons/4/43/Feed-icon.svg