30 de novembro de 2010

FTP

FTP

A necessidade de se compartilhar arquivos entre diversos computadores através da internet ou mesmo de uma intranet é bastante comum. Uma das formas mais comuns de se fazer isso é através do protocolo FTP. Uma das grandes vantagens do FTP sobre o compartilhamento de diretórios do sistema de arquivos é o fato dele possuir mecanismos de autenticação e controle de acesso mais apropriados para acessos remotos, especialmente no contexto da internet.

FTP significa File Transfer Protocol (Protocolo de Transferência de Arquivos). É uma forma bastante rápida e versátil de transferir arquivos entre duas máquinas: cliente e servidor. Uma vez conectado ao servidor, um cliente pode realizar uma série de tarefas como downloads e uploads de arquivos, renomear e/ou deletar arquivos no servidor, entre outras. É um protocolo aberto e independente de hardware e do sistema operacional.

O FTP funciona sobre TCP, e por padrão os servidores atendem às requisições na porta 21. É através dessa conexão que o cliente envia comandos ao servidor. Entretanto, os dados são enviados por outra porta, de duas maneiras distintas.

A primeira forma de envio é chamada de FTP ativo. Nesse modo, o cliente abre uma porta alta (>1023), envia ao servidor o número desta porta e aguarda uma conexão do mesmo. A conexão parte da porta 20 do servidor e é direcionada a essa porta. Observe que neste caso temos um problema em potencial no cliente: A conexão originada pelo servidor e direcionada à uma porta alta no cliente poderá ser barrada por um firewall localizado neste cliente.

A outra forma é o FTP passivo. Neste caso, é o servidor que abre uma porta alta (>1023) e envia seu número ao cliente, aguardando uma conexão do mesmo. A conexão se origina numa porta alta do cliente e se destina a essa porta informada pelo servidor. Nesse caso, não temos mais o problema do firewall do cliente. Na verdade, apenas transferimos o problema para o lado do servidor. Felizmente, a maioria dos servidores FTP permitem especificar a faixa de portas utilizadas no modo passivo, minimizando o problema.

Entretanto, o problema mais sério do FTP é o fato de que os arquivos, logins e inclusive senhas são transmitidas sem criptografia. O uso do FTP deve ser feito em ambiente restrito/controlado ou ainda abertamente através da internet somente para o caso de logins anônimos.

Servidor FTP

Verifique se você possui o servidor proftpd instalado em seu sistema:

# dpkg -l proftpd

Caso seja necessário, instale-o:

# aptitude install proftpd

Escolha a opção standalone para fazer com que o ProFTPD use um daemon próprio.






Para configurar o seu servidor FTP, edite o arquivo de configuração e altere as diretivas listadas a seguir:

# vim /etc/proftpd/proftpd.conf

a) Para trabalhar em modo standalone:

ServerType standalone

b) Defina o valor padrão de UMASK para gravação:

umask 022

c) Defina o número máximo de logins simultâneos:

MaxInstances 20

d) Defina a home do usuário como sendo o diretório raiz:

DefaultRoot ~

e) Habilite até 5 conexões de usuários anonymous:

MaxClients 5

Cada usuário do ftp pode ter uma mensagem de login diferente. Crie o arquivo welcome.msg na home do usuário. Você pode usar o arquivo de boas vindas para logins
anônimos /home/ftp/welcome.msg como base:

# cp /home/ftp/welcome.msg /home/USER
# vim /home/USER/welcome.msg

Ative seu servidor Proftpd:

# /etc/init.d/proftpd stop
# /etc/init.d/proftpd start

Verifique se a pilha TCP notifica que a porta do FTP está ouvindo:

# netstat -ntpl
Verifique qual processo está ouvindo na porta do FTP:

# fuser -v 21/tcp
Combine com o colega ao lado para que ele realize conexões em seu servidor FTP, e acompanhe as atividades de transferência de arquivos que serão feitas em seguida pelo arquivo de log xferlog. Num terminal separado, digite:

# tail -f /var/log/proftpd/xferlog
Conectando-se a um servidor FTP como cliente

Um servidor FTP pode ser usando de duas formas:

