Post em Destaque

Desktop com FreeBSD 9 é possível?

Bem, segundo Nicole Reid é possível mas vai demandar um certo trabalho e paciência. Nada que uma boa bacia de pipoca e um refri bem gelado não possam te animar.  🙂 Eu aprendi que as coisas muito fáceis não são tão prazerosas quanto aquelas que nos proporcionam um certo desafio em fazê-las. Então...

Leia mais...

Acelere o carregamento do seu site/blog com PHP flush

Posted by lgvalentim | Posted in Dicas | Posted on 28-06-2012

Tags:

1

Flush é uma função do PHP que já vêm sendo muito utilizada afim de acelerar o carregamento das páginas de sites ou blogs, pois ele força o servidor a enviar o cabeçalho do site antes de todo o conteúdo restante. Assim o seu navegador terá tempo para baixar todos os arquivos de folhas de estilo (CSS) indicadas entre as tags <head> e </head> de seu código.

flush 3 Acelere o carregamento do seu site/blog com PHP flush

Para implementar esta função basta inserior o código <?php flush(); ?> logo após o fechamento da tag </head>. Se você usa WordPress, deve editar o arquivo header.php do seu tema.

Ex.:

flush code Acelere o carregamento do seu site/blog com PHP flush

Com isso você deve, além de melhorar o tempo de carregamento do seu site, diminuir também sua taxa de rejeição uma vez que terá todas as informações da página carregadas rapidamente.

Share Button

Novas vulnerabilidades – bind 9 e sysret + correção IPv6

Posted by gondim | Posted in Dicas, FreeBSD, Segurança | Posted on 12-06-2012

Tags:

0

Saíram 2 novas vulnerabilidades e um acerto relacionado ao IPv6.

É bom atualizarem os sistemas e sempre se manterem seguros. Abaixo os links com todas as informações necessárias:

http://security.freebsd.org/advisories/FreeBSD-SA-12:04.sysret.asc

http://security.freebsd.org/advisories/FreeBSD-SA-12:03.bind.asc

http://security.freebsd.org/advisories/FreeBSD-EN-12:02.ipv6refcount.asc

O problema do sysret só ocorre em sistemas FreeBSD 64 bits e em  CPU que não seja AMD.

Share Button

Por que pessoas usam FreeBSD?

Posted by gondim | Posted in Dicas, FreeBSD | Posted on 31-05-2012

7

Eu recentemente perguntei para alguns usuários FreeBSD por que eles estão usando o sistema e essas foram as respostas que recebi:

A Comunidade:

FreeBSD é orientado pela Comunidade e mesmo tendo muitos usuários corporativos e contribuidores, eles não afetam a forma como o FreeBSD é conduzido pela Comunidade. FreeBSD tem listas de discussões ativas, fóruns e canais de IRC onde usuários experientes e desenvolvedores estão sempre dispostos a ajudar os menos experientes.

Abaixo a lista atual das listas de discussões. Acharam pouco?

Lista de discussão brasileira: http://www.fug.com.br

freebsd-advocacy FreeBSD Evangelism
freebsd-announce Important events and project milestones
freebsd-arch Architecture and design discussions
freebsd-bugbusters Discussions pertaining to the maintenance of the FreeBSD problem report database and related tools
freebsd-bugs Bug reports
freebsd-chat Non-technical items related to the FreeBSD community
freebsd-chromium FreeBSD-specific Chromium issues
freebsd-current Discussion concerning the use of FreeBSD-CURRENT
freebsd-isp Issues for Internet Service Providers using FreeBSD
freebsd-jobs FreeBSD employment and consulting opportunities
freebsd-questions User questions and technical support
freebsd-security-notifications Security notifications
freebsd-stable Discussion concerning the use of FreeBSD-STABLE
freebsd-test Where to send your test messages instead of one of the actual lists
freebsd-acpi ACPI and power management development
freebsd-afs Porting AFS to FreeBSD
freebsd-aic7xxx Developing drivers for the Adaptec® AIC 7xxx
freebsd-amd64 Porting FreeBSD to AMD64 systems
freebsd-apache Discussion about Apache related ports
freebsd-arm Porting FreeBSD to ARM® processors
freebsd-atm Using ATM networking with FreeBSD
freebsd-binup Design and development of the binary update system
freebsd-bluetooth Using Bluetooth® technology in FreeBSD
freebsd-cluster Using FreeBSD in a clustered environment
freebsd-cvsweb CVSweb maintenance
freebsd-database Discussing database use and development under FreeBSD
freebsd-desktop Using and improving FreeBSD on the desktop
freebsd-doc Creating FreeBSD related documents
freebsd-drivers Writing device drivers for FreeBSD
freebsd-eclipse FreeBSD users of Eclipse IDE, tools, rich client applications and ports.
freebsd-embedded Using FreeBSD in embedded applications
freebsd-eol Peer support of FreeBSD-related software that is no longer supported by the FreeBSD project.
freebsd-emulation Emulation of other systems such as Linux/MS-DOS®/Windows®
freebsd-firewire FreeBSD FireWire® (iLink, IEEE 1394) technical discussion
freebsd-fs File systems
freebsd-gecko Gecko Rendering Engine issues
freebsd-geom GEOM-specific discussions and implementations
freebsd-gnome Porting GNOME and GNOME applications
freebsd-hackers General technical discussion
freebsd-hardware General discussion of hardware for running FreeBSD
freebsd-i18n FreeBSD Internationalization
freebsd-ia32 FreeBSD on the IA-32 (Intel® x86) platform
freebsd-ia64 Porting FreeBSD to Intel’s upcoming IA64 systems
freebsd-ipfw Technical discussion concerning the redesign of the IP firewall code
freebsd-isdn ISDN developers
freebsd-jail Discussion about the jail(8) facility
freebsd-java Java™ developers and people porting JDK™s to FreeBSD
freebsd-kde Porting KDE and KDE applications
freebsd-lfs Porting LFS to FreeBSD
freebsd-mips Porting FreeBSD to MIPS®
freebsd-mobile Discussions about mobile computing
freebsd-mono Mono and C# applications on FreeBSD
freebsd-mozilla Porting Mozilla to FreeBSD
freebsd-multimedia Multimedia applications
freebsd-new-bus Technical discussions about bus architecture
freebsd-net Networking discussion and TCP/IP source code
freebsd-office Office applications on FreeBSD
freebsd-performance Performance tuning questions for high performance/load installations
freebsd-perl Maintenance of a number of Perl-related ports
freebsd-pf Discussion and questions about the packet filter firewall system
freebsd-platforms Concerning ports to non Intel architecture platforms
freebsd-ports Discussion of the Ports Collection
freebsd-ports-announce Important news and instructions about the Ports Collection
freebsd-ports-bugs Discussion of the ports bugs/PRs
freebsd-ppc Porting FreeBSD to the PowerPC®
freebsd-proliant Technical discussion of FreeBSD on HP ProLiant server platforms
freebsd-python FreeBSD-specific Python issues
freebsd-rc Discussion related to the rc.d system and its development
freebsd-realtime Development of realtime extensions to FreeBSD
freebsd-ruby FreeBSD-specific Ruby discussions
freebsd-scsi The SCSI subsystem
freebsd-security Security issues affecting FreeBSD
freebsd-small Using FreeBSD in embedded applications (obsolete; use freebsd-embedded instead)
freebsd-sparc64 Porting FreeBSD to SPARC® based systems
freebsd-standards FreeBSD’s conformance to the C99 and the POSIX® standards
freebsd-sysinstall sysinstall(8) development
freebsd-threads Threading in FreeBSD
freebsd-tilera Porting FreeBSD to the Tilera family of CPUs
freebsd-tokenring Support Token Ring in FreeBSD
freebsd-toolchain Maintenance of FreeBSD’s integrated toolchain
freebsd-usb Discussing FreeBSD support for USB
freebsd-virtualization Discussion of various virtualization techniques supported by FreeBSD
freebsd-vuxml Discussion on VuXML infrastructure
freebsd-x11 Maintenance and support of X11 on FreeBSD
freebsd-xen Discussion of the FreeBSD port to Xen™ — implementation and usage
freebsd-xfce XFCE for FreeBSD — porting and maintaining
freebsd-zope Zope for FreeBSD — porting and maintaining
freebsd-hubs People running mirror sites (infrastructural support)
freebsd-user-groups User group coordination
freebsd-vendors Vendors pre-release coordination
freebsd-wip-status FreeBSD Work-In-Progress Status
freebsd-wireless Discussions of 802.11 stack, tools, device driver development
freebsd-www Maintainers of www.FreeBSD.org
cvs-all /usr/(CVSROOT|doc|ports) All changes to any place in the tree (superset of other CVS commit lists)
cvs-doc /usr/(doc|www) All changes to the doc and www trees
cvs-ports /usr/ports All changes to the ports tree
cvs-projects /usr/projects All changes to the projects tree
cvs-src /usr/src All changes to the src tree (generated by the svn-to-cvs importer commits)
svn-src-all /usr/src All changes to the Subversion repository (except for user and projects)
svn-src-head /usr/src All changes to the “head” branch of the Subversion repository (the FreeBSD-CURRENT branch)
svn-src-projects /usr/projects All changes to the projects area of the src Subversion repository
svn-src-release /usr/src All changes to the releases area of the src Subversion repository
svn-src-releng /usr/src All changes to the releng branches of the src Subversion repository (the security / release engineering branches)
svn-src-stable /usr/src All changes to the all stable branches of the src Subversion repository
svn-src-stable-6 /usr/src All changes to the stable/6 branch of the src Subversion repository
svn-src-stable-7 /usr/src All changes to the stable/7 branch of the src Subversion repository
svn-src-stable-8 /usr/src All changes to the stable/8 branch of the src Subversion repository
svn-src-stable-9 /usr/src All changes to the stable/9 branch of the src Subversion repository
svn-src-stable-other /usr/src All changes to the older stable branches of the src Subversion repository
svn-src-svnadmin /usr/src All changes to the administrative scripts, hooks, and other configuration data of the src Subversion repository
svn-src-user /usr/src All changes to the experimental user area of the src Subversion repository
svn-src-vendor /usr/src All changes to the vendor work area of the src Subversion repository

Para saber mais sobre as listas acima e como assiná-las acesse aqui.

Estabilidade:

Estabilidade significa muitas coisas diferentes. FreeBSD muito raramente falha (e quando isso acontece, geralmente é devido à falhas de hardware), mas ao mesmo tempo que isso era vanglorioso umas décadas atrás, agora é uma característica esperada para qualquer sistema operacional.

Estabilidade no FreeBSD significa mais do que isso. Isso significa que atualizar o sistema não necessita de atualizar o usuário. Interfaces de configuração mudam ao longo do tempo, mas apenas quando há uma boa razão. Se você aprendeu a usar o FreeBSD em 2000, então a maioria de seu conhecimento ainda seria relevante.

Compatibilidade com versões anteriores é muito importante para a equipe do FreeBSD, e qualquer release de uma major release espera-se que seja capaz de executar qualquer código – incluindo os módulos do kernel – que funcionaram em uma versão anterior.

A estabilidade no FreeBSD é uma coisa realmente relevante e na maior parte dos problemas que já tive usando FreeBSD, foram causados por hardwares que apresentaram problemas. Temos que lembrar que para servidores existem hardwares adequados e que usar equipamentos para desktops não é nada bom para a estabilidade.

Configuração Simples:

O serviço de inicialização do FreeBSD é muito simples. Cada serviço, se for parte da base do sistema ou instalado de um port, vem com um script que é responsável por iniciar e parar este e freqüêntemente alguma outra opção. O arquivo /etc/rc.conf contém uma lista de variáveis para habilitar e configurar serviços. Quer habilitar ssh? Apenas adicione sshd_enable=”YES” para o seu arquivo rc.conf. Este sistema torna mais fácil de ver tudo que será iniciado no boot.

O sistema RCng que lê este arquivo, entende as dependências entre os serviços e então pode automaticamente rodar eles em paralelo ou esperar até que um finalize antes de iniciar as coisas que precise. Você obtem todos os benefícios de um sistema moderno de configuração, sem uma interface complexa.

Ports:

A árvore do ports contém uma enorme coleção de software de terceiros, incluindo as versões mais antigas de algumas coisas onde a userbase é dividida sobre os benefícios da atualização e um monte de programas de nicho. As probabilidades são, qualquer coisa que você queira executar, que funcione em FreeBSD, estará lá.

Ao contrário de alguns outros sistemas, FreeBSD mantém uma divisão clara entre o sistema base e o ports e pacotes de terceiros. Todos os softwares de terceiros vão em /usr/local, então se você quiser mudar o propósito de uma máquina basta simplesmente deletar todos os pacotes instalados e depois instalar os pacotes que deseja.

A próxima ferramenta pkg-ng tornará o trabalho com pacotes binários ainda mais fácil , embora instalação de fontes será ainda suportada para pessoas que quiserem um nível de configurabilidade.

Segurança:

Segurança é vital para qualquer máquina conectada em rede. FreeBSD fornece um número de ferramentas para assegurar que você possa manter um sistema seguro, tais como:

  • Jails, permitindo você executar aplicações – ou sistemas inteiros – em uma sandbox que não pode acessar o resto do sistema. Com ferramentas como ezjail e ZFS você pode instantaneamente criar uma nova jail com o clone de um sistema existente, usando uma pequena quantidade de espaço em disco, e executar dentro dela código não confiável.
  • Mandatory Access Control, do projeto TrustedBSD, permitindo você configurar políticas de controle de acesso para todos os recursos do sistema operacional.
  • Capsicum, à partir do FreeBSD 9, permite aos desenvolvedores facilmente implementarem separação de privilégios, reduzindo o impacto de código comprometido.
  • O sistema VuXML para publicar vulnerabilidades no ports, que integrado com ferramentas como portaudit,  de modo que seu e-mail diário de segurança lhe dirá sobre qualquer vulnerabilidade conhecida em softwares instalados do ports
  • Auditoria de eventos de Segurança, usando o padrão BSM.

E, claro, todas as características padrões que você esperaria de um sistema UNIX moderno, incluindo IPSec, SSH, e assim por diante.

ZFS:

Cheap snapshots, clones, end-to-end checksums, deduplication, compression, e sem a necessidade de decidir o tamanho das partições na instalação. O que não está gostando? Use o ZFS por poucos dias e volte para um doloroso gerenciador de volume mais tradicional. Se você quiser testar alguma coisa com ZFS então apenas crie um snapshot e faça um roll back se o que você fez não funcionar.

Se você está usando jails, então ZFS permitirá você clonar uma jail em menos de um segundo independente de quão grande seja a jail.

GEOM:

Mesmo sem o ZFS, FreeBSD vem com rico sistema de armazenamento. Camadas GEOM provedores e consumidores de forma arbitrária, permitindo você usar duas máquinas em rede para armazenamento de alta disponibilidade, use o nível de RAID da sua escolha ou adicione características como compressão ou encriptação.

Working Sound:

FreeBSD 4 introduziu no kernel o sound mixing, então multiplas aplicações podem tocar som ao mesmo tempo, mesmo quando usando placas de som baratas sem suporte à mixagem por hardware. FreeBSD 5 automaticamente alocou novos canais para aplicações, sem qualquer configuração.

Meu sistema, do jeito que eu quero:

FreeBSD dá à você um sistema UNIX-like fácil de usar e trabalhar. O sistema base pode facilmente ser extendido. Se você quiser rodar KDE ou GNOME, você precisa instalar o meta pacote da versão que você preferir. Se você quiser um servidor sem monitor, teclado e mouse, este é muito fácil de instalar as ferramentas que você deseja.

É fácil de instalar o FreeBSD via porta serial e configurar o sistema inteiro de um terminal. É fácil também instalar e usar qualquer ambiente desktop existente. As decisões sobre o tipo de sistema que você quer usar são deixadas pra você mesmo decidir.

O texto acima foi tirado daqui e adicionei algumas coisas.

Share Button

Melhorando a segurança no FreeBSD – Parte 3

Posted by gondim | Posted in Dicas, FreeBSD, Segurança, Shell Script | Posted on 25-05-2012

Tags:, ,

2

Hoje venho falar de um complemento à segurança que é a visualização diária dos logs. Todo sysadmin deve olhar os logs diariamente para verificar possíveis problemas, tentativas de acessos não autorizados, ataques aos seus serviços, problemas com o hardware e por aí vai. Os logs estão aí para nos ajudar e embora seja um serviço trabalhoso, cansativo e chato, são os logs que nos salvam muitas das vezes.

O FreeBSD vem com uma ferramenta chamada Periodic que é um conjunto de shell scripts prontos e rodado pelo cron. Esses scripts são localizados em /etc/periodic, separados por:

daily
weekly
monthly
security

Os scripts nesses diretórios rodam diariamente, semanalmente e mensalmente. Os scripts em security também rodam diariamente mas são relacionados com segurança.

Se você gosta de aprender coisas novas e entende de shell script, dê uma olhada nesses scripts pois são muito interessantes e usam os comandos do sistema para isso. É uma forma de aprender mais sobre o sistema.

Nesse post, vamos instalar o portaudit, uma ferramenta que usamos para checar se temos alguma vulnerabilidade em pacotes que foram instalados do ports. Instalaremos o pacote ssmtp para envio dos logs por e-mail, para os servidores que vamos querer monitorar mas sem a necessidade de se ter um servidor de correio local. Por último faremos uma configuração no Periodic para que ele nos envie esses relatórios de segurança, diários, semanais e mensais.

Vamos começar com o portaudit que após instalado já adiciona um script dele para o periodic. O portaudit é usado para baixar uma listagem de vulnerabilidades do VuXML e checar se você tem alguma vulnerabilidade relacionada. Em caso positivo uma mensagem será mostrada apontando a vulnerabilidade ou vulnerabilidades que você tenha.

# cd /usr/ports/ports-mgmt/portaudit
# make install clean
# rehash       <- se tiver usando csh

O portaudit, como eu disse anteriormente, já instala um script no periodic conforme abaixo:

# pkg_info -L portaudit-0.6.0
Information for portaudit-0.6.0:

Files:
/usr/local/man/man1/portaudit.1.gz
/usr/local/sbin/portaudit
/usr/local/etc/portaudit.pubkey
/usr/local/etc/portaudit.conf.sample
/usr/local/etc/periodic/security/410.portaudit

Quando quiser checar manualmente por vulnerabilidades basta executar: portaudit -Fda

Nesse momento vamos instalar o ssmtp. Esse programa é útil quando a máquina monitorada não é um servidor de e-mail e você não quer instalar um SMTP  Server só para enviar os relatórios do periodic. Se a máquina estiver rodando um Servidor de Correio, não instale o ssmtp pois ele irá desconfigurar o seu servidor. Nesse caso pule a configuração abaixo e vá direto para a configuração do periodic.

# cd /usr/ports/mail/ssmtp
# make install clean
# make replace
# rehash     <- se tiver usando csh

Continuando a configuração do ssmtp, vamos precisar alterar 2 arquivos apenas que ficam em /usr/local/etc/ssmtp. Vamos supor que eu queira usar uma conta de e-mail qualquer, em algum servidor, para enviar os relatórios. Vamos aos dados fictícios abaixo:

  • servidor de e-mail: smtp.teste.com.br – porta 587/tcp para envio de e-mail autenticado conforme recomendação do Comitê Gestor.
  • conta de e-mail: relatorio@teste.com.br
  • senha da conta de e-mail: zUngA2378

Iremos usar esses dados acima para o envio de qualquer e-mail desse servidor que estamos configurando. Agora faremos o seguinte:

# cd /usr/local/etc/ssmtp
# touch revaliases
# touch ssmtp.conf
# chmod 640 revaliases ssmtp.conf
# chown root:ssmtp revaliases ssmtp.conf

Dentro do arquivo ssmtp.conf colocaremos a seguinte configuração do nosso exemplo:

root=postmaster
mailhub=smtp.teste.com.br:587
rewriteDomain=teste.com.br
hostname=_HOSTNAME_
UseSTARTTLS
AuthUser=relatorio@teste.com.br
AuthPass=zUngA2378

Dentro do arquivo revaliases colocaremos a configuração abaixo:

root:relatorio@teste.com.br:smtp.teste.com.br:587

Lembrando que esses dados citados são fictícios e você deve substituí-los pelos seus dados reais.

Feito essas configurações você pode testar enviando um e-mail para você dessa forma:

# mailx -s teste joaobobo@gmail.com <<EOF
Teste de envio de e-mail.
EOF

Bem, se você fez o teste acima sem trocar o e-mail: joaobobo@gmail.com pelo seu e-mail, então pare por aqui e estude mais.  🙂

Se tudo der certo você receberá um e-mail vindo do e-mail configurado no ssmtp e provando que está tudo funcionando como deveria.

Vamos agora finalizar a nossa configuração do periodic. Criaremos o arquivo /etc/periodic.conf e dentro deste colocaremos essas 5 linhas abaixo:

#!/bin/sh
daily_output=”joaobobo@gmail.com
weekly_output=”joaobobo@gmail.com
monthly_output=”joaobobo@gmail.com
daily_status_security_output=”joaobobo@gmail.com

Nas linhas acima estaremos enviando os relatórios diários, semanais, mensais e de segurança para o e-mail: joaobobo@gmail.com.

Você pode consultar o arquivo /etc/defaults/periodic.conf para servir de referência e não deve alterar esse arquivo. Se quiser usar alguma variável de lá, copie ela e use no /etc/periodic.conf.

Bem, feito isso aguarde os relatórios que eles chegarão conforme configurado no /etc/crontab.

# Perform daily/weekly/monthly maintenance.
1       3       *       *       *       root    periodic daily
15      4       *       *       6       root    periodic weekly
30      5       1       *       *       root    periodic monthly

É isso e vejo vocês em breve.

Share Button

PBI: Entendendo como funciona o formato de pacotes do PC-BSD.

Posted by lgvalentim | Posted in Dicas, FreeBSD | Posted on 24-05-2012

Tags:, ,

1

O fato do PC-BSD ter uma instalacão fácil, intuitiva e agradável é sim um fato importante para sua popularizacão. Ser um sistema estável, de alta performance e seguro claramente não é suficiente para sua popularizacão em ambiente Desktop. Já, ser de fácil uso e ter um resultado rasoável por padrão após a instalacão, também é muito relevante para o perfil de usuários que o PC-BSD se destina: o usuário doméstico típico.

Porém, um dos principais fatores de destaque do PC-BSD no que tange a facilidade de uso é o seu sistema de instalacão de aplicacões de terceiros, o PBI: Push Button Installer, ou Instalador ao Apertar do Botão. O PBI é um formato especial e exclusivo do PC-BSD. Apesar de podermos usar pacotes pré-compilados (pkg_add) ou compilar a aplicacão localmente com a Colecão de Ports do FreeBSD, o formato padrão não é nenhum dos dois, e sim o PBI, que analisaremos agora em mais detalhes.

O Formato PBI – Visão Superficial

O formato de pacotes do instalador PBI é simples, parte do princípio que um PBI vai sempre instalar a aplicacão, todas as bibliotecas e dependências dessa aplicacão, em um compartimento único e isolado. Dessa forma não há conflitos de bibliotecas, não há também conflitos entre versões de dependências, nem há dependência da própria ABI nativa do sistema operacional.

A idéia por trás do conceito que o PBI trás é de um instalador que vai instalar aplicacões que vão rodar em qualquer versão do PC-BSD, e principalmente, que vai continuar plenamente funcional mesmo após atualizacões mesmo as mais radicais, com troca plena de ABI, com tanto que uma compatibilidade mínima seja mantida entre o sistema novo e suas versões anteriores – em kernel, os COMPAT_FREEBSD4, COMPAT_FREEBSD5, COMPAT_FREEBSD6, COMPAT_FREEBSDX;

Para isso, os arquivos com extensão .pbi são interpretados pelo PC-BSD como instalacão e são considerados executáveis. Esses executáveis são divididos essencialmente em quatro partes:

A primeira é a biblioteca de carregamento (o loader) que permite que o .pbi seja interpretado como um executável ELF. Ou seja são os Elf Loader Headers. A segunda parte contém embarcado o ícone da aplicacão que será instalada. A terceira camada tem as directivas e dados de configuracão do .pbi que identificam o que, onde e como será instalado. E finalmente a quarta etapa, são todos os dados da aplicacão, biblitecas e dependências, bem como os scripts que serão instalados.

O produto final de um arquivo .pbi é um executável auto-instalável:

eksffa@pcbsd% file JavaJRE1.6.0-PV0.pbi
JavaJRE1.6.0-PV0.pbi: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.0 (700109), dynamically linked (uses shared libs), FreeBSD-style, not stripped

eksffa@pcbsd% brandelf ./JavaJRE1.6.0-PV0.pbi
File ‘./JavaJRE1.6.0-PV0.pbi’ is of brand ‘FreeBSD’ (9).

Que de fato, é linkado dinamicamente apenas a própria ABI nativa (libc):

eksffa@pcbsd% ldd ./JavaJRE1.6.0-PV0.pbi
./JavaJRE1.6.0-PV0.pbi:
libc.so.7 => /lib/libc.so.7 (0x2807e000)

E cujo prefix de instalacão é fora do padrão FreeBSD, quebra a hier(7) e também a especificacão POSIX, e fica isolado em /Programs, não tocando qualquer outro arquivo em infra-estrutura fora dessa hierarquia.

 

Entendendo o funcionamento de um Produto Instalado a partir de um PBI

Aqui chega a parte onde a abordagem por trás de um produto resultante de um PBI instalado deve ser avaliado e entendido. Os binários e bibliotecas criados de um PBI são exatamente iguais os criados da compilacão genérica de um Ports ou a instalacão de um package binários. O produto é o mesmo, mas sua estrutura instalada e a forma como são carregados, é a diferencão.

O coracão por trás do PBI é uma idéia simples, completamente funcional, mas com alguns efeitos colaterais. Todo binário já acompanha suas dependências e suas bibliotecas, e esses são isolados, e utilizados exclusivamente para aquela aplicacão.

A estrutura da instalacão de um PBI se baseia que tudo será instalado no /Programs (que por sua vez é um link simbólico para o /usr/Programs); e abaixo dele temos algumas estruturas, nem sempre todas utilizadas. A saber:

Programs/
Programs/bin/
Programs/lib/
Programs/etc/
Programs/rc.d/
Programs/rc.conf
Programs/<aplicacão>/

Todas aplicacões são instaladas em /Programs/<aplicacão>/, que é sempre constituído da seguinte organizacão hierárquica:

Programs/<aplicacão>/bin/
Programs/<aplicacão>/.sbin/
Programs/<aplicacão>/autolibs/
Programs/<aplicacão>/share/
Programs/<aplicacão>/libs (lincado para ./autolibs local)

Além disso temos sempre scripts executáveis:

Programs/<aplicacão>/PBI.FirstRun.sh
Programs/<aplicacão>/PBI.RemoveScript.sh
Programs/<aplicacão>/PBI.RemoveScript2.sh
Programs/<aplicacão>/PBI.SetupScript.sh
Programs/<aplicacão>/PBI.UpdateURL.sh

Os executáveis acima são rotinas executadas na primeira inicializacão da aplicacão depois de instalada, um script auxiliar que permite ao sistema de atualizacão de PBI avaliar se há atualizacões do PBI em questão, e por último os outros são rotinas de deinstalacão da aplicacão.

O mais importante é o:

Programs/<aplicacão>/autolibs/

 

Isso porque nessa estrutura estão todas, todas a bibliotecas de que o binário depende, bem como suas dependências, sejam essas bibliotecas ou aplicacões. Ou seja quando a aplicacão é executava, o contexto de bibliotecas dinâmicas do linker do loader (carregador) é isolado, e as bibliotecas disponíveis para aquele contexto de execussão é exclusivamente as que estivirem em Programs/<aplicacão>/autolibs/.

Inteligente não? Dessa forma não importa a ABI do sistema operacional, nem importa que bibliotecas existam ou não, que dependências existam ou não no restante do sistema, pois tudo que a aplicacão precisa, ela já “traz consigo”. Quase como se fosse um binário compilado estáticamente. Porém, não é estático, é dinâmico, e apesar de em disco haver redundância de bibliotecas, em memória os objetos iguais são sempre alocados em memória shadow, não havendo o mesmo consumo de memória que haveria se fossem todas aplicacões estáticamente compiladas.

O binário de inicializacão real (o verdadeiro produto da instalacão) fica disponível em:

Programs/<aplicacão>/bin/

Porém, o ambiente de execussão desse binário acontece através do que fica disponívem em:

Programs/bin/<aplicacão>

Que por sua vez é um link simbólico, que se referencia a um shell script disponível em:

Programs/<aplicacão>/.sbin/

E ai sim, esse shell script é onde fica a sacada, o pulo do gato do isolamento de contexto de bibliotecas. Vejamos um exemplo prático, o amsn instalado, instala um arquivo .desktop no Desktop, que é o link para a aplicacão, vejamos:

[Desktop Entry]
Name=aMSN
Exec=/Programs/aMSN0.97.2_1/.sbin/amsn
Type=Application
Path=/Programs/aMSN0.97.2_1/
Icon=/Programs/aMSN0.97.2_1/amsn.png

Ou seja ao clicar nesse ícone, é executado o  /Programs/aMSN0.97.2_1/.sbin/amsn, que por sua vez é um link simbólico para um shell script:

% ls -l /Programs/bin/amsn
lrwxr-xr-x  1 root  wheel  33 10 Dez 21:11 /Programs/bin/amsn -> /Programs/aMSN0.97.2_1/.sbin/amsn

 

 

O Executável de Inicializacão da Aplicacão

O shell script que faz o isolamento do contexto das bibliotecas dinâmicas e carrega a aplicacão pode ter algumas variacões, mas a essência geral é a seguinte:

A variável de ambiente LD_LIBRARY_PATH é populada, e seu único conteúdo é o Programs/<aplicacão>/autolibs/ ; com essa variável definida assim, o binário é executado em Programs/<aplicacão>/bin/<aplicacão>. Dessa forma qualquer biblioteca ou dependência que o binário precisa, só tem o Programs/<aplicacão>/autolibs/ onde carregar. Esse é o coracão por trás do ambiente instalado por um PBI.

Outros arquivos podem ser necessários, caso em que outras variáveis são populadas permitindo acesso as demais estruturas. Mas normalmente são apenas arquivos de referência de configuracão e comportamento, como share, ícones, configuracões padrão, diretivas de controle, etc.

Seguindo o estudo vamos analisar o que temos para iniciar o amsn:

#!/bin/sh
# Auto-Generated by PC-BSD
PATH=”/Programs/aMSN0.97.2_1/bin:$PATH”; export PATH
LANG=”`grep ^Language= ~/.kde/share/config/kdeglobals | cut -d “=” -f2`”; export LANG
LD_LIBRARY_PATH=”/Programs/aMSN0.97.2_1/autolibs/” ; export LD_LIBRARY_PATH
STDLOG=”${HOME}/.$$stdout”
STELOG=”${HOME}/.$$stderr”
(((( /Programs/aMSN0.97.2_1/bin/amsn  “$@” || /PCBSD/bin/CrashHandler “bin/amsn” “${STDLOG}” “${STELOG}” ) | tee $STDLOG) 3>&1 1>&2 2>&3 | tee $STELOG) 3>&1 1>&2 2>&3)

rm $STDLOG >/dev/null 2>/dev/null
rm $STELOG >/dev/null 2>/dev/null

É esse o esqueleto padrão. Podem haver variacões, e de fato a infra-estrutura do PBI permite que hajam, para satisfazer os todos possíveis perfis de necessidade de aplicacões. Mas as variacões são apenas uma repeticão da idéia geral acima.

Avaliacão da Abordagem PBI

As impressões sobre a abordagem acima são as mais variadas. Sobre o PBI, já tivemos opinião de desenvolvedores Red Hat que mantém o padrão RPM, já tivemos opiniões de empacotadores Debian acostumados com os formatos de pacotes do Debian e toda a (bem criteriosa e inteligente, diga-se de passagem) estrutura de pacotes do Debian, e a opinião de Port Managers do Projeto FreeBSD, bem como mantenedores do PkgSrc.

De forma geral todos acham a idéia inteligente, porém, inadequada. O motivo é claro, ninguém gosta de ver tamanha redundância de bibliotecas e dependências como os PBI instalam. Porém, todos concordam, que poucas abordagens tem resultado tão prático e funcional. E acima de tudo, essa é a única abordagem livre de conflitos e problemas de dependências.

Efeitos Colaterais

Pro usuário final, porém, as consequências negativas da abordagem do PBI são duas: os PBI de forma geral são maiores do que poderiam ser, o download tem que trazer junto todas as dependências e bibliotecas que, de certa forma, podem já estar presentes no autolibs/ de alguma outra aplicacão ou na própria base do sistema operacional.

A segunda consequência é o espaco em disco. A abordagem dos PBI ocupa muito mais espaco em disco exatamente devido a essa redundância de bibliotecas e dependências. Em minhas análises, um conjunto simples de aplicacões, Firefox, aMSN, OpenOffice e Java, o consumo de espaco em disco é 34% superior com PBI do que instalado por pacote (package) pré-compilado. Se comparado com aplicacões compiladas localmente e com grande nível de customizacão de Build Time a diferenca pode ser ainda maior.

Resultados Obtidos pela Abordagem PBI

Os resultados conseguidos com essa abordagem porém, são os melhores possíveis: facilidade de uso, efetividade, e um resultado final sempre funcional com virtualmente nenhuma chance de problemas, conflitos ou falhas de dependência. No geral pesando as desvantagens do maior espaco em disco, as vantagens justificam a popularizacão do formato PBI por usuários típicos do PC-BSD.

 

fonte: fug-br  –  Por P. Tracanelli (FreeBSD Brasil)

Share Button

Melhorando a segurança no FreeBSD – Parte 2

Posted by gondim | Posted in Dicas, FreeBSD, Segurança | Posted on 20-05-2012

Tags:, , , , ,

0

Dando continuidade nas melhorias de segurança no FreeBSD veremos mais algumas coisas que não foram abordadas aqui. O usuário root sempre foi um cara muito privilegiado e por isso devemos evitá-lo ao máximo e também não permitir que outras pessoas usem ele. Logicamente que segurança física sempre foi o Calcanhar de Aquiles da Segurança da Informação, mas podemos tomar alguns cuidados. Abaixo vamos seguir algumas dicas:

Remoção do usuário “toor”. Não tem utilidade para o sistema e possui “UID 0” que é um perigo para o sistema. Reparem que o perigo não está no nome do usuário e sim no UID (User ID) que sendo 0, é o grande perigo. Só o nome root não seria perigoso se o UID dele fosse diferente de 0.

Para remover o toor basta executar: vipw ir na linha abaixo e apagar teclando “dd”, depois “shift :” e “wq!” para sair gravando. Bem precisa conhecer um pouco de vi.  🙂

toor:*:0:0::0:0:Bourne-again Superuser:/root:

Outra coisa é retirar o shell de todos os usuários que não necessitarem de shell. Serviços não precisam que seus usuários tenham shell. Para isso verifique como está o seu /etc/master.password com o vipw. No FreeBSD 9.0 eles já são instalados com /usr/sbin/nologin como shell das contas. Mas quem ainda usa versões anteriores vão precisar alterar. Deve ficar parecido com o exemplo abaixo:

# $FreeBSD: release/9.0.0/etc/master.passwd 218047 2011-01-28 22:29:38Z pjd $
#
root:$1$ensO.a5U$02Vji3o598eieKtAf6Lpm.:0:0::0:0:Charlie &:/root:/usr/local/bin/bash
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/usr/sbin/nologin
smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/usr/sbin/nologin
mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin
proxy:*:62:62::0:0:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin
_pflogd:*:64:64::0:0:pflogd privsep user:/var/empty:/usr/sbin/nologin
_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin
www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
hast:*:845:845::0:0:HAST unprivileged user:/var/empty:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin

Reparem que só o root tem shell que no meu caso é o bash.

Próxima melhoria seria aumentar a segurança da senha do root trocando md5 para blowfish. Para essa tarefa precisamos editar o arquivo /etc/login.conf:

default:\
        :passwd_format=md5:\

Para:

default:\
        :passwd_format=blf:\

Após alterar o arquivo login.conf precisamos rodar o seguinte comando para que seja gerado o /etc/login.conf.db, cujo arquivo é o que o sistema realmente usa.

# cap_mkdb /etc/login.conf

Mas não acabamos com a senha ainda. Após feito isso precisamos alterar novamente as senhas que desejamos para que essas agora estejam em blowfish e isso pode ser feito com o comando passwd. Reparem na diferença dos tipos:

MD5:

root:$1$9kaWUo5i$fIoOwZFsBsZG9WR/.nqhh1:0:0::0:0:Charlie &:/root:/usr/local/bin/bash

Blowfish:

root:$2a$04$qXWwmvWbpMrp7qpwDbxX/uVccYR3jfhET/hD1U2h9ZN7QyP13yW26:0:0::0:0:Charlie &:/root:/usr/local/bin/bash

Blowfish é bem mais forte (seguro) que md5. Obs: antigamente se usava o /etc/auth.conf para essa configuração.

Outra coisa boa é definir um idle timeout para o root, no caso de você acidentalmente esquecer o usuário root logado no servidor. Se você estiver usando bash como shell, basta adicionar essa variável em /etc/profile:

TMOUT=300

A variável acima trabalha em segundos, ou seja, se o root ficar sem fazer nada por 5 minutos, automaticamente este é deslogado.

Se estiver usando csh como shell, adicione a seguinte linha em /etc/csh.login:

set autologout=5

O autologout trabalha em minutos e vai fazer a mesma função do TMOUT no csh.

Se usa outro shell você precisará pesquisar se este possui uma variável de controle para essa finalidade.

Infelizmente no sh não existe um equivalente para essa finalidade.

Continuando com a nossa melhoria de segurança se você não quiser que alguém logue como root na console do seu servidor podemos editar o arquivo /etc/ttys cujo exemplo está abaixo:

# If console is marked “insecure”, then init will ask for the root password
# when going to single-user mode.
console none                            unknown off secure
#
ttyv0   “/usr/libexec/getty Pc”         xterm   on  secure
# Virtual terminals
ttyv1   “/usr/libexec/getty Pc”         xterm   on  secure
ttyv2   “/usr/libexec/getty Pc”         xterm   on  secure
ttyv3   “/usr/libexec/getty Pc”         xterm   on  secure
ttyv4   “/usr/libexec/getty Pc”         xterm   on  secure
ttyv5   “/usr/libexec/getty Pc”         xterm   on  secure
ttyv6   “/usr/libexec/getty Pc”         xterm   on  secure
ttyv7   “/usr/libexec/getty Pc”         xterm   on  secure
ttyv8   “/usr/local/bin/xdm -nodaemon”  xterm   off secure
# Serial terminals
# The ‘dialup’ keyword identifies dialin lines to login, fingerd etc.
ttyu0   “/usr/libexec/getty std.9600”   dialup  off secure
ttyu1   “/usr/libexec/getty std.9600”   dialup  off secure
ttyu2   “/usr/libexec/getty std.9600”   dialup  off secure
ttyu3   “/usr/libexec/getty std.9600”   dialup  off secure
# Dumb console
dcons   “/usr/libexec/getty std.9600”   vt100   off secure

Basta mudar a coluna secure para insecure conforme abaixo:

# If console is marked “insecure”, then init will ask for the root password
# when going to single-user mode.
console none                            unknown off insecure
#
ttyv0   “/usr/libexec/getty Pc”         xterm   on  insecure
# Virtual terminals
ttyv1   “/usr/libexec/getty Pc”         xterm   on  insecure
ttyv2   “/usr/libexec/getty Pc”         xterm   on  insecure
ttyv3   “/usr/libexec/getty Pc”         xterm   on  insecure
ttyv4   “/usr/libexec/getty Pc”         xterm   on  insecure
ttyv5   “/usr/libexec/getty Pc”         xterm   on  insecure
ttyv6   “/usr/libexec/getty Pc”         xterm   on  insecure
ttyv7   “/usr/libexec/getty Pc”         xterm   on  insecure
ttyv8   “/usr/local/bin/xdm -nodaemon”  xterm   off insecure
# Serial terminals
# The ‘dialup’ keyword identifies dialin lines to login, fingerd etc.
ttyu0   “/usr/libexec/getty std.9600”   dialup  off insecure
ttyu1   “/usr/libexec/getty std.9600”   dialup  off insecure
ttyu2   “/usr/libexec/getty std.9600”   dialup  off insecure
ttyu3   “/usr/libexec/getty std.9600”   dialup  off insecure
# Dumb console
dcons   “/usr/libexec/getty std.9600”   vt100   off insecure

Cuidado com a linha “console none                            unknown off insecure” porque se você colocar ela como insecure quando precisar entrar em sigle mode para recuperar algo no sistema, será pedido a senha de root. Isso pode ser ruim se caso estiver tentando recuperar senhas. Logo ficará ao seu critério colocar a console como insecure. Qualquer tty definida como insecure não será possível acessar como root.

Agora vamos restringir certos acessos, mas chequem se alguma aplicação de vocês precisará de acesso à um desses arquivos em específico:

# chflags noschg /usr/bin/crontab

# echo “root” > /var/cron/allow
# echo “root” > /var/at/at.allow
# chmod o= /etc/crontab
# chmod o= /usr/bin/crontab
# chmod o= /usr/bin/at
# chmod o= /usr/bin/atq
# chmod o= /usr/bin/atrm
# chmod o= /usr/bin/batch

# chflags schg /usr/bin/crontab

Alguns arquivos já tem vindo com proteções usando chflags e por isso precisamos removê-las para alterar as permissões e depois adiciona-las novamente. Para ver se algum arquivo está com chflags setado use o ls com o parâmetro “o”. Abaixo um exemplo:

# ls -laAGo/usr/bin/crontab
-r-sr-xr-x  1 root  wheel  schg  27404 Feb  9 15:17 /usr/bin/crontab

Repare na quinta coluna a flag schg que diz que esse arquivo é imutável.

Continuando… acima estamos restringindo o uso do cron e at somente para o root. Nenhum outro usuário do sistema poderá usá-los. Também estamos removendo as permissões de usuários regulares dos arquivos pertinentes ao cron e at.

Abaixo mais restrições aos usuários regulares para que não acessem alguns conteúdos pois não deveriam ser de interesse deles:

# chmod o= /etc/fstab
# chmod o= /etc/ftpusers
# chmod o= /etc/group
# chmod o= /etc/hosts
# chmod o= /etc/hosts.allow
# chmod o= /etc/hosts.equiv
# chmod o= /etc/hosts.lpd
# chmod o= /etc/inetd.conf
# chmod o= /etc/login.access
# chmod o= /etc/login.conf
# chmod o= /etc/newsyslog.conf
# chmod o= /etc/rc.conf
# chmod o= /etc/ssh/sshd_config
# chmod o= /etc/sysctl.conf
# chmod o= /etc/syslog.conf
# chmod o= /etc/ttys

Quanto aos logs também pode ser feito uma coisa interessante com chflags mas tenham em mente que fazendo isso o rotacionamento de logs não funcionará mais. Minha sugestão, se você quiser uma boa segurança nesse aspecto, é você montar um servidor de logs e configurar os demais servidores para enviarem os logs para esse servidor. Aí sim nesse servidor específico você poderia até fazer o que está abaixo:

# chmod o= /var/log
# chflags sappnd /var/log
# chflags sappnd /var/log/*

Com essa conf acima, os arquivos de log estarão em append only e não poderá ser removida qualquer linha deles, somente adicionada.

Mais restrições à usuários regulares para que não tenham informações importantes do sistema como quem está logado, listar jails, quem logou e por aí vai:

# chmod o= /usr/bin/users
# chmod o= /usr/bin/w
# chmod o= /usr/bin/who
# chmod o= /usr/bin/lastcomm
# chmod o= /usr/sbin/jls
# chmod o= /usr/bin/last
# chmod o= /usr/sbin/lastlogin

Desabilitar o uso do rlogin e do rsh:

# chflags noschg /usr/bin/rlogin /usr/bin/rsh

# chmod ugo= /usr/bin/rlogin
# chmod ugo= /usr/bin/rsh

# chflags schg /usr/bin/rlogin /usr/bin/rsh

O syslogd vem por default habilitado para receber logs e por isso abre uma porta de acesso ao mesmo. Como falei anteriormente acho mais seguro fazer isso em um servidor separado e por isso vamos desabilitar essa função no syslogd local e deixá-la habilitada no servidor de logs. O syslogd continuará funcionando do mesmo jeito só não haverá nenhuma porta escutando uma conexão.

# echo ‘syslogd_flags=”-ss”‘ >> /etc/rc.conf

Vamos partir agora para variáveis da systcl. Existem 2 variáveis que habilitam o recurso log_in_vain que é muito útil quando queremos saber se alguém está tentando acessar alguma porta de serviço que não esteja habilitada no nosso servidor. Para habilitar é muito simples adicione as linhas abaixo no seu /etc/sysctl.conf. Isso também pode ser habilitado pelo /etc/rc.conf, para isso consulte o /etc/defaults/rc.conf.

sysctl net.inet.tcp.log_in_vain=1
sysctl net.inet.udp.log_in_vain=1

Fazendo um teste de uma outra máquina, tentei fazer um telnet na máquina protegida (10.255.0.12) na porta 9998/tcp o que resultou no log abaixo:

/var/log/messages:May 20 11:52:11 protheus kernel: TCP: [192.168.255.1]:59486 to [10.255.0.12]:9998 tcpflags 0x2<SYN>; tcp_input: Connection attempt to closed port

Agora vamos bloquear que outros usuários possam ver processos de outros usuários, colocando a linha abaixo também no /etc/sysctl.conf:

security.bsd.see_other_uids=0

Muitas das coisas do post acima, retirei dessa documentação do Jon LaBass. Pelo menos as que achei mais interessantes e adicionei algumas mudanças pois uma coisa que foi citada em seu texto, ainda não existe implementação no FreeBSD que foi o caso do idletime no /etc/login.conf. Ela existe para uso de aplicações de terceiros mas não na base do FreeBSD, ou seja, o fato de setar ela não irá funcionar e por isso usei outros recursos como o TMOUT e o autologout. Existem outras alterações citadas por ele mas preferi expor apenas as que me interessei.

É isso aí pessoal e até a próxima.

Não deixem de ler o meu primeiro post sobre Melhorando a Segurança no FreeBSD com securelevel + chflags aqui.

Share Button

Aviso importante! Mudanças na versão do PHP 5 em /usr/ports/lang/php5

Posted by gondim | Posted in Dicas, FreeBSD | Posted on 18-05-2012

Tags:, ,

0

Para aqueles que estão usando o PHP 5.3 instalado à partir do /usr/ports/lang/php5 perceberão que após um “portsnap fetch update” a versão mudará para o PHP 5.4.3. Cuidado na hora de atualizar o PHP para não trocar de versão acidentalmente. O PHP 5.3 agora encontra-se em:

/usr/ports/lang/php53

Os desenvolvedores afirmam que são poucas as incompatibilidades entre versão 5.3 e a 5.4. Mas todo cuidado é bom e por isso aqui está a página informando as incompatibilidades.

As novidades dessa nova versão podem ser vistas aqui.

É isso aí pessoal. Aqui no meu sistema eu mudei os pacotes php5-… para php53-… usando o portmaster citado nesse post.

Grande abraço aos leitores daqui do blog.

 

Share Button

Gerenciando seus pacotes no FreeBSD com o portmaster

Posted by gondim | Posted in Dicas, FreeBSD, Software Livre | Posted on 18-05-2012

Tags:, ,

12

Uma coisa que sempre foi complicada quando trabalhamos com pacotes compilados, é a famosa dependência. Quando instalamos uma aplicação pelo ports, o mesmo se encarrega de baixar, compilar e instalar todas as dependências que aquela aplicação necessita. Dependendo da aplicação e dependência ainda podem aparecer janelas de configurações de opções de compilação para aquele determinado pacote e aí dependendo das marcações, mais dependências poderão surgir no contexto. Até aqui tudo bem, o problema maior é quando você precisa atualizar uma lib ou aplicação que envolverá atualizar outras aplicações da sua dependência. Para você ter uma idéia do que estou dizendo vou pegar como exemplo a libpcre e usar o comando “pkg_info -R” para mostrar quais pacotes dependem dele:

# pkg_info -R pcre-8.30_2
Information for pcre-8.30_2:

Required by:
ap22-mod_auth_mysql_another-3.0.0_4
ap22-mod_wsgi-2.8_2
apache-2.2.22_5
pecl-APC-3.1.9_1
pecl-intl-1.1.2_3
pecl-pdflib-2.1.8_1
phpMyAdmin-3.4.10.2
postfixadmin-2.3.5
roundcube-0.7,1
php5-5.3.13
php5-zip-5.3.13
php5-zlib-5.3.13
php5-mbstring-5.3.13
php5-gettext-5.3.13
php5-mysqli-5.3.13
php5-gd-5.3.13
php5-imap-5.3.13
php5-xml-5.3.13
php5-openssl-5.3.13
php5-session-5.3.13
php5-iconv-5.3.13
php5-pspell-5.3.13
php5-dom-5.3.13
php5-sqlite-5.3.13
php5-json-5.3.13
php5-ldap-5.3.13
php5-hash-5.3.13
php5-ctype-5.3.13
php5-bz2-5.3.13
php5-mysql-5.3.13
php5-xmlrpc-5.3.13
php5-filter-5.3.13
php5-mcrypt-5.3.13
postfix-2.8.10,1

Isso quer dizer que se eu atualizar essa lib, terei que recompilar todos esses pacotes que dependem dela. Imagine o trabalho e agora imagine ter que fazer isso em mais de um servidor. Uns 2 anos atrás isso me assombrou pois na época tentei usar o portupgrade e não me adaptei muito bem. Foi quando conheci o portmaster e realmente fiquei maravilhado com essa ferramenta fabulosa escrita em shell script por Douglas Barton.

Para usarmos o portmaster precisamos primeiramente instala-lo:

# cd /usr/ports/ports-mgmt/portmaster

# make install clean

# rehash <- se tiver usando csh

O man portmaster pode lhe apresentar todas as opções disponíveis e por isso vou mostrar apenas algumas básicas aqui:

Instalando um pacote:

# portmaster lang/php5-extensions   <- esse comando fará a instalação do PHP5 e as extensões que você selecionar para ele.

Excluir um pacote:

# portmaster -e php5-bz2-5.3.13   <- nesse caso estou querendo excluir esse pacote php5-bz2

Substituir uma versão de pacote já instalada por outra:

# portmaster -o /usr/ports/mail/postfix28 postfix-2.7.8_1,1   <- nesse exemplo estou substituindo o postfix 2.7 que já está instalado no meu sistema, pelo postfix 2.8. Repare que o parâmetro “-o” especifica o local onde se encontra o novo pacote que será colocado no lugar do anterior.

Atualizar e recompilar todos os pacotes instalados:

# portmaster -a -f   <- quando você quiser atualizar e recompilar todos os pacotes instalados no seu sistema. Dependendo da quantidade de pacotes isso poderá demorar um bocado.

Atualizar um pacote e todas as suas dependências e ainda apagando os distfiles:

# portmaster -d -Rf databases/rrdtool    <- nesse caso vai atualizar e recompilar o pacote rrdtool e todas as suas depências. O “-d” vai dizer para o portmaster apagar os distfiles.

Para excluir um pacote da atualização:

# portmaster -a -f -x roundcube   <- aqui vou atualizar todos os pacotes exceto o pacote roundcube

Bem é isso pessoal. Mais detalhes estudem o man do portmaster.

Ah! Não esqueçam de fazer um “portsnap fetch update” antes de usar o portmaster.  🙂

Share Button

FreeBSD no desktop. Por que não?

Posted by gondim | Posted in Dicas, FreeBSD, Tecnologia | Posted on 18-05-2012

Tags:, , ,

2

Hoje venho falar de algo que não é novidade no mundo BSD mas aqui, para nós, não é tão utilizado quanto uma certa distribuição GNU/Linux. FreeBSD sempre foi um sistema voltado para servidores mas nada impedia que fosse instalado em desktops. Como sabemos existem muitos pacotes e configurações necessárias para que o sistema se torne mais amigável. Para esse propósito surgiu um projeto como o PC-BSD. O projeto tem o objetivo de ser usado no ambiente desktop tornando-o mais simples ao usuário. Se gostas de um desafio e conhecer novos ambientes por que não experimentar esse sistema? Um outro projeto destinado à desktops mas de uma forma mais Hacker, é o MidnightBSD. Não sou daqueles que afirmam que um sistema é melhor ou pior que o outro mas incentivo as pessoas à experimentarem e verem se gostam. Isso sim é liberdade, poder usar aquilo que gostamos. Se o que gostamos é pago ou free aí é outro problema. Mas liberdade, para mim, é ser livre para poder escolher. Ser obrigado à algo não é e nunca será sinônimo de liberdade.

Vamos à algumas características de cada Desktop:

PC-BSD: atualmente na versão 9.0, esse projeto é o mesmo FreeBSD e acompanha seu versionamento oficial. Possui todos os recursos existentes no FreeBSD mas também tem umas características únicas, como seu sistema de empacotamento próprio conhecido como PBI (Push Button Installer). Os arquivos .pbi, encontrados no repositório AppCafe™,  facilitam a instalação de novos pacotes e a atualização do sistema como um todo. Uma comparação seria a semelhança com o Central de Programas do Ubuntu Linux. Também pode ser instalado com KDE, Gnome e outros gerenciadores de janelas.

Umas imagens de desktops com PC-BSD:

MidnightBSD: atualmente na versão 0.3. O MidnightBSD tem uma característica bem diferenciada do PC-BSD pois este surgiu de um fork do FreeBSD 6.1 beta mas a versão atual foi baseada no FreeBSD 7.0. Este sistema possui também tecnologia proveniente do DragonFly, OpenBSD e NetBSD. A instalação não é amigável como a do PC-BSD. Eu vejo o MidnightBSD para um público desktop Hacker vamos dizer assim.  🙂

Eles criaram um sistema de gerenciamento de pacotes chamado mports com o intuito de facilitar a nossa vida e muito parecido em sua sintaxe com o apt-get do GNU/Debian. Exemplos: mport update, mport search <string>, mport info <pacote>, mport install <pacote> e outros mais.

 

 

 

 

 

 

 

Bem, agora é com vocês e boa diversão.

Share Button

Link Aggregation – a solução para não usar 10GbE ainda.

Posted by gondim | Posted in Dicas, FreeBSD, Tecnologia | Posted on 12-05-2012

Tags:, ,

0

Não é de hoje a busca por links de grande capacidade, principalmente por Provedores de Internet. Lembro da época que interfaces de rede Gigabit eram muito caras e vivíamos com redes 10/100. O provedor que trabalho, na época tinha link de 2Mbps quando ainda existiam conexões discadas. A interface de rede que ligava o provedor ao fornecedor do link Internet era uma 3Com 10/100 que atendia muito bem. Mas o crescimento chegou rápido e fomos aumentando nosso link até que chegamos em 100Mbps. Nesse patamar a boa e velha 3Com não atendia mais as necessidades e aí mudamos para interface Intel Gigabit. Continuamos crescendo e hoje nosso link pulou para 1.2Gbps. Mas como colocar 1.2Gbps em uma interface de apenas 1Gbps? Não coloca. Nesse ponto surge a necessidade de um upgrade de equipamento para 10GbE. Bem, são equipamentos extremamente caros e por isso partimos para outra solução conhecida como: Link Aggregation e que o FreeBSD faz muito bem.

Com o Link Aggregation (lagg) você pode adicionar interfaces de rede somando as velocidades e ao mesmo tempo balanceando e servindo de failover. Para o Provedor aqui foi preciso apenas adicionar mais uma interface de rede Intel Gigabit e configurar o lagg e com isso agora temos quase 2Gbps para nos atender sem grandes investimentos.

Irei mostra aqui um exemplo de configuração que inclusive está funcionando hoje em nosso router central que é um FreeBSD 9.0 64bits stable. Este router encontra-se ligado em uma switch com suporte à lagg que interliga nossas Cidades através de um clear channel em fibra.

Primeiramente precisamos do suporte ao lagg ativado. Isso pode ser feito de 2 formas, compilando no kernel ou carregando em tempo de boot.

Para colocar direto no kernel, basta adicionar a linha abaixo no seu kernel, compilar e instalar seu novo kernel.

device          lagg

Caso não queira compilar o kernel com suporte você pode optar por carrega-lo como módulo no boot. Para isso basta adicionar a linha abaixo em /boot/loader.conf:

if_lagg_load=”YES”

Para essa configuração usei o esquema de start_if.<interface> diferente do usado no rc.conf e pode ser lido aqui.

No meu router criei os arquivos /etc/start_if.em2 e /etc/start_if.em3 conforme abaixo:

start_if.em2:

/sbin/ifconfig lagg1 create
/sbin/ifconfig em2 up

A primeira linha estou criando uma interface virtual de link aggregation chamada lagg1. Estou criando a lagg1 porque já tenho uma lagg0 junto ao meu fornecedor de link Internet e no final as configurações serão as mesmas, logo irei mostrar apenas uma.

Na segunda linha apenas levanto a interface em2, deixando-a ligada e sem IP mesmo.

start_if.em3:

/sbin/ifconfig em3 up
/sbin/ifconfig lagg1 laggproto lacp laggport em2 laggport em3 186.xxx.xx.1 netmask 255.255.255.224

Na configuração da outra interface em3 nós levantamos ela sem IP algum e na segunda linha é que configuramos nosso lagg. Onde dizemos que o lagg1 vai usar o protocolo lacp (Link Aggregation Control Protocol). Vai agregar as interfaces em2, em3 e setar o IP 186.xxx.xx.1 na lagg1.

Existem outras opções de protocolo mas o lacp é o mais completo e interessante ao meu ver. Você pode consultar outros protocolos através do: man lagg

Feito isso basta agora você interligar as 2 interfaces de rede nas 2 portas da switch que foram configuradas para fazer o lagg. Simplesmente isso. Para ter certeza que tudo vai funcionar certo, re-inicie o sistema.

Como saber se o lagg está funcionando? Simples também. Faça um ifconfig no lagg1 e veremos algo assim:

lagg1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC>
ether 00:1e:67:07:9d:cc
inet 10.10.10.10 netmask 0xffffffff broadcast 10.10.10.10
inet6 fe80::21e:67ff:fe07:9dcc%lagg1 prefixlen 64 scopeid 0x12
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
media: Ethernet autoselect
status: active
laggproto lacp
laggport: em3 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: em2 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

Nas 2 últimas linhas tem que estar como ACTIVE nas 2 interfaces, senão o lagg não estará funcionando.

Para visualizarmos o consumo de banda independente por interface (em2 e em3) ou o somatório (lagg1) podemos instalar e usar o programa nload que está no ports.

# cd /usr/ports/net/nload/

# make install clean

Com o comando “nload -u k” e usando as setas para baixo e para cima você poderá navegar nas interfaces existentes. Abaixo as telas do meu sistema em funcionamento:

Bem é isso. Assim como muitas outras coisas no FreeBSD, essa não poderia deixar de ser tão simples e fácil.

Espero que seja útil e ajude.  😉

Share Button