sábado, 30 de julho de 2011

Quake II no Fedora 15 64 bits

O Quake II é um jogo de tiro em primeira pessoa, desenvolvido pela Id Software, lançado em 1997. A série Quake foi uma grande inovação na época para o gênero de jogos em 3D. Foi um sucesso total.

De lá pra cá, com a popularidade crescente do Linux, foram desenvolvidos alguns "ports" do executável do Quake para o sistema Linux. Assim foi possível jogar sem problemas em uma plataforma além da Microsoft.

Surpreendentemente, até hoje é possível executar o Quake nas máquinas e sistemas atuais. Vou demonstrar o caminho para a instalação do Quake II em um Linux Fedora 15 de 64 bits.

Existe uma equipe denominada LIFLG (Linux Installer For Linux Gamers) com o website no endereço http://www.liflg.org/ que desenvolve instaladores para alguns jogos da plataforma Windows. Dentre eles está o Quake II.

Baixando o arquivo "quake2_3.21-r0.16.1-english.run" e acrescentando alguns arquivos do CD original do Quake II, o jogo estará completo para a execução no sistema Linux.

Este instalador e os executáveis disponibilizados pela LIFLG ainda estão em 32 bits, então para um sistema 64 bits é necessário ter as bibliotecas 32 bits instaladas, em especial o gtk+ 1.2 e o SDL 1.2. No Fedora 15 64 bits os pacotes que fornecem os requisitos são (versões até a data deste artigo):

gtk+-1.2.10-71.fc15.i686
glib-1.2.10-34.fc15.i686
SDL-1.2.14-11.fc15.i686
SDL_gfx-2.0.17-4.fc15.i686
SDL_mixer-1.2.11-5.fc15.i686
SDL_sound-1.0.3-6.fc15.i686
SDL_ttf-2.0.10-2.fc15.i686
libmikmod-3.2.0-12.beta2.fc15.i686
libmodplug-0.8.8.3-3.fc15.i686
physfs-1.0.2-3.fc15.i686
speex-1.2-0.13.rc1.fc15.i686

Instale-os caso não estejam e também suas respectivas dependências se necessário. Com as dependências resolvidas o instalador do Quake II pode ser executado, em uma linha de comando como a seguir:

$ linux32 ./quake2_3.21-r0.16.1-english.run

A ferramenta linux32 é necessária pois o instalador do Quake II da LIFLG não tem suporte nativo 64 bits.

Uma janela do instalador é aberta no ambiente gráfico do X para que especifique os parâmetros da instalação. É possível copiar automaticamente os arquivos do CD original ou, se desejar, copiá-los manualmente depois.

Os arquivos necessários originais do jogo, já em seus respectivos destinos, são:

(digamos que o diretório de instalação seja ~/quake2/ e incluindo os arquivos do update 3.20)

~/quake2/baseq2/pak0.pak
~/quake2/baseq2/pak1.pak
~/quake2/baseq2/pak2.pak
~/quake2/baseq2/players/*/*
~/quake2/baseq2/video/idlog.cin

Com tudo realizado, para iniciar o jogo basta executar o arquivo quake2 ou sdlquake2, a partir do diretório de instalação, ou por algum atalho que porventura tenha sido criado na instalação.


Qualquer dúvida existe uma FAQ no website da LIFLG. Aproveite a nostalgia!

quinta-feira, 21 de julho de 2011

Caracteres especiais na variável de ambiente do proxy

No ambiente do interpretador de comandos do Linux existem variáveis de ambiente que servem para armazenar o endereço do servidor proxy e assim os programas clientes, compatíveis com este recurso, as utilizam como parâmetros de configuração.

No Bash e similares existem as variáveis http_proxy, ftp_proxy, gopher_proxy, wais_proxy e no_proxy. Cada variável serve para determinado protocolo e a variável no_proxy especifica um conjunto de domínios, separados por vírgulas, para onde o proxy não será consultado.

A atribuição de valores para estas variáveis de ambiente por ser feita pelo comando "export http_proxy="http://endereço:porta" ou, se necessitar de autenticação, "export http_proxy="http://usuário:senha@endereço:porta", executado diretamente no prompt do shell ou pelo "/etc/profile" etc.

Nos casos de proxy com autenticação de usuário e senha pode acontecer de existirem caracteres especiais, principalmente na senha, e nestes casos, para que o shell interprete corretamente os valores, pode ser necessário usar os códigos de escape nestes caracteres. Trata-se da codificação por cento para caracteres de escape em URL (http://dan-scientia.blogspot.com/2010/05/codificacao-por-cento-para-caracteres.html).

Por exemplo, uma senha definida como 12@elo/6.c deve ser informada na declaração da variável na forma 12%40elo%2F6%2Ec, assim não haverá problemas na interpretação pelo shell.

quarta-feira, 20 de julho de 2011

Espelhamento de porta para monitoramento do tráfego de rede

Espelhamento de porta é um recurso do switch para enviar uma cópia de cada pacote do tráfego de rede à uma determinada porta do switch. Este recurso é utilizado para monitoramento do tráfego de rede, com ferramentas como tcpdump, wireshark, snort etc.

Este recurso é necessário pois os switches operam na camada de enlace, com uma tabela de encaminhamento, direcionando o tráfego somente para a porta correspondente do endereço MAC de destino, e desta forma, as demais estações conectadas nas outras portas não recebem os pacotes.

O único tráfego que é espalhado para todas as portas é o tráfego de broadcast, multicast com CGMP ou IGMP snooping desativado e unicast desconhecido.

Assim, quando o administrador de rede ou o profissional forense desejar monitorar a comunicação entre duas estações conectadas por um switch, é preciso configurar uma porta do switch para receber o espelhamento do tráfego.

Em sistemas Cisco o espelhamento de porta é geralmente referido como Switched Port Analyzer (SPAN), em switches 3Com é denominado Roving Analysis Port (RAP).

Obs: Alguns switches operam também na camada de rede, utilizando os endereços IP. Este controle de tráfego é uma vantagem para a rede pois não haverá colisões entre os pacotes. O recurso de espelhamento de porta pode ir mais além em switches de alto nível.

sexta-feira, 15 de julho de 2011

Problema de Lógica: O problema dos três marinheiros

Adaptado de "O homem que calculava", capítulo XIX, de Malba Tahan.

Um navio que voltava de Serendibe, trazendo grande partida de especiarias, foi assaltado por violenta tempestade. A embarcação teria sido destruída pela fúria das ondas se não fosse a bravura e o esforço de três marinheiros que, no meio da tormenta, manejaram as velas com extrema perícia.

O comandante, querendo recompensar os denodados marujos, deu-lhes certo número de moedas. Esse número, superior a duzentos, não chegava a trezentos. As moedas foram colocadas numa caixa para que no dia seguinte, por ocasião do desembarque, o almoxarife as repartisse entre os três corajosos marinheiros.

Aconteceu, porém, que, durante a noite, um dos marinheiros acordou, lembrou-se das moedas e pensou: "Será melhor que eu tire a minha parte. Assim não terei ocasião de discutir ou brigar com os meus amigos". E, sem nada dizer aos companheiros, foi, pé ante pé, até onde se achava guardado o dinheiro, dividiu-o em três partes iguais, mas notou que a divisão não era exata e que sobrava uma moeda. "Por causa desta mísera moedinha é capaz de haver amanhã discussão e rixa. O melhor é jogá-la fora." E o marinheiro atirou a moeda ao mar, retirando-se cauteloso. Levava a sua parte e deixava no mesmo lugar a que cabia aos companheiros.

Horas depois o segundo marinheiro teve a mesma ideia. Foi à arca em que se depositara o prêmio coletivo e dividiu-o em três partes iguais. Sobrava uma moeda. Ao marujo, para evitar futuras dúvidas, veio à lembrança atirá-la ao mar. E dali voltou levando consigo a parte a que se julgava com direito.

O terceiro marinheiro, ignorando, por completo, a antecipação dos colegas, teve o mesmo alvitre. Levantou-se de madrugada e foi, pé ante pé, à caixa das moedas. Dividiu as moedas que lá encontrou em três partes iguais; a divisão não foi exata. Sobrou uma moeda. Não querendo complicar o caso, o marujo atirou ao mar a moedinha excedente, retirou a terça parte para si e voltou tranquilo para o seu leito.

No dia seguinte, na ocasião do desembarque, o almoxarife do navio encontrou um punhado de moedas na caixa. Soube que essas moedas pertenciam aos três marinheiros. Dividiu-as em três partes iguais, dando a cada um dos marujos uma dessas partes. Ainda dessa vez a divisão não foi exata. Sobrava uma moeda, que o almoxarife guardou como pagamento do seu trabalho e de sua habilidade. É claro que nenhum dos marinheiros reclamou, pois cada um deles estava convencido de que já havia retirado da caixa a parte que lhe cabia do dinheiro.

Pergunta-se, afinal: Quantas eram as moedas? Quanto recebeu cada um dos marujos?





RESPOSTA





Sejam:

M = total de moedas;
a = parte retirada pelo 1º marujo;
b = parte retirada pelo 2º marujo;
c = parte retirada pelo 3º marujo;
r = restante dividido pelo almoxarife.

Sabemos que o 1º marujo jogou uma moeda fora e dividiu M-1 por 3, logo a = (M-1)/3 ou M = 3a + 1. Ficaram duas partes de a na caixa, ou seja, 2a.

Sabemos que o 2º marujo jogou uma moeda fora e dividiu 2a-1 por 3, logo b = (2a-1)/3 ou 2a = 3b + 1. Ficaram duas partes de b na caixa, ou seja, 2b.

Seguindo este raciocínio, temos:

M = 3a + 1
2a = 3b + 1
2b = 3c + 1
2c = 3r + 1

Assim:

a=((3b + 1)/2)
b=((3c + 1)/2)
c=((3r + 1)/2)

Substituindo em M, o equivalente em a, depois em b e finalmente em c, obtemos:

M = 3a+1
M = 3((3b+1)/2)+1
M = 3((3((3c+1)/2)+1)/2)+1
M = 3((3((3((3r+1)/2)+1)/2)+1)/2)+1

Simplificando, chegamos em:

M = 3((3((((9r+3)/2)+1)/2)+1)/2)+1
M = 3((3(((9r+3+2)/2)/2)+1)/2)+1
M = 3((3((9r+5)/4)+1)/2)+1
M = 3((((27r+15)/4)+1)/2)+1
M = 3(((27r+15+4)/4)/2)+1
M = 3((27r+19)/8)+1
M = ((81r+57)/8)+1
M = (81r+57+8)/8
M = (81r+65)/8

Ou ainda:

M = (80r + r + 64 + 1)/8
M = 10r + r/8 + 8 + 1/8
M = 10r + 8 + (r+1)/8

A expressão mostra que r+1 deve ser múltiplo de 8, para resultar em número inteiro, ou seja, r+1 = 8k. Fazendo r = 8k-1 e substituindo na expressão, teremos:

M = 10(8k-1) + 8 + (8k-1+1)/8
M = 80k - 10 + 8 + k
M = 81k - 2

Na qual o parâmetro k pode receber um número natural qualquer: 1, 2, 3, 4, 5, 6, ...

Os valores de M serão, respectivamente:

79, 160, 241, 322, 403, 484, ...

Como o enunciado afirma que o número de moedas é superior a 200 e que não chega a 300, o valor é 241 pois é o único que serve para o caso.

Então:

241 moedas;
1º marujo = 103; (80 + 23)
2º marujo = 76; (53 + 23)
3º marujo = 58; (35 + 23)
jogadas ao mar = 3;
almoxarife = 1.

segunda-feira, 11 de julho de 2011

Ferramenta de exploração de rede e segurança

O Nmap (Network Mapper) é uma ferramenta para exploração de rede e auditoria de segurança. Foi desenvolvida para escanear rapidamente redes amplas e também funciona contra hosts individuais.

O Nmap utiliza pacotes IP em estado bruto para determinar quais hosts estão disponíveis na rede, quais serviços os hosts oferecem, quais sistemas operacionais estão executando e dezenas de outras características. Uma grande habilidade do Nmap é de criar pacotes IP do nada e enviá-los utilizando métodos únicos para realizar os diferentes tipos de escaneamentos.

Embora o Nmap tente produzir resultados precisos, todas as deduções são baseadas em pacotes devolvidos pelas máquinas-alvo, ou firewalls na frente delas. Tais hosts podem ser não-confiáveis e enviar respostas com o propósito de confundir ou enganar o Nmap. Muito mais comum são os hosts não de acordo com a RFC, que não respondem como deveriam às sondagens do Nmap.

Escaneamento de rede é o processo para descobrir hosts ativos na rede e informações sobre os hosts, como sistema operacional, portas abertas, serviços e aplicações.

O escaneamento de rede engloba quatro técnicas básicas:

1) Mapeamento de rede - envia mensagem para um host para gerar uma resposta se o host estiver ativo;

2) Escaneamento de porta - envia mensagem para uma porta para determinar se está ativa;

3) Detecção de serviço - envia uma mensagem específica para uma porta ativa para gerar uma resposta com o tipo e versão do serviço;

4) Detecção de S.O. - envia uma mensagem específica para um host ativo para gerar uma resposta com o tipo do sistema operacional.

Uma amostra de scan do Nmap:

# nmap -A -T4 scanme.nmap.org

Starting nmap ( http://insecure.org/nmap/ )
Interesting ports on scanme.nmap.org (205.217.153.62):
(The 1663 ports scanned but not shown below are in state: filtered)
PORT    STATE  SERVICE VERSION
22/tcp  open   ssh     OpenSSH 3.9p1 (protocol 1.99)
53/tcp  open   domain
70/tcp  closed gopher
80/tcp  open   http    Apache httpd 2.0.52 ((Fedora))
113/tcp closed auth
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X
OS details: Linux 2.4.7 - 2.6.11, Linux 2.6.0 - 2.6.11
Uptime 33.908 days (since Thu Jul 21 03:38:03 2005)

A maioria dos tipos de scan está disponível apenas para usuários privilegiados. Pois o Nmap envia e recebe pacotes em estado bruto, o que requer acesso de root em sistemas Linux.

Sinopse para linha de comando do Nmap:

nmap [Tipo]... [Opções]... Alvo

Tudo na linha de comando do Nmap que não for uma opção é tratado como uma especificação de um host-alvo. O procedimento básico é especificar como alvo um endereço IP ou um nome de host para ser escaneado. É possível escanear uma rede inteira de hosts adjacentes, para isso o Nmap suporta o estilo de endereçamento CIDR.

Para escanear todos os IPs de uma máscara de rede, acrescenta-se /númerodebits em um endereço ou hostname. Por exemplo, 192.168.10.0/24 escanearia os 256 hosts entre 192.168.10.0 e 192.168.10.255, inclusive. Pode-se especificar uma lista de números separada por vírgulas ou faixa de números para cada octeto. Por exemplo, 192.168.0-255.1-254 irá pular todos os endereços na faixa que terminarem com .0 ou .255.

O Nmap aceita múltiplas especificações de host na linha de comando, e elas não precisam ser do mesmo tipo. Por exemplo, 'nmap scanme.nmap.org 192.168.0.0/16 10.0.0,1,3-7.0-255'.

As seguintes opções também estão disponíveis para controlar a seleção de alvos:

-iL arquivo                Lê a especificação de alvos à partir de um arquivo
                           de entrada. Cada entrada deve ser separada por
                           espaços em branco, tabulações ou quebra de linhas.
--exclude host1,host2,...  Especifica uma lista de alvos, separados por vírgula,
                           a serem excluídos do scan mesmo que façam parte da
                           faixa de rede especificada.

Um dos primeiros passos em qualquer missão de reconhecimento de uma rede é reduzir um conjunto de faixas de endereços IP, em uma lista de hosts ativos e interessantes.

-sP   Esta opção diz ao Nmap para somente executar um scan usando o ping, e
      então mostrar os hosts disponíveis que responderam ao scan.

-sL   O scan listagem é uma forma de descoberta de hosts que simplesmente lista
      cada host da rede especificada, sem enviar nenhum pacote aos hosts-alvos.
      Apenas faz a resolução de DNS reverso dos hosts para descobrir seus nomes.

-P0   Esta opção pula completamente o estágio de descoberta do Nmap (sem ping).
      Faz com que o Nmap teste as funções de escaneamento solicitadas contra
      todos os endereços IP alvos especificados, como se cada alvo IP estivesse
      ativo.

-n    Não faz uma resolução DNS reversa nos endereços IP ativos que encontrar.

-PS portas  Esta opção envia um pacote TCP vazio com a flag SYN marcada.
            A flag SYN sugere aos sistemas remotos que você está tentando
            estabelecer uma comunicação.

-PA portas  Faz o ping usando TCP ACK. É muito similar ao ping usando SYN.

-PU portas  Faz o ping usando UDP, que envia um pacote UDP vazio para as portas
            informadas.

A função principal do Nmap é o scanner de portas. O simples comando 'nmap alvo' escaneia mais de 1660 portas TCP no host alvo. O Nmap divide as portas em seis estados: aberto, fechado, filtrado, não-filtrado, open|filtered, ou closed|filtered. Esses estados não são propriedades intrínsecas da porta, mas descrevem como o Nmap as vê.

Os seis estados de porta reconhecidos pelo Nmap:

aberto           Uma aplicação está ativamente aceitando conexões TCP ou
                 pacotes UDP nesta porta.
fechado          Uma porta fechada está acessível, mas não há nenhuma aplicação
                 ouvindo nela.
filtrado         O Nmap não consegue determinar se a porta está aberta porque
                 uma filtragem de pacotes (firewall/roteador) impede que as
                 sondagens alcancem a porta.
não-filtrado     O estado não-filtrado significa que uma porta está acessível,
                 mas que o Nmap é incapaz de determinar se ela está aberta ou
                 fechada.
open|filtered    O Nmap coloca portas neste estado quando é incapaz de
                 determinar se uma porta está aberta ou filtrada.
closed|filtered  Este estado é usado quando o Nmap é incapaz de determinar se
                 uma porta está fechada ou filtrada.

Existem dezenas de técnicas de escaneamento e para cada tarefa deve ser escolhida a que for apropriada. Apenas um método pode ser utilizado de cada vez exceto que um scan UDP pode ser combinado com qualquer um dos tipos de scan TCP. As opções dos tipos de escaneamento de portas estão no formato -sC, onde C é um caractere proeminente no nome do scan, normalmente o primeiro:

-sS    O scan SYN é a opção de scan padrão. Pode ser executada rapidamente,
       escaneando milhares de portas por segundo em uma rede não bloqueada por
       firewalls.

-sT    O scan TCP connect é o scan padrão do TCP quando o scan SYN não é uma
       opção. Esse é o caso quando o usuário não tem privilégios para criar
       pacotes em estado bruto.

-sU    Ativa o scan UDP. Pode ser combinado com um tipo de escaneamento TCP
       para averiguar ambos protocolos na mesma execução.

O Nmap oferece opções para especificar quais portas são escaneadas e se a ordem de escaneamento é aleatória ou sequencial:

-p portas   Especifica quais portas deseja escanear. Números de portas
            individuais são suportadas, bem como as faixas separadas por um
            hífen (ex. 1-1023).
            Quando escanear ambas as portas TCP e UDP, pode especificar um
            protocolo em particular, precedendo os números de portas com T: ou
            U: (ex. -p U:53,111,137,T:21-25,80,139,8080).

-F          Especifica que deseja apenas escanear as portas listadas no arquivo
            nmap-services que vem com o nmap. Escaneamento rápido.

-r          Não usa as portas de forma aleatória. Especificar -r faz um
            escaneamento de portas sequencial.

Depois que as portas TCP e/ou UDP forem descobertas, usando qualquer um dos outros métodos de scan, a detecção de versão interroga estas portas para determinar o que realmente está sendo executado nestas portas:

-sV    Habilita a detecção de versão. Use a opção -A para habilitar tanto a
       detecção de SO como a detecção de versão.

Uma das características mais conhecidas do Nmap é a detecção remota de S.O. utilizando a identificação da pilha do TCP/IP. O Nmap envia uma série de pacotes TCP e UDP ao host remoto e examina praticamente todos os bits das respostas. O Nmap compara os resultados com o banco de dados nmap-os-fingerprints com mais de 1500 identificações de S.O. conhecidos e mostra os detalhes do S.O. se houver uma correspondência.

A detecção de S.O. habilita diversos outros testes que usam as informações coletadas durante o processo. Um deles é a medição de uptime, que utiliza a opção timestamp do TCP (RFC 1323) para supor quando uma máquina foi reiniciada pela última vez.

A detecção de S.O. é habilitada e controlada com as seguintes opções:

-O    Habilita a deteção de SO. Alternativamente, pode usar -A para habilitar
      tanto a detecção de S.O. quanto a detecção de versão.

-O2   Usa o novo sistema de detecção de S.O.

Observação: o uso conjunto da opção -v faz o Nmap gerar informações extras sobre o sistema operacional.

Outras opções para a linha de comando do Nmap:

-v    Aumenta as informações de saída. Usando duas vezes faz maior efeito.

-A    Ativa detecção de S.O. e de versão.

-h    Exibe uma página de ajuda.

Exemplos de linha de comando dos usos do Nmap:

a) Escaneia a sub-rede a procura de hosts ativos:

# nmap -sP -n 192.168.1.0/24

b) Escaneia a sub-rede a procura de portas ativas:

# nmap -sS -n -p 1-600 192.168.1.0/24

c) Analisa a porta 80 do host para descobrir a versão do serviço:

# nmap -sV -n -p 80 192.168.1.101

d) Analisa o host para descobrir o sistema operacional:

# nmap -O2 -vv 192.168.1.101

domingo, 10 de julho de 2011

Documentário sobre ônibus espaciais

Neste mês em que encerra a era dos ônibus espaciais, com a última missão do Atlantis no espaço, a NASA coloca disponível um belo documentário sobre a origem e a história do programa de ônibus espaciais, narrado pelo ator William Shatner (mais conhecido pelo papel de Capitão Kirk, na série "Star Trek").

Este documentário de 80 minutos mostra a história de uma das mais complexas máquinas já construídas. Por 30 anos, os ônibus espaciais da NASA levaram e trouxeram humanos do espaço, enviaram incríveis observatórios e auxiliaram na construção da Estação Espacial Internacional (ISS).

A NASA disponibiliza para download o arquivo deste documentário (The Space Shuttle - Narrated by William Shatner), em sua versão longa de 80 minutos, através de sua página da galeria de vídeos em alta resolução localizada neste endereço:
http://www.nasa.gov/multimedia/hd/index.html (esta página recebe constantes atualizações então o anúncio deste vídeo pode estar em páginas anteriores).

O endereço direto para o arquivo deste documentário é este, se preferir: http://anon.nasa-global.edgesuite.net/HD_downloads/Shuttle_Doc_Long_Version.mp4

O vídeo está na resolução 720p, no formato MP4 e com 936 MB de tamanho. É uma bela obra para os admiradores dos programas espaciais.

sexta-feira, 8 de julho de 2011

Tipografia matemática para páginas web

A editoração de páginas para exibição em um navegador web não é fácil quando se tenta reproduzir fórmulas matemáticas. Como estratégia é comum o uso de imagens para este tipo de exibição, porém quebrando toda integração com o texto.

Felizmente esta dificuldade tem uma solução, existe uma biblioteca em JavaScript que exibe equações matemáticas em navegadores web, usando a linguagem de marcação LaTeX ou MathML.

O MathJax (http://www.mathjax.org/) é um JavaScript de código livre capaz de exibir expressões matemáticas e é compatível com todos os navegadores modernos. Com o MathJax não é mais necessário leitores específicos, plugins ou outras fontes de caracteres instalados no navegador. Simplesmente funciona em qualquer navegador.

Usa uma versão moderna do CSS e fontes para web, ao invés de imagens ou flash, assim as expressões matemáticas podem ser ampliadas ou reduzidas junto com o texto que as acompanham. O programador web apenas incorpora o código da expressão matemática, na página em HTML, usando a linguagem de marcação LaTeX ou MathML. Os códigos convivem numa boa.

O MathJax pode ser disponibilizado para uso nas páginas de duas formas, pode ser instalado diretamente no servidor HTTP do usuário, ou pode ser usado acessando o serviço através da Rede de Entrega de Conteúdo (Content Delivery Network - CDN). Nesta última forma pode ser integrado a plataformas incluindo o Tumblr, MediaWiki, Drupal e o Wordpress.

É possível ainda copiar e colar o conteúdo, transportando a expressão matemática para editores de textos e até para softwares de cálculo como Maple e Mathematica.

Para integrar o MathJax em um serviço de blog, inclua a seguinte linha no código do tema ou do modelo de layout, que determinam a aparência das páginas:

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=default"></script>

Esta linha deve ficar entre as marcações <head> </head>, se existirem, ou no final se não existirem. Aqui no Blogger o modelo está acessível em "Design/Editar HTML"

Veja exemplos de expressões em LaTeX, representando as respectivas equações matemáticas, que podem ser incorporadas em um código fonte HTML:

\[ \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \]
\[ \left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right)
 \left( \sum_{k=1}^n b_k^2 \right) \]

\[ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} =
1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}}
{1+\frac{e^{-8\pi}} {1+\ldots} } } } \]
\[ \frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} =
1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}}
{1+\frac{e^{-8\pi}} {1+\ldots} } } } \]

Também dentro do parágrafo do texto. Esta expressão \(\sqrt{3x-1}+(1+x)^2\) é um exemplo de expressão na mesma linha do texto, sem atrapalhar os espaços entre as linhas.

O MathJax é um projeto conjunto da Sociedade Americana de Matemática, da Design Science Inc. e da Sociedade para Matemática Industrial e Aplicada.

Uma dica, clique com o botão direito do mouse em uma destas expressões e explore o menu do MathJax!

quarta-feira, 6 de julho de 2011

Controle de acesso com o PolicyKit

O Policykit é uma ferramenta, em nível de aplicação, que serve para centralizar as decisões de permissão de acesso à dispositivos e aplicações controladas somente pelo administrador. Ou seja, desenvolvido para definir e manipular políticas que permitam processos sem privilégios comunicarem com processos com privilégios. O PolicyKit é especialmente para as aplicações nos ambientes de desktop, em sistemas operacionais do tipo Unix, com muitos usuários.

Atualmente possui suporte a diversas operações administrativas incluindo o NetworkManager, Udisks, PackageKit, Firewall, Serviços, Samba etc. O PolicyKit tem como objetivo proporcionar uma interface simples e centralizada para conceder aos usuários o acesso a administração de dispositivos e ferramentas controladas.

Comparando com outras soluções existentes, o PolicyKit permite um controle mais refinado. Invés de uma política de tudo ou nada, onde um usuário recebe um controle administrativo total sobre todo o sistema, somente para acessar uma ferramenta específica de administração, o PolicyKit pode permitir o acesso apenas para esta ferramenta específica. Todos os outros acessos ficam bloqueados.

Um tipo similar de controle refinado é proporcionado com PAM e sudo, permitindo o acesso a aplicações administrativas específicas, mas a necessidade de senha ainda é requerida e o acesso como superusuário, mesmo que limitado a tal aplicação, ainda é dependente.

Uma nova versão do PolicyKit, polkit-1, é a atualmente utilizada para as operações do PolicyKit. Os arquivos de configuração para estas operações estão localizadas em "/usr/share/polkit-1/". Ainda não há uma ferramenta de desktop para configurar o ambiente. Existem apenas caixas de diálogo para autenticação, quando requerida por uma aplicação ou dispositivo.

Um dos usos do PolicyKit é para permitir o acesso a dispositivos compartilhados gerenciados pelo Udisks. Isto inclui a maioria dos dispositivos de armazenamento no sistema. A configuração e o suporte do PolicyKit costuma estar pronta para o usuário nos casos de dispositivos removíveis. Mas, por exemplo, o acesso à outro disco interno, se existir, pode estar bloqueado por padrão.

Para liberar o acesso à estes dispositivos é necessária uma alteração nas opções do PolicyKit. Se o usuário possui permissão para realizar a ação, então a solicitação é aceita e a ação é executada.

Atualmente, pode-se alterar as configurações com uma edição manual dos arquivos de configuração, localizados no diretório "/usr/share/polkit-1/actions/". Para fazer as alterações é preciso primeiramente saber a ação e a autorização que será configurada. A página manual do polkit contém uma listagem das autorizações possíveis.

As autorizações podem ser "allow_any" para qualquer um, "allow_inactive" para o console inativo e "allow_active" para somente o console ativo (usuário conectado). Estas autorizações podem ser configuradas com valores específicos, os quais são:
auth_admin           Uso administrativo somente, autorização requerida sempre;
auth_admin_keep      Uso administrativo somente, mantida por curto período;
auth_self            Autorização de usuário requerida;
auth_self_keep       Autorização de usuário requerida, mantida por curto período;
yes                  Sempre permite acesso;
no                   Nunca permite acesso.

Também é necessário saber a ação do PolicyKit que será modificada e o respectivo arquivo para editar. O nome da ação é mostrado na caixa de diálogo do PolicyKit, que pede a senha quando o usuário tenta o acesso. O nome do arquivo será os primeiros segmentos do nome da ação com o sufixo "policy" anexado. Por exemplo, a ação para montar discos internos é "org.freedesktop.udisks.filesystem-mount-system-internal", assim o arquivo desta ação será "org.freedesktop.udisks.policy".

O arquivo está localizado no diretório "/usr/share/polkit-1/actions/". O caminho completo será "/usr/share/polkit-1/actions/org.freedesktop.udisks.policy".

Por padrão, o PolicyKit está configurado para requerer autorização usando a senha do administrador, antes de um usuário poder montar uma partição de um disco rígido interno. Se desejar permitir aos usuários montarem as partições, sem uma solicitação de autorização, o arquivo "org.freedesktop.udisks.policy" precisará de uma modificação para alterar o padrão "allow_active", da ação "filesystem-mount-system-internal", de "auth_admin_keep" para "yes".

Localize a identificação da ação, rotulada como:

<action id="org.freedesktop.udisks.filesystem-mount-system-internal">
  <description>Mount a system-internal device</description>

Geralmente é a segunda ação identificada no arquivo. No final da seção desta ação, existe a seguinte linha, localizada na subseção <defaults>:

<allow_active>auth_admin_keep</allow_active>

Substitua "auth_admin_keep" por "yes", ficando:

<allow_active>yes</allow_active>

Salve o arquivo. A partir deste momento, os usuários não precisarão mais digitar uma senha para montar as partições internas.

O PolicyKit é desenvolvido e mantido por David Zeuthen, da Red Hat, e hospedado pelo projeto Freedesktop.org. A distribuição Fedora foi a primeira a incluir o PolicyKit e desde então é utilizado em várias outras distros incluindo Ubuntu e OpenSUSE.

segunda-feira, 4 de julho de 2011

Problema de Lógica: Epitáfio de Diofanto

Aqui jaz Diofanto, contemple a maravilha.
Por meio da arte algébrica, a pedra mostra sua idade:
"Deus deu à ele um sexto de sua vida na infância,
Um duodécimo como adolescente enquanto cresciam bigodes;
E ainda um sétimo antes de iniciar o casamento;
Em cinco anos chegou um vigoroso filho.
Ah! Querida criança do mestre e sábio,
Depois de alcançar metade da idade que viveu seu pai, o destino frio o levou.
Após consolar-se por quatro anos com a ciência dos números,
ele terminou sua vida."

Com quantos anos morreu Diofanto?





RESPOSTA





Sendo x a idade de Diofanto, temos:

um sexto na infância = x/6
um duodécimo na adolescência = x/12
um sétimo antes do casamento = x/7
cinco anos até o filho = 5
metade da idade = x/2
quatro anos de consolo = 4

A idade de Diofanto é igual a soma dos anos de cada etapa de sua vida:

x = x/6 + x/12 + x/7 + 5 + x/2 + 4
x = (14x + 7x + 12x + 420 + 42x + 336)/84
84x = 14x + 7x + 12x + 420 + 42x + 336
84x - 14x - 7x - 12x - 42x = 420 + 336
9x = 756
x = 756/9
x = 84 anos