Tradicional: Neste formato, o servidor aceita conexões de um usuário e senha válidos para liberar um shell para ele.

Anonymous: O Servidor FTP com anonymous é muito utilizado na Internet pelo motivo de não ser necessário ter um usuário no servidor. Desta forma, o usuário pode abrir um browser e chamar o endereço ftp://servidor para ter acesso ao diretório disponibilizado pelo serviço. Geralmente, esse diretório é o home do usuário FTP que no Debian é /home/ftp.

Conecte-se a um servidor ftp da forma tradicional. Forneça um usuário e senha válidos:

# ftp IP
Verifique se a conexão foi bem sucedida e encerre a sessão. Em breve iremos abrir uma nova para exercitar mais comandos:

ftp> quit
Agora conecte-se como um usuário anônimo no servidor instalado na sua própria máquina. A sintaxe do comando é a mesma, entretanto você deverá fornecer o login anonymous e uma senha qualquer. Verifique cuidadosamente se a conexão foi aceita:

# ftp localhost
Connected to localhost.
220 ProFTPD 1.3.0 Server (Debian) [::ffff:127.0.0.1]
Name (localhost:aluno): anonymous
331 Password required for anonymous.
Password:

Por que a conexão foi recusada? Estaria a senha incorreta?

Devemos antes liberar o acesso anônimo ao servidor! Edite o arquivo /etc/proftpd/proftpd.conf, e descomente as linhas referentes a seção Anonymous. Esta seção está localizada aproximadamente entre as linhas 100 e 140 do arquivo de configuração original:


User ftp
Group nogroup

...



Reinicie novamente o serviço para que as alterações tenham efeito:

# /etc/init.d/proftpd restart


Tente novamente a conexão como usuário anônimo. Agora deverá funcionar. Veja o quadro abaixo:

# ftp localhost
Connected to localhost.
220 ProFTPD 1.3.0 Server (Debian) [::ffff:127.0.0.1]
Name (localhost:aluno): anonymous
331 Password required for anonymous.
Password:
331 Anonymous login ok, send your complete email address as your password.
Password:
230-Welcome, archive user anonymous@localhost !

Continue logado como usuário anônimo. Iremos fazer alguns testes a seguir.


Comandos FTP


Os servidores de FTP muito raramente mudam, mas novos programas clientes FTP aparecem com bastante regularidade. Estes clientes variam no número de comandos que implementam. A maioria dos clientes FTP comerciais implementam apenas um pequeno subgrupo de comandos FTP. Mesmo que o FTP seja um protocolo orientado à linha de comandos, a nova geração dos clientes FTP esconde esta orientação num ambiente gráfico muitas vezes bastante desenvolvido.

As interfaces clientes do FTP do BSD UNIX e do GNU/Linux possuem muitos comandos, alguns deles arcaicos e sem utilidade hoje em dia, como por exemplo o tenex e o carriage control. Já outros são bastante utilizados: cd, dir, ls, get, mget, put e mput.

Abaixo estão listados alguns dos mais utilizados comandos FTP:

help - Lista os comandos disponíveis. Um sinônimo é ?
help CMD - Mostra uma ajuda para o comando CMD
ls - Lista os arquivos no servidor. Um sinônimo é dir
cd - Troca de diretório no servidor
lcd - Troca de diretório da máquina local
!ls - Lista os arquivos da máquina local
!CMD - Executa na máquina local o comando CMD
get - Faz download de um arquivo do servidor para a máquina local.
mget - Faz download de mais de um arquivo.
put - Faz upload de um arquivo da máquina local para o servidor.
mput - Faz upload de mais de um arquivo.

Logado como usuário anônimo vamos fazer alguns testes:

Liste o conteúdo do servidor:

ftp> ls


Liste o conteúdo do seu diretório local:

ftp> !ls




Faça o download de algum arquivo:

ftp> get ARQUIVO


Verifique se o arquivo foi copiado:

ftp> !ls


Tente agora fazer o upload de um arquivo:

ftp> put ARQUIVO


Por padrão, usuários anônimos não devem ter permissão para fazer upload de arquivos.

Encerre a sessão e logue-se em seguida como um usuário válido no servidor FTP da máquina de algum colega:

ftp> quit

221 Goodbye.

# ftp IP

Tente agora fazer o upload do arquivo. Deverá funcionar desta vez:

Faça o download de vários arquivos:

ftp> mget *


Note que é exigida a confirmação para cada arquivo copiado, o que pode ser incômodo. Desligue o modo interativo, e tente novamente:

ftp> prompt

Interactive mode off.
ftp> mget *

Faça o upload de vários arquivos:

ftp> mput *


Verifique o log de atividade do FTP:

# less /var/log/proftpd/xferlog

28 de novembro de 2010

Atravesse o pacífico com um jet ski

Um amigo me mandou os seguintes dizeres no e-mail:

    “Entre no google maps e no ponto A coloque Japan, no B coloque China, São inumeros passos, Mas LEIA o nº 43?..

    Vou deixar a curiosidade de vcs leitores para terem um ataque de risos! (Muito hilario)





Comédiaaaa. Cruze o pacífico com um jet ski. rsrsrsrs. May loko que o batma esse google maps

Fonte: Vida de suporte

26 de novembro de 2010

Assinatura de email no Thunderbird

Eae galerê! tudo bem?

Bom, estou meio de saco cheio de ficar repetindo como inserir assinatura de email no thunderbird para clientes, para meus familiares, para meus amigos, para meus colegas, para  enfim... pra todo mundo que me pergunta. Só essa semana eu fiz isso 7 vezes. Demorei cerca de 40 minutos em cada inclusão de assinatura. Se eu fosse fazer na mão demoraria 2 minutos no máximo, cada inclusão. Na ESPN, às vezes eu ajudava o suporte  técnico de lá a adicionar as assinaturas. Eram 200 assinaturas por dia, isso porque eu ajudava ele. Se eu ficasse o dia inteiro fazendo seriam mils por dia. E como é uma coisa muitooooo boba, acho que seria legal eu expor aqui para a galerê que tá com dúvida. Então, é melhor colocar um "tutorial" aqui e depois falar pro povo ir no meu blog e seguir.

Você pode ter a sua assinatura de duas formas: jpg ou html


JPG
Na opção um você deve ter a sua assinatura em formato de imagem (de preferência jpg). Depois abra seu Thunderbird clique em Edit --> Account Settings (ou se o seu Thunderbird estiver em português.. Ferramentas --> configurações de contas).

Próximo passo é clicar em cima da sua conta de email, logo após clique em Attach this signature (ou em português, adicione a sua assinatura) e escolha a sua assinatura em formato .jpg. Pronto está feito.



HTML
Na opção 2 você escreve um código html e na img src você tem que colocar o caminho absoltuto inteiro. Muita gente escreve o html errado colocando o caminho relativo do arquivo.
Para adicionar é o mesmo passo a passo. A diferença é que muda de jpg para htm. Para o Thunderbird compreender onde está a sua imagem, você deve escrever na img src o seguinte:
[file:///home/sabino/img.jpg]

Se a sua imagem estiver na internet
[http://www.sabinux.com/img.jpg]

Abraços
Espero ter ajudado com essa dica!

24 de novembro de 2010

Verificação de ID - Root

Bom dia galerê! Tudo bem?

Vou postar uma coisa hoje idiota, mas que pode ajudar ou esclarecer coisinhas pra muita gente. Me digam uma coisa, vcs já executaram um shell script e ele diz assim: "Você não é root, não pode executar este comando". Ou algo assim. Vocês já pensaram como ele consegue descobrir essa informação?

É o seguinte. Todo usuário tem um id, e o root não é diferente. Então, o script corre atrás desse id e verifica o valor dele. Se não for o valor de id padrão de root, então não é root, então exit.

Entenderam? Como conseguir esse id? Se várias formas: com o comando id, vendo no /etc/passwd, no /proc tbm tem essa informação. Enfim, mils maneiras. Trocando 3 páragrafos por 5 linhas em script:



#!/bin/bash
if [ "$(id -u)" != "0" ]; then
echo
echo "Voce deve executar este script como root! "
else
echo "Voce é root!"
fi

23 de novembro de 2010

Criação de grupos - Horde

Mediante ao pedido de uma cliente tive que caçar um pouco sobre isso já que nunca fiz isso. Ela quer enviar emails aos seus clientes cadastrados como grupos ou lista de contatos. Faço isso com o Thunderbird, molezinha. Mas, com webmail nunca fiz, pois  razões de performance. Então, comecei a caçar sobre o webmail Roundcube, Squirremail e o Horde a fim de verificar quais deles possuia essa função em seus códigos compilados. O Horde tem essa opção "avançada". 

Se for útil para alguém, lá vai!

Então, como fazê-lo:

1. Entrar no Webmail Horde
2. Clicar em Catálogo de Endereços
3. Adicionar todos os emails desejados
4. Clicar na parte superior esquerda "Exibir"
5. Clicar nos emails desejados a serem integrantes do grupo.
6. Clicar no campo "para uma Lista de Contatos". Mude-o para MyAddressBook
7. Insira no campo o nome do grupo.
8. OK
9. Componha um novo email
10. Ao abrir a tela de criação de email, clique em catálogo de endereços. Clique no grupo desejado e depois em "Para" ou "Cc" ou "Cco". Logo após isso, clique em OK.
11. No campo desejado aparecerão os destinatários seguidos do grupo
12. Envie o email


Fonte: Documentação oficial do Horde
http://www.horde.org/documentation.php

10 de novembro de 2010

Usuário para desligar a máquina

Com certeza no ambiente corporativo sempre existe aquele colega de trabalho que quer ser root no seu servidor. Porém, todo sysadmin/serveradmin que se preze sabe que só pode existir um root seja por razões de ego ou de segurança da informação. Então, vamos deixar nosso colega de trabalho pelo menos desligar a máquina vai. Tudo bem que ele não vai poder nem executar um ls.

Como??? Go Go Go

Vamos fazer o usuário admin conseguir logar na máquina e desligá-la. Esse usuário admin estará no group TI.


1. Criação de usuário e grupo

    # groupadd TI
    # useradd -g TI -m -s /home/admin/shutdown.sh admin
   
2. Script de shutdown

    # cd /home/admin
    # vi shutdown.sh
        #!/bin/bash
        echo "" && sleep 2s
        echo "<=== ATENCAO: DESLIGANDO O COMPUTADOR ====>"
        /sbin/shutdown -h now
 
3. Permissões do Script

    # chown root:TI /home/admin/shutdown.sh
    # chmod 750 /home/admin/shutdown.sh

4. Suid

    # chgrp TI /sbin/shutdown
    # chmod 4754 `which shutdown`

5. Passwd

    # passwd admin
    12345
    12345


Agora é só passar o usuário e a senha pro prego do seu amigo. Quando ele logar, ele vai desligar a máquina. Aí você pode personalizar o script para uma parada no squid ou algo do tipo.

Até mais!

9 de novembro de 2010

Iptables com suporte Layer7

Por Lucas Sabino
10/11/2010




Eu e meu amigo Marcelo Kunz estávamos fazendo um servidor. E aí no meio do proxy, msn-proxy, mysql...surgiu a necessidade de uma possível solução dos problemas via iptables e seu layer7. Então achei que seria legal. Refazer um tutorial que havia feito pra postar aqui.






Então gogogo!




Primeira coisa idiota que temos que saber é se nossa máquina tem os pacotes necessários (make, gcc, ncurses etc... build-essential, patch). Depois vamos pros pacotes e suas versões:




Usei:
linux-2.6.28.8.tar.bz2
iptables-1.4.3.tar.bz2
netfilter-layer7-v2.22.tar.gz
l7-protocols-2009-05-28.tar.gz






<=========================================================================>


   1. Baixar todos os pacotes em /usr/src e descompactar o pacote do netfilter-layer7
         # cd /usr/src && tar -zxvf netfilter-layer7-v2.22.tar.gz
  
   2. Crie o link do kernel
         # ln -s /usr/src/linux-2.6.28.8 /usr/src/linux


   3. Faça o patch
         # patch -p1 < /usr/src/netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch


   4. Compilação do kernel
         # make menuconfig
  
   5. Ativando módulo layer7 no kernel
         Networking → Networking options → Network packet filtering framework (Netfilter) → Core Netfilter Configuration


                              “layer7′′ match support
                              [ ] Layer 7 debugging output
                              “string” match support








   6. Ir na opção anterior ao Core Netfilter Configuration e depois ir em IP: Netfilter Configuration. Verificar se está tudo pra subir com o kernel.


   7. Saía do kernel e salve as configurações


   8. Compilando
         # make
         # make modules_install


   9. Copiando a BzImage e criando o initrd
         # cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.28.8
         # mkinitramfs -o /boot/initrd.img-2.6.28.8 /lib/modules/2.6.28.8


  10. GRUB
         # vi /boot/grub/menu.lst
                  title Debian kernel 2.6.28.8
                  root (hd0,0)
                  kernel /boot/vmlinuz-2.6.28.8 root=/dev/sda1 ro quiet
                  initrd /boot/initrd.img-2.6.28.8
                  savedefault

                  title Debian kernel 2.6.28.8 (single-user mode)
                  root (hd0,0)
                  kernel /vmlinuz-2.6.28.8 root=/dev/sda1 ro single
                  initrd /initrd.img-2.6.28.8




  11. Reboot
         # init 6


  12.Vá pro diretório do iptables
         # cd /usr/src/iptables-1.4.3 

  13. Copie os arquivos libxt_layer7.c libxt_layer7.man para o diretório do extensions do iptables:
         # cp /usr/src/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/* extensions/ 


  14. Expurgando o iptables velho e instalando o novo
         # aptitude purge iptables
         # ./configure --with-ksource=/usr/src/linux-2.6.28.8
         # make KERNEL_DIR=/usr/src/linux-2.6.28.8 BINDIR=/sbin LIBDIR=/lib
         # make install KERNEL_DIR=/usr/src/linux-2.6.28.8 BINDIR=/sbin LIBDIR=/lib 


  15. Protocolos do layer7
         # tar -zxvf l7-protocols-2009-05-28.tar.gz
         # cd l7-protocols-2009-05-28
         # make install
         # ls /etc/l7-protocols




  16. Subindo o módulo
         # modprobe ipt_layer7


  17. Finalmente, a regra
         # iptables -A FORWARD -m layer7 –l7proto msnmessenger -j DROP
         # iptables -A FORWARD -m layer7 –l7proto bittorrent -j DROP






<=======================================================================>


OBS1: Tem gente que gosta de fazer o kernel virar um pacote. Nesse caso temos ir até o tópico número 7. Ou seja, não executar o make. Ao invés de usar o make você pode usar isto para transformar o kernel em um pacote .deb:




    # make -kpkg clean
    # make-kpkg --initrd kernel_image


Foi criado um arquivo linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb no diretório /usr/src, volte ao diretório e instale.


    # cd /usr/src
    # dpkg -i linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb


Pronto, o novo kernel já esta instalado.


Tem bastante gente que gosta desse jeito porque é mais fácil, e não dá pau no grub. Mas, eu prefiro ver matrix, prefiro a pílula verdadeira, ou seja, make e make install.








OBS2: Nas versões mais antigas do netfilter-layer7 era necessário unir o layer7 com o iptables antes da compilação pelo patch. Ex:




    # patch -p1 <  /usr/src/netfilter-layer7-v2.22/iptables-1.4-for-kernel-2.6.20forward-layer7-2.22.patch


A partir da versão 1.4.3 não é necessário.








OBS3: E também era necessário dar permissão a lib de teste do layer7. Não é mais necessário do iptables 1.4.3 pra frente.


    # chmod 755 /usr/src/iptables-1.4.0/extension/.layer7-test

1 de novembro de 2010

Shell Script: Test

Vamos falar de alguns parâmetros legais do comando test - muito utilizado em shell script.

test ­-r  Testa se tem permissão de leitura
test ­-w Testa se tem permissão de escrita
test ­-x Testa se tem permissão de execução
test ­-f  Testa se é um arquivo regular
test ­-d Testa se é um diretório
test ­-u Testa se seu SUID está ativado
test ­-g Testa se seu SGID está ativado
test ­-s Testa se seu tamanho é maior que zero