Escolar Documentos
Profissional Documentos
Cultura Documentos
EDITORIAL
Diretor Geral
Rafael Peregrino da Silva
rperegrino@linuxmagazine.com.br
Editores
Flvia Jobstraibizer
fjobs@linuxmagazine.com.br
Laura Loenert Lopes
llopes@linuxmagazine.com.br
Editora de Arte
Larissa Lima Zanini
llima@linuxmagazine.com.br
Editor Online
Felipe Brumatti Sentelhas
fsentelhas@linuxmagazine.com.br
Colaboradores
Alexandre Borges, Alexandre Santos, Augusto Campos,
Ben Martin, Brian Proffitt, Cezar Taurion, Charly Khnast,
David J. Dodd, Jon maddog Hall, Klaus Knopper, Kurt
Seifried, Marcin Teodorczyk, Markus Junginger, Michael
Messner, Thomas Drilling, Tim Schrmann, Zack Brown.
Traduo
Laura Loenert Lopes, Rodrigo Garcia,
Sebastio Luiz da Silva Guerra.
Reviso
Ana Carolina Hunger.
Editores internacionais
Uli Bantle, Andreas Bohle, Jens-Christoph Brendel,
Hans-Georg Eer, Markus Feilner, Oliver Frommel,
Marcel Hilzinger, Mathias Huber, Anika Kehrer,
Kristian Kiling, Jan Kleinert, Daniel Kottmair,
Thomas Leichtenstern, Jrg Luther, Nils Magnus.
Anncios:
Rafael Peregrino da Silva (Brasil)
anuncios@linuxmagazine.com.br
Tel.: +55 (0)11 3675-2600
Penny Wilby (Reino Unido e Irlanda)
pwilby@linux-magazine.com
Amy Phalen (Amrica do Norte)
aphalen@linuxpromagazine.com
Hubert Wiest (Outros pases)
hwiest@linuxnewmedia.de
Diretor de operaes
Claudio Bazzoli
cbazzoli@linuxmagazine.com.br
Na Internet:
www.linuxmagazine.com.br Brasil
www.linux-magazin.de Alemanha
www.linux-magazine.com Portal Mundial
www.linuxmagazine.com.au Austrlia
www.linux-magazine.es Espanha
www.linux-magazine.pl Polnia
www.linux-magazine.co.uk Reino Unido
www.linuxpromagazine.com Amrica do Norte
Apesar de todos os cuidados possveis terem sido tomados
durante a produo desta revista, a editora no responsvel
por eventuais imprecises nela contidas ou por consequncias
que advenham de seu uso. A utilizao de qualquer material da
revista ocorre por conta e risco do leitor.
Nenhum material pode ser reproduzido em qualquer meio, em
parte ou no todo, sem permisso expressa da editora. Assume-se que qualquer correspondncia recebida, tal como cartas, emails, faxes, fotografias, artigos e desenhos, sejam fornecidos para publicao ou licenciamento a terceiros de forma
mundial no-exclusiva pela Linux New Media do Brasil, a menos que explicitamente indicado.
Linux uma marca registrada de Linus Torvalds.
Linux Magazine publicada mensalmente por:
Linux New Media do Brasil Editora Ltda.
Rua So Bento, 500
Conj. 802 S
01010-001 So Paulo SP Brasil
Tel.: +55 (0)11 3675-2600
Direitos Autorais e Marcas Registradas 2004 - 2012:
Linux New Media do Brasil Editora Ltda.
Impresso e Acabamento: IBEP Grfica.
Atendimento Assinante
www.linuxnewmedia.com.br/atendimento
So Paulo:
+55 (0)11 3675-2600
Rio de Janeiro: +55 (0)21 3512 0888
Belo Horizonte: +55 (0)31 3516 1280
ISSN 1806-9428
Impresso no Brasil
NDICE
CAPA
Sempre alerta!
33
Rpidos e silenciosos, invasores podem atacar uma rede, danificla e sair sem deixar rastros antes que voc perceba. Saiba
como evitar estes e outros problemas de segurana.
Rede de segurana
34
Agulha no palheiro
40
Anlise de vulnerabilidades
44
www.linuxmagazine.com.br
SEGURANA
COLUNAS
Klaus Knopper
12
Charly Khnast
14
Augusto Campos
16
Alexandre Borges
18
Kurt Seifried
20
Zack Brown
22
Segurana da informao
57
60
NOTCIAS
Geral
24
TUTORIAL
CORPORATE
Crptico
Notcias
66
26
28
30
32
ANDROID
Toque perfeito
50
70
PROGRAMAO
Centro do alvo?
72
REDES
Squid no meio
54
A linguagem de programao Dart a atual alternativa
do Google ao JavaScript. Executada principalmente em
navegadores, tambm pode ser utilizada em linha de
comando e em servidores como substituta para o PHP.
SERVIOS
Como monitorar a rede quando os sistemas-clientes se conectam
a servidores seguros atravs do protocolo HTTPS? Mantenha
o monitoramento em dia com o servidor proxy Squid.
Editorial
06
Emails
10
Linux.local
78
Preview
82
CORPORATE
Inteligncia
coletiva
Conhecimento na era digital existe para ser compartilhado. E o volume
de dados armazenados na rede tende a crescer assustadoramente.
Cabe a ns, usurios, saber filtrar aquilo que realmente nos interessa.
32
Mais informaes:
[1] Compatible Time-Sharing System:
http://en.wikipedia.org/wiki/
Compatible_Time-Sharing_System
[2] What the Internet Is Doing to Our Brains, by
Nicholas Carr: http://www.theshallowsbook.com/
nicholascarr/Nicholas_Carrs_The_Shallows.html
[3] W3C Web Semntica: http://
www.w3.org/2001/sw/
www.linuxmagazine.com.br
CAPA
Sempre alerta!
Rpidos e silenciosos, invasores podem atacar uma rede, danific-la e sair sem deixar rastros
antes que voc perceba. Saiba como evitar estes e outros problemas de segurana.
por Flvia Jobstraibizer
novo protocolo IP esconde e prepare-se para, juntamente com a adoo do protocolo, manter sua rede segura!
A nova gerao da tecnologia traz diversos benefcios como o IPv6, o HTML5, BIG DATA, HPC, novos
sistemas de arquivos, novos kernels e toda uma sorte
de ferramentas de segurana para manter os invasores
longe dos seus dados. No entanto, nem toda essa avanada tecnologia far com que voc durma tranquilo.
preciso estar sempre alerta!
Matrias de capa
Rede de segurana
34
Agulha no palheiro
40
Anlise de vulnerabilidades
44
33
3
ANDROID | Multitoque
Android multitoque
ANDROID
Toque perfeito
Com a verso 2.0
do Android, os
desenvolvedores passaram
a ter acesso a recursos
multitoque anteriormente
reservados a aplicativos
do sistema. Mas ateno:
preciso ter cuidado
ao manusear a API.
por Markus Junginger
Uma infinidade
de touchpads
Ao contrrio do iOS, o Android
precisa lidar com uma variedade
de combinaes de hardware e software. Primeiro, preciso trabalhar
com uma API que suporte mltiplas
entradas por toque. No caso do An-
Listagem 1: onTouchListener
01 public boolean onTouch(View
v, MotionEvent event) {
02 if (event.getAction() ==
MotionEvent.ACTION_DOWN) {
03
int x = event.getX();
04
int y = event.getX();
05
doSomething(x,y);
06 }
07 }
50
Descoberta das
entradas multitoque
A API multitoque do Android baseada no recurso de toque, introduzido
no Android 1.0. A extenso principal
para multitoque est relacionada
www.linuxmagazine.com.br
Multitoque | ANDROID
Listagem 2: onTouchListener
recebendo Motion Events
01
02
03
04
Liberdade para
os dedos
Se precisar manter cada dedo na tela
por um perodo de tempo, ser necessrio utilizar indicadores de ID.
O getPointerId(), que pressupe o
indicador de index como parmetro, cuida desta tarefa. O exemplo
a seguir demonstra o uso de IDs: o
indicador e o dedo mdio tocam na
tela, um aps o outro. Se o usurio
manter um dedo da tela, o programa
no consegue identificar o dedo sem
conhecer o ID do indicador.
No exemplo, o dedo indicador
fornece um indicador ID de 0 por
ser o primeiro a tocar na tela, e ao
dedo mdio atribudo o prximo
indicador ID de 1. Com base nos IDs,
o programa pode identificar cada
dedo individualmente e, assim, sabe
qual dedo ainda est tocando a tela.
A utilizao de indicadores mltiplos introduz dois novos cdi-
51
ANDROID | Multitoque
Figura 1 Dedos cruzados causam problemas, a caixa de vnculo para as posies dos dedos a mesma para ambas as variantes, o que significa
que o dispositivo no pode identificar precisamente as posies.
Teste de mltiplos
toques
O recurso oferecido pelo aplicativo
de teste limitado: ajuda a visualizar
cada indicador a partir de um crculo,
que assume diferentes cores dependen-
Quadro 1: Indicadores
Nos crculos multitoque do Android, um indicador representado por um
dedo que interage com a tela. Em outras palavras, um indicador pode ser
alguma outra fonte de entrada, como um cursor do mouse. Os desenvolvedores enumeram indicadores usando o getPointerCount(). Ao invs de mtodos de acesso sem parmetros do MotionEvent, temos agora mtodos sobrecarregados, cada um com o indicador de ndice, como o
getX(int pointerIndex). Dependendo do aplicativo, o desenvolvedor pode
no precisar de mais nada alm de informaes para projetar um aplicativo
que suporte mltiplas entradas por toque.
52
www.linuxmagazine.com.br
Multitoque | ANDROID
coordenadas e chamadas de ao
necessrios para desenhar crculos
so coletados pelo onTouchListener
da listagem 2 nas arrays points[] e
lastActions[]. A cor e o texto de um
crculo so definidos pelos mtodos
getColor() e getActionText(). A mltipla escolha determina o valor de
retorno, que depende do cdigo da
ltima ao atribuda ao indicador.
Finalmente, o aplicativo tambm
desenha o nmero de indicadores
contidos no MotionEvent em formato
texto. O mtodo calcDevicePixels()
auxiliar e verifica o nmero especfico de pixels do dispositivo, que
por sua vez depende da profundidade
de pixels dispostos na tela.
Concluso
Hardware e software em dispositivos
Android possuem uma enorme influncia no suporte multitoque. Telas
que suportam mltiplas entradas
Pinch e zoom
Possivelmente, a novidade mais interessante o ScaleGestureDetector,
que detecta e amplia gestos. Trs
etapas so necessrias para utiliz-lo:
primeiro, preciso instanciar um
ScaleGestureDetector; em seguida, passar cada MotionEvent para o
ScaleGesture-Detector; por ltimo,
necessrio um listener especial
para coletar os novos dados.
A listagem 4 mostra estas trs etapas
nos mtodos init() e onTouchEvent(),
e na classe MyScaleListener. O mtodo
onScale() escalona a visualizao ao
Mais informaes
[1] API multitoque para Android:
http://developer.android.
com/reference/android/
view/MotionEvent.html
[2] Cdigo-fonte para este artigo:
http://smart-developer.com/
Resources/Article-Code
Gostou do artigo?
o?
Queremos ouvir sua
a opinio.
Fale conosco em
cartas@linuxmagazine.com.br
zine.com.
Este artigo no nosso
so site:
sit
http://lnm.com.br/article/7648
article 648
53
SEGURANA
Olhar penetrante
Tire proveito do baixo consumo de energia
oferecido por dispositivos NAS modernos
para monitorar suas cmeras.
por Ben Martin
60
Instalao
Se o usurio no possuir um dispositivo
NAS instalado, a configurao inicial
para este aparelho exige que seja feita
a remoo de uma (ou mais) bandejas
individuais de disco rgido, um parafuso
do disco da bandeja, e o deslizamento
de volta para a unidade. Uma vez que
os cabos de energia e rede estiverem
conectados, teremos completado a
configurao de hardware. Por outro
lado, o Synology DS212j desliza em
duas partes separadas, e fixamos o disco
rgido diretamente em um gabinete
de disco rgido interno antes de fazermos o mesmo com a capa exterior do
Synology NAS.
Quando ligamos o TS-219P II, o
dispositivo tentar obter um endereo
www.linuxmagazine.com.br
Como instalar o
Debian no ARM
Para uma personalizao mais avanada, temos a opo de instalar o Debian
ao invs de utilizar o firmware de fbrica. Instalar o Debian permite acessar
o ZoneMinder atravs do gerenciador
de pacotes e compilar o software mais
facilmente na mquina NAS.
A instalao do Debian em uma
mquina ARM personalizada [3] pode
parecer assustadora pela primeira vez.
Histrias de pessoas com instalao
pela metade que viram apenas tijolos
caros so folclore comum; para tornar
as coisas mais intrigantes, no temos
qualquer tela ligada ao dispositivo que
permita descobrir o que deu errado.
Alm disso, teremos que configurar
o suporte de opes personalizadas
para o hardware fornecido, como
alto-falantes, LEDs e fans.
Dito isto, o processo de instalao do Debian bastante simples e
61
Figura 3 Uma vez que o firmware gravado em disco, configure seu login,
localizao, IP, e servios de informao.
62
www.linuxmagazine.com.br
ZoneMinder
As principais dependncias do ZoneMinder so Perl, MySQL, OpenSSL,
a biblioteca JPEG, alguns mdulos
Perl, e (opcionalmente) FFmpeg. O
ZoneMinder inclui cdigo PHP, C++
e Perl. Depois de instalar o Debian no
sistema, podemos tirar proveito dos
repositrios de pacotes para instalar o
ZoneMinder sem ter que compil-lo. A
instalao simples como chamar um:
apt-get install zoneminder
Com este link no lugar e o Apache reiniciado, devemos ver a interface online do ZoneMinder em
http://NAS/zm/, supondo que NAS
o endereo IP da unidade NAS.
O boto Add New Monitor na parte
inferior da interface do ZoneMinder
permite que adicionemos uma nova
cmera no sistema (figura 5). Para este
exemplo, usaremos duas cmeras: a
TP-Link TLSC3171G 640x480 IP e
a Logitech C910 USB 1080p. A parte complicada na configurao de
cmeras saber o que o caminho
do host remoto (Remote Host Path)
deve ser e ter a certeza de que a re-
Memria
compartilhada
O ZoneMinder precisa manter as
imagens recentes que recebe das cmeras em algum lugar na memria.
Nas verses anteriores, o ZoneMinder usava memria compartilhada
para armazen-las. Agora, ele cria e
usa arquivos de memria mapeados
em /dev/shm. Independentemente de
qual sistema esteja em uso, pode ser
necessrio adequar o NAS para fazer
o armazenamento correto de memria disponvel para estas imagens.
O ZoneMinder 1.25.0 do Debian
Wheezy utilizado neste artigo usa o
dospositivo /dev/shm para as imagens.
A instalao padro criou um sistema
de arquivos tmpfs com um tamanho
limite de 100MB. O ZoneMinder
precisa de cerca de 100MB para uma
nica cmera de 1280x720, e cerca
de 35MB para uma nica cmera de
63
Como detectar
eventos
O que faz o ZoneMinder interessante
a sua capacidade de detectar movimento em reas crticas de um quadro
da cmera e gravar o vdeo automaticamente quando o movimento ocorre.
Depois de colocar a cmera no modo
de deteco de movimento clicando
no link Funo da cmera na pgina
inicial de instalao do ZoneMinder,
podemos mascarar partes do quadro
de vdeo clicando no link Zonas da
cmera. Desta forma, o ZoneMinder
ignora movimento fora da sua rea
de interesse.
Muitos fatores determinam a quantidade de CPU que necessria
para a deteco de movimentos:
o tamanho da imagem da cmera,
imagens em cores ou imagens em
escala de cinza, o nmero de quadros por segundo de um processo,
a dimenso das zonas de deteco,
e os parmetros utilizados no algoritmo de deteco.
Watts
Ao
10
13
43
15-25
41
15
42
64
Mergulho no cdigo
Pelo fato de no vermos muita diferena no uso de CPU para cada um dos
algoritmos de deteco de movimento
que o ZoneMinder oferece, decidimos dissecar um pouco o cdigo. O
cdigo chama Monitor::DetectMotion()
a cada quadro para trabalhar a pontuao (quantidade de movimento)
e se um alarme foi acionado. Tendo
esse mtodo retornar sem alarme
de imediato ao invs de deteco de
movimento real resultou em cerca de
8% da CPU a ser utilizada para uma
cmera de 640x480 executando a 6fps.
www.linuxmagazine.com.br
Uma das primeiras coisas que DetectMotion() faz criar uma imagem
delta, medindo o quanto o quadro
atual difere de um quadro de referncia. A imagem delta apenas registra
a intensidade da diferena para cada
pixel em vez da diferena de cada
vermelho, verde e azul. Para fazer a
imagem delta e exclu-la novamente
antes de retornar nenhum alarme,
15% da CPU foi necessria antes
de qualquer deteco de movimento
ter ocorrido.
O ncleo do mtodo Imagem::Delta()
cria uma imagem delta e registra quanto cada pixel diferente de uma imagem de referncia:
...
red = y_r_table[*psrc++ - *pref++];
green = y_g_table[*psrc++ - *pref++];
blue = y_b_table[*psrc++ - *pref++];
*pdiff++ = abs_tablered + green +;
...
Consideraes finais
Os chips ARM top de linha que
equipam alguns hardwares NAS
modernos fornecem uma plataforma para computao em tempo real
bastante interessante, com consumo de energia reduzido. A CPU
de 2GHz Kirkwood do NAS testada aqui poderia realmente apenas
lidar com deteco de movimento
em uma taxa de quadros baixa em
duas cmeras IP com 640x480 ao
mesmo tempo.
Tenha em mente que o dispositivo pode fazer isso com menos de
15 watts, incluindo o disco rgido.
Quando no h eventos acontecen-
Mais informaes
[1] Pgina do QNAP TS219P II: http://web.
qnap.com/pro_detail_
feature.asp?p_id=211/
[2] ZoneMinder: http://
www.zoneminder.com/
[3] Debian no QNAP NAS: http://
www.cyrius.com/debian/
kirkwood/qnap/ts-219/
[4] Documentao do instalador
do Debian ARM: http://www.
debian.org/releases/lenny/
arm/install.pdf.pt_BR
[5] Recuperao de firmware do
QNAP: http://wiki.qnap.
com/wiki/Firmware_Recovery/
[6] Discusso sobre uso de CPU
pelo ZoneMinder: http://www.
zoneminder.com/wiki/index.
php/FAQ#Why_is_ZoneMinder_
using_so_much_CPU.3F
[7] Arquitetura ARM: http://
en.wikipedia.org/wiki/
ARM_architecture
Gostou do artigo?
igo?
65
TUTORIAL
Crptico
A criptografia uma parte importante da segurana
em TI, e o OpenSSL uma conhecida ferramenta
de criptografia para o Linux. Especialistas confiam
no OpenSSL porque livre, possui muitos
recursos e fcil de usar em scripts Bash.
por Marcin Teodorczyk
66
Como testar
conexes SSL/TLS
O OpenSSL fornece trs mdulos
que permitem testar as conexes
SSL: s_client, s_server e s_time.
Os dois primeiros, como os nomes
sugerem, so para simular um cliente e um servidor em uma conexo
SSL. O terceiro para os testes de
tempo de conexo. Vamos comear com uma anlise detalhada no
mdulo s_client.
O s_client particularmente
til para verificar quais protocolos e cifras o servidor aceita
utilizar. Esta informao til
em auditorias de segurana e recursos. Por exemplo, podemos
usar esta informao de protocolo para encontrar servidores que
no aceitam um protocolo ou cifra
legtimo, evitando assim que um
cliente legtimo se conecte. Tam-
www.linuxmagazine.com.br
Como manipular
formatos PEM/
DER e PKCS12
Alguns formatos e containers so
usados para pares de chaves de
criptografia pblicas e certificados
digitais. Sem entrar em detalhes,
os formatos mais comuns da nossa
rede so PEM, DER, PKCS12, ou
JKS. Destes, apenas o formato JKS
no suportado pelo aplicativo
OpenSSL. O PEM e o DER so
formatos codificados o PEM
um formato codificado em Base64.
O DER binrio. O PKCS12 um
container que pode armazenar chaves privadas e pblicas, bem como
certificados assinados e cadeias de
certificados.
Para converter entre os formatos
de arquivo PEM e DER, podemos
usar os parmetros -inform e -outform. Por exemplo, para converter
todos os certificados X.509 de PEM
para DER, usamos o seguinte loop:
for file in * pem;
do openssl x509 -inform PEM -in
$file -outform DER -out
$file.der;
done
67
Criptografar e
descriptografar
em massa
Tarefas comuns de criptografia de
arquivos incluem encriptao e decriptao. A criptografia simtrica
utiliza uma chave para criptografar
e descriptografar. A criptografia assimtrica usa uma chave pblica para
criptografar e uma chave privada
para descriptografar (normalmente
implementada com PKI e certificados X.509).
Criptografia simtrica mais rpida que a criptografia assimtrica,
e uma escolha melhor quando no
h necessidade de acesso pblico
para a chave.
Para criptografar o arquivo plain.
txt com criptografia simtrica e escrever o arquivo de sada cipher.enc,
usamos o seguinte comando:
openssl [ciphername] -a -salt -in
plain.txt -out cipher.enc
68
OpenSSL e a entrada/
sada padro
De acordo com a filosofia Unix,
cada argumento que passado com
o parmetro in pode ser passado
tambm usando a entrada padro.
Se no especificarmos a sada com
o parmetro -out, o resultado ser
mostrado na sada padro. Assim,
podemos usar o OpenSSL para processar sadas de outros comandos e
gerar entradas para outros programas
com um pipe. Para verificar se um
certificado com o nmero de srie
44A2FC741D8C1755 foi revogado, usamos o seguinte comando:
curl -s http://localhost/crl.pem |
openssl crl -text -noout | grep
"Serial Number: 44A2FC741D8C1755"
Teste do PKI
O ltimo grande recurso do OpenSSL o de implementar uma infraestrutura de chave pblica (PKI).
Uma PKI muitas vezes tem um papel
crucial na segurana, e o OpenSSL
pode ser usado para implementar e
testar uma PKI.
Primeiro, podemos usar o OpenSSL
para gerar pares de chaves e pedidos
de assinatura de certificado correspondentes (da sigla CSRs, de Certificate
Signing Request). Segundo, podemos
assinar CSRs, criando assim certificados
vlidos. Terceiro, podemos revogar e
gerar CRLs. Quarto, podemos assinar/
criptografar e verificar/descriptografar.
E finalmente, podemos alterar os parmetros em tempo real e manipular
valores, tais como algoritmos, comprimentos de chave ou contedo DN.
possvel usar estes dados como entrada
para outros aplicativos.
A listagem 2 mostra alguns exemplos de recursos que usamos para
testar vrios elementos de uma PKI.
A funo create_config foi cortada
para melhor legibilidade. Utilize o
contedo de seu arquivo de configurao padro do OpenSSL para
configuraes adicionais. O arquivo de configurao normalmente
se chama openssl.cnf e fica em /etc.
Por padro, o OpenSSL l o arquivo de configurao de um local
especificado (normalmente /etc/
openssl.cnf); mas, para nossos testes, foi mais fcil criar um arquivo
www.linuxmagazine.com.br
Concluso
O OpenSSL uma ferramenta muito
flexvel. Pelo fato de podermos especificar todos os parmetros necessrios
usando a linha de comando, arquivos,
pipes e variveis de ambiente, perfeitamente adequado para os scripts Bash.
Este artigo descreveu alguns usos
para o OpenSSL, mas tenha em men-
Mais informaes
[1] OpenSSL: http://
www.openssl.org/
[2] Bash: http://www.gnu.
org/software/bash/
Gostou do artigo?
igo?
Queremos ouvir sua opinio.
o nio.
m
Fale conosco em
cartas@linuxmagazine.com.br
ne.com
Este artigo no nosso
sso site:
s e:
r/artic 763
http://lnm.com.br/article/7639
01 function create_config {
02
{
03
echo HOME= .
04
echo RANDFILE= $ENV::HOME/.rnd
05
06
...
07
cortado para melhor legibilidade
08
...
09
10
echo oid_section = new_oids
11
echo subjectKeyIdentifier=hash
12
echo authorityKeyIdentifier=keyid,issuer
13
echo proxyCertInfo=critical,language:
id-ppl-anyLanguage,pathlen:3,policy:foo
14
} > $config
15 }
16
17 function create_root_ca {
18
local keysize=$1
19
local country=$2
20
local org=$3
21
local name=$4
22
local days=$5
23
local certfile=$6
24
local keyfile=$7
25
openssl req -newkey rsa:$keysize -x509 -days
$days -keyout $keyfile -nodes -out $certfile
-config $config -subj /C=$country/O=$org/CN=$name
26
return $?
27 }
28
29 function create_crl {
30
local cakey=$1
31
local cacert=$2
32
local crlfile=$3
33
openssl ca -gencrl -config $config -keyfile
$cakey -cert $cacert -out $crlfile
34 }
35
36 function create_client_req {
37
38
39
40
41
42
43
local keysize=$1
local country=$2
local org=$3
local name=$4
local keyfile=$5
local reqfile=$6
openssl req -new -newkey rsa:$keysize
-nodes -keyout $keyfile -out $reqfile -config
$config -subj /C=$country/O=$org/CN=$name
44 }
45
46 function sign_client_req {
47
local clientreq=$1
48
local days=$2
49
local cacert=$3
50
local cakey=$4
51
local clientcert=$5
52
openssl x509 -req -days $days -CA $cacert
-CAkey $cakey -CAcreateserial -in $clientreq
-out $clientcert
53 }
54
55 function revoke_client_cert {
56
local clientcert=$1
57
local cakey=$2
58
local cacert=$3
59
openssl ca -revoke $clientcert -keyfile
$cakey -cert $cacert -config $config
60 }
61
62 function get_cacountry {
63
cacountry=DC
64 }
65
66 function get_caorg {
67
caorg=Dummy org
68 }
69
70 function get_caname {
72 }
69
TUTORIAL | Raspberry Pi
Raspberry Pi
TUTORIAL
Computao
pioneira
A sbita popularidade de computadores miniboard como
o Raspberry Pi trouxe de volta o esprito pioneiro dos
primeiros dias do Linux. Repentinamente, o faa voc
mesmo na comunidade de cdigo aberto est de volta.
por Brian Proffitt
Os primrdios
A equipe de Cambridge, liderada pelo
designer Eben Upton, comeou a montar um dispositivo pequeno, porttil, e
muito barato que iria inicializar diretamente em um ambiente de programao. A partir da, estudantes de qualquer
idade poderiam comear a programar
para o que lhes fosse mais interessante.
70
O presente
Existem dois modelos do Raspberry Pi
disponveis: o modelo A por 25 dlares
em modelo B por 35 dlares. Ambos
possuem um processador ARM de 700
MHz em uma placa monoltica da
Broadcom, com 256 MB de RAM e
um slot de carto SD/MMC/SDIO
para armazenamento. A nica grande
diferena entre os dois modelos que
com mais 10 dlares possvel obter
um conector Ethernet 10/100 e uma
segunda porta USB no modelo B.
Esse pequeno diferencial de preo
e a popularidade de um dispositivo
conectado rede poderia explicar por
que o tempo de espera em qualquer
lugar , em mdia, de 5 a 12 semanas para adquirir um modelo B, de
acordo com o fornecedor.
E ele no est mais sozinho: novos
dispositivos, como o Cotton Candy,
o Mele A1000, o MK802 e o Oval
Elephant fazem parte desta crescente
famlia de mini-PCs.
claro que possvel fazer muitas
coisas alm de simples programao
com um Raspberry Pi nas mos. Exis-
www.linuxmagazine.com.br
Raspberry Pi | TUTORIAL
Esta etapa pode levar algum tempo, portanto seja paciente e no pense
que o processo est travado. Quando
O futuro
Uma das maiores atraes para o
dispositivo Raspberry no apenas
o dispositivo em si; a comunidade
em volta deste pequeno dispositivo
muito forte e est crescendo rpido.
Quem no teve a felicidade de viver
os primeiros dias do Linux, quando
as coisas eram rpidas e livres e a
informao muito mais complicada
de se obter ento esta ser uma experincia nova que remeter a esses
dias. Veteranos do Linux se sentiro
em casa com a comunidade Raspberry.
A convergncia de dispositivos
baratos e poderosos como este deve
abrir caminho para uma srie de
projetos inovadores e o Raspberry Pi
j desperta ateno na produo de
robs terrestres [5] e dispositivos de
realidade extraterrestre [6]. As possibilidades, como aconteceu com o
velho Linux, so infinitas.
unzip 2012-07-15-wheezy-raspbian.zip
Mais informaes
df -h
Gostou do artigo?
igo?
Queremos ouvir sua opinio.
o nio.
Fale conosco em
m
cartas@linuxmagazine.com.br
e.com
Este artigo no nosso
osso site:
s e:
http://lnm.com.br/article/7652
r/artic 765
71
PROGRAMAO
PROGRAMAO | Dart
Centro do alvo?
A linguagem de programao Dart a atual alternativa
do Google ao JavaScript. Executada principalmente em
navegadores, tambm pode ser utilizada em linha de
comando e em servidores como substituta para o PHP.
por Tim Schrmann
Trabalho em
andamento
72
www.linuxmagazine.com.br
Dart | PROGRAMAO
main() e Classes
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
class Carro {
var cor;
Carro() {
this.cor = "azul";
}
Carro.pintura(this.cor);
}
main() {
Carro ferrari = new Carro.pintura("vermelho");
Carro bmw = new Carro();
print(ferrari.cor); // sada vermelha
print(bmw.cor); // sada azul
}
interface Superficie {
int superficie_conteudo();
}
class Quadrado implements Superficie {
int largura;
Quadrado(int this.largura);
int superficie_conteudo() => largura*largura;
}
class Retangulo extends Quadrado {
int _altura;
Retangulo( int this._altura, int br) : super(br);
int superficie_conteudo() => largura * _altura;
}
main() {
Quadrado q = new Quadrado(3);
Retangulo r = new Retangulo(2,3);
print(q.superficie_conteudo());
print(r. superficie_conteudo());
}
73
PROGRAMAO | Dart
Verso em linha
Usurios Dart podem abreviar uma
definio de funo individual como
a seguir:
int quadrado(int numero)
{ return numero*numero; }
com =>
int quadrado(int numero) =>
numero*numero;
(por exemplo, => e significa {return e;}). No Dart, possvel passar uma funo para outra, o que
muito til em loops:
digaOla(String nome) =>
print("Ola ${nome}");
List nomes = ["Tim", "Joe",
"Henry"];
nomes.forEach(digaOla);
Tipo
Contedo
Exemplo
String
int
Inteiro
double
num
num y = mx + b
bool
verdadeiro/falso
List
Map
74
www.linuxmagazine.com.br
Dart | PROGRAMAO
Clssico
O Dart herdou interfaces do Java.
Quando uma classe implementa
uma interface, ela garante que a
funo especificada na interface seja
fornecida. A listagem 2 fornece um
exemplo de herana.
Uma classe pode implementar
vrias interfaces, mas apenas herda
exatamente uma classe (ou seja, usa
extends para estender a classe). Na
listagem 2, todas as variveis e funes
so pblicas, com uma exceo, _altura. Se o nome da varivel ou uma
funo comea com um sublinhado,
ela privada, e s possvel acessar a
varivel ou funo dentro da prpria
classe. Na listagem 2, isso significa
que no se pode retroativamente
modificar a altura de um retngulo.
Figura 2 O SDK Dart inclui uma mquina virtual para linha de comando.
Oferta de Factory
Padres de projeto [4] tm sido parte do repertrio do desenvolvedor
profissional por muitos anos. Assim,
no h nenhuma surpresa em que o
Dart tambm suporte este recurso.
Por exemplo, o padro Factory j faz
parte da linguagem: se o construtor for
prefixado com a palavra-chave factory,
o Dart no cria automaticamente um
objeto desta classe, mas deixa para o
construtor. O programador pode ento olhar em um cache para ver se
um objeto correspondente j existe,
como pode ser visto na listagem 3.
A varivel outrocarro neste exemplo aponta para o mesmo objeto
como umcarro. A palavra-chave static
garante que garagem s existe uma
vez; todos os objetos Carro acessam
a mesma varivel.
O padro Factory pode tambm
ser combinado com interfaces. Para
fazer isso, atribui-se a classe padro
factory a uma interface, e a classe
factory retorna objetos para coincidir
com a interface. A listagem 4 mostra um exemplo disso. A interface
define a assinatura do construtor,
que em seguida gera objetos para
coincidir com a interface. O Carro-
Servio de Continer
O Dart contm os tipos genricos,
tambm conhecidos como generics,
com os quais provavelmente estamos
familiarizados por causa do Java. Programadores C++ tambm conhecem
esse conceito como templates. pos-
75
PROGRAMAO | Dart
Paralelismo
Programadores normalmente mudam
as tarefas que precisam ser executadas em processos paralelos separados
e, em seguida, trabalham duro para
unir os resultados intermedirios.
O Dart remove as dores de cabea
desse processo: um objeto derivado
76
Acesso DOM
Pelo fato de o Dart ser projetado
para substituir o JavaScript, os programadores devem ser capazes de
usar a linguagem para acessar a rvore DOM de um site. Para que isso
acontea, o Dart inclui a sua prpria
biblioteca, que pode ser importada
como a seguir:
#import("dart:html");
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
document.query("#menu");
www.linuxmagazine.com.br
Dart | PROGRAMAO
Executado
Como os navegadores de hoje atualmente no compreendem programas
Dart, o projeto desenvolveu o compilador Dartc, que converte programas Dart em cdigo JavaScript. No
entanto, o Dartc tinha a reputao
de criar programas JavaScript muito
grandes, que executam muito lentamente. Para resolver este problema,
um compilador GNU chamado Frog
foi criado (e inclusive escrito em
Dart), que gera cdigo JavaScript
muito mais compacto. O Frog
uma mquina virtual para a linha
de comando (figura 2) includa no
SDK Dart, que est disponvel gratuitamente na pgina do projeto [6].
Tudo que necessrio fazer baixar
o arquivo ZIP correspondente, descompactar, e ento compilar o seu
prprio programa Dart (por exemplo,
test.dart) usando o Frog a partir do
diretrio bin,
./frogc --enable_type_checks
test.dart
Concluso
Com exceo do Dartium, todos
os atuais navegadores ignoram o
Dart, e no se pode culp-los; afinal, a linguagem de programao
no est totalmente completa. Ao
mesmo tempo, o Dart est enfrentando fortes crticas: a maioria dos
observadores acredita que o apoio a
outra linguagem web suprfluo e
contraproducente.
O futuro do Dart depender
em grande parte da seriedade que
o Google vem demonstrando no
mercado; a empresa tem o poder
Mais informaes
[1] Projeto Dart: http://www.dartlang.org/
[2] Objetivos do projeto Dart: http://www.dartlang.
org/docs/technical-overview/#goals
[3] Licena BSD Google: http://code.google.com/
intl/de-DE/google_bsd_license.html
[4] Padres de Projeto: http://en.wikipedia.
org/wiki/Software_design_pattern
[5] Referncia da API Dart: http://api.dartlang.org/
[6] SDK Dart: http://www.dartlang.org/docs/getting-started/sdk/
[7] Dartboard: http://try.dartlang.org/
Gostou do artigo?
igo?
77
Infraestrutura
de Redes
Passo a passo da montagem de uma rede
de computadores, desde o cabeamento
e roteadores at a congurao das
mquinas clientes.
Samba:
Mquinas
virtuais com
VirtualBox
com Windows
e Linux
Como permitir a comunicao de diferentes sistemas operacionais em rede: Windows,
Linux, Mac OS X etc. Denio de compartilhamentos de arquivos, impressoras incluindo
a instalao automtica de drivers e utilizao do Samba como controlador de domnio
(PDC) tambm para clientes Windows Vista e Windows 7.
Administrao de infraestrutura de
mquinas virtuais com Sun VirtualBox.
Como trabalhar com sistemas operacionais
Windows, Linux etc na mesma mquina
e simultaneamente.
PREVIEW
82
www.linuxmagazine.com.br