mkdnsmap4me: Gerador automático de mapas de nomes DNS
mkdnsmap4me - Gerador automático de mapas de nomes DNS
Colaboração: Jansen Sena <<jansen (a) comunidadesol org>>
Freqüentemente, muitos administradores de sistemas costumam criar mapas de nomes para configurar servidores DNS. Uma prática comum para essa atividade consiste em escolher temas de nomes usando como referência personagens de livros, filmes, recursos naturais, cidades, países, entre outros. Entretanto, essa tarefa pode ser trabalhosa e sujeita a erros à medida em que número de hosts a serem mapeados cresce.
O mkdnsmap4me é uma pequena ferramenta desenvolvida em shell script para auxiliar administradores de sistemas no sentido de automatizar o processo de geração de mapas de nomes. Tomando como referência arquivos de texto que contêm padrões de nomes pré-estabelecidos e outras informações repassadas pelo administrador de sistemas, como o nome do domínio, o prefixo IP a ser utilizado, a quantidade de servidores, clientes e impressoras, o mkdnsmap4me cria os mapas direto e reverso para servidores DNS.
1. Exemplo
mkdnsmap4me 192.168.1 comunidadesol.org rios.txt 3 5 passaros.txt 50 40
Nesse caso, o mkdnsmap4me irá criar os mapas direto e reverso para o domínio "comunidadesol.org". O prefixo de endereço IP a ser utilizado é "192.168.1". Os nomes a serem utilizados para os servidores serão retirados do arquivo "rios.txt" e o primeiro servidor terá como sufixo "3". Como "5" servidores devem ser habilitados nesse exemplo, o primeiro endereço IP para os servidores será "192.168.1.3" e o último "192.168.1.7".
Caso existam mais de cinco nomes no arquivo "rios.txt", o mkdnsmap4me irá inseri-los nos mapas DNS comentados para uso futuro. Para os clientes, a ferramenta irá considerar os nomes contidos no arquivo "passaros.txt". A faixa de endereços a ser habilitada compreende "192.168.1.50" até "192.168.1.89". Da mesma forma que nos servidores, caso existam mais nomes disponíveis no arquivo "passaros.txt", os excedentes serão incluídos nos mapas com comentários.
Inserindo mais um bloco de "arquivo de nomes + primeiro sufixo IP + quantidade" o administrador de sistemas pode incluir também impressoras (ou uma terceira categoria qualquer de equipamentos em rede) nos mapas.
2. Instalando o mkdnsmap4me
Para facilitar a sua utilização para os administradores que utilizam distribuições GNU/Linux baseadas no Debian, o mkdnsmap4me está disponível como um pacote ".deb". Para instá-lo basta digitar o segunite comando:
# dpkg -i mkdnsmap4me-0.1.deb
Feito isso, para obter mais detalhes sobre o mkdnsmap4me basta consultar sua man page:
$ man mkdnsmap4me
Para os usuários de outras distribuições pode-se utilizar o ".tar.gz".
Em ambos os casos, a ferramenta possui um conjunto de temas pré-definidos. Caso a instalação tenha sido feita por meio do pacote ".deb", os temas estarão no diretório "/usr/share/doc/mkdnsmap4me/themes". Caso tenha sido utilizado o ".tar.gz" os temas estarão no diretório "themes" dentro da pasta criada após a descompactação do arquivo.
3. Obtendo o mkdnsmap4me
O pacote ".deb", o arquivo ".tar.gz", o script e os arquivos de temas podem ser obtidos no seguinte endereço:
http://www.comunidadesol.org/jansen/mkdnsmap4me
4. Como colaborar?
Você pode colaborar corrigindo problemas no código do mkdnsmap4me, desenvolvido em shell script, reportando problemas, fazendo sugestões e críticas e colaborando com a documentação.
Outra forma de colaborar é criar novos arquivos de temas, considerando filmes, livros, recursos naturais, animais, entre outros. Serão muito bem-vindos temas que considerarem assuntos típicos da sua região!
Para colaborar basta encaminhar um email para <jansen (a) comunidadesol org>.
Apache chairman: Days numbered for commercial software
Fonte: http://www.macworld.co.uk/news/index.cfm?RSS&NewsID=14172
Thursday - March 23, 2006, By Paul Krill
The days of selling software through the traditional commercial model are numbered, as open source is becoming the paradigm of choice, said Greg Stein, chairman of the Apache Software Foundation, at the EclipseCon 2006 conference on Wednesday.
Software is becoming is increasingly commoditised, Stein said during his keynote presentation, and more of it is available free and it is easy to get.
He cited the OpenOffice office automation package as an example of free software that could replace Microsoft Office.
All your software will be free
"As the open-source stack grows and grows and takes over more areas, there's less money available in packaged products," Stein said.
"All of your software will be free. It means that, over time, you aren't going to be paying for software anymore but will instead pay for assistance with it", Stein said.
He estimated that in five to ten years, most software used today will be free.
"The notion of packaged products is really going to go away," Stein said.
Eventually, a free software project will overtake a commercial effort in functionality; there are almost always more developers in the open-source community, Stein said.
Making money in software will involve selling assistance services for functions such as installation, configuration, maintenance, upgrading, testing and customisation, Stein said. Basic software components themselves will be free, he said.
"As our systems grow more and more complex, more and more assistance is necessary," he said.
An audience member was not so willing to concede the software market to open source.
"I think there's always going to b a spot for commercial, closed-source software for specialised tasks, but the base infrastructure will be more open source or easily available," said Danny D'Amours, computer systems officer at the National Research Council.
Commercial, closed-source software will not go away "because there's so many small niches that people will be able to exploit or be able to make commercial solutions off of," D'Amours said.
Evolving licences
In other parts of his presentation, Stein discussed the evolution of software licensing and compared Apache to Eclipse.
"A licence can ruin a perfectly good piece of software," Stein said, borrowing a quote from fellow Apache participant Jon Stevens.
"A bad licence can make it so restrictive that nobody wants to use the software," Stein said.
Licensing has taken various forms, ranging from the traditional proprietary licence used by Microsoft, IBM, and Oracle; to Microsoft's somewhat less-restrictive Shared Source licence to the all-access GNU General Public Licence (GPL), which has caused problems, Stein said.
"The GPL is sometimes considered viral in that it grows out to the entire software package", requiring the release of all code affected by it, he said.
Even licences associated with Google, where Stein is employed, Yahoo and MSN are closed, he said. "Their software is also closed. It's proprietary; you can't get at it," said Klein.
In comparing Eclipse and Apache, Stein said Eclipse looked at the Apache model when being founded. Like Apache, which started with a web server, Eclipse has expanded beyond its original mission, now being more than just an IDE. But Eclipse has paid staff while Apache is all-volunteer, said Stein.
"Our organisations [have] not been very close, but certainly, we're starting to see more co-operation between them" Stein said.
Apache has long-term initiatives under way such as its Harmony J2SE (Java 2 Standard Edition) implementation, Stein noted. Apache has also taken on endeavours that would have been surprising several years ago, such as the Derby database, he said.
Stein cited patents as an issue for open source, particularly in the area of standards. "Standards that have patents in them are going to be very difficult and one of the big areas in the future that are going to cause problems for open source," Stein said.
Fonte: http://www.dicas-l.com.br/print/20060401.html
Configurando o Lilo e o Grub
Configurando o Lilo e o Grub
O lilo e o grub disputam o posto de gerenciador de boot default entre as distribuições Linux. O lilo é o mais antigo e mais simples de configurar, enquanto o grub é o que oferece mais opções. Mas, ao invés de ficar discutindo qual é melhor, vamos aprender logo a configurar e resolver problemas nos dois :-)
O lilo utiliza um único arquivo de configuração, o /etc/lilo.conf. Ao fazer qualquer alteração neste arquivo é preciso chamar o executável do lilo, o "/sbin/lilo" ou simplesmente "lilo" para que ele leia o arquivo e salve as alterações.
Aqui vai um exemplo comentado do arquivo de configuração do lilo, que você pode usar como modelo:
# A opção abaixo (quase sempre a primeira linha do arquivo) indica aonde o lilo # será instalado. Indicando um dispositivo, como em "/dev/hda" ele é instalado # na MBR do HD. Indicando uma partição, como em "/dev/hda1" ele é instalado # no primeiro setor da partição. Fazendo isso o sistema não inicializará diretamente, # você precisará configurar o gerenciador de boot de outro sistema instalado # para carregar o atual. boot=/dev/hda # (caso você use um HD Serial ATA, e o lilo não esteja sendo instalado corretamente, # experimente mudar esta opção de "/dev/hda" para "/dev/sda", a forma como eles # são detectados nas versões recentes do Kernel 2.6 # Esta opção ativa o uso de uma imagem como fundo no menu de boot do lilo. # Este recurso é opcional: bitmap = /boot/kurumin.bmp bmp-colors = 255,9,;9,255, bmp-table = 61,15,1,12 bmp-timer = 73,29,255,9 # RESOLUÇÃO do VÍDEO # Aqui vai o código que determina a resolução do vídeo, em modo texto (usando frame- # buffer) e também no modo gráfico, caso seja usado o driver de vídeo "fb" no arquivo # de configuração do X. # O default na maioria das distribuições é "vga=788", que faz o sistema usar resolução # de 800x600, que é compatível com quase todas as placas de vídeo. # Se você quer usar resolução de 1024x768, mude a opção para: vga=791 # Se você quer usar resolução de 640x480, mude a opção para: vga=785 # Se a sua placa de vídeo não suporta frame-buffer e você quer de volta a velha tela de # texto padrão, mude a opção para: vga=normal # OBS: Se você tem uma placa GeForce 4 ou GeForce 4 MX, deixe esta opção em "788", # pois elas não suportam frame-buffer a 1024x768. vga=788 # Esta linha indica qual será o sistema operacional default, caso você tenha dois ou mais # instalados em dual-boot: prompt default=Kurumin # Tempo de espera antes de entrar no sistema padrão, em décimos de segundo (o # padrão é 10 segundos). O valor máximo é 30000 (3.000 segundos), não use um #número maior que isto, ou o lilo acusará o erro e não será gravado corretamente: timeout=100 # Aqui vão os parâmetros do Kernel. Se você usa deseja desativar o suporte a apci, # para solucionar problemas, por exemplo, adicione a opção "acpi=off" append = "splash=silent apm=power-off nomce quiet devfs=mount" # As linhas abaixo indicam a localização do executável principal do Kernel e do arquivo # initrd, caso seja usado um. Esta é a seção que é duplicada ao instalar um segundo # Kernel image=/boot/vmlinuz-2.6.8.1-kanotix-10 label=Kurumin root=/dev/hda1 read-only
Isso pode ser solucionado facilmente, editando o "/etc/lilo.conf" do Mandrake, para que ele seja reinstalado na partição e adicionando as duas linhas que chamam outros sistemas no lilo do Kurumin.
Você pode editar o lilo do Mandrake e regravá-lo rapidamente através do próprio Kurumin (ou outra distribuição instalada), ou dando boot com um CD do Kurumin ou Knoppix.
Dê boot pelo CD e abra um terminal. Defina a senha de root usando o comando "sudo passwd". Agora vire root usando o comando "su" seguido da senha escolhida.
Monte a partição onde o Mandrake está instalado:
# mount -t reiserfs /dev/hda1 /mnt/hda1
Agora usamos o comando chroot para "entrar" dentro da partição montada, a fim de editar o lilo.conf e gravar o lilo. Todos os comandos dados dentro do chroot são na verdade executados no sistema que está instalado na partição.
É preciso Indicar o sistema de arquivos em que a partição está formatada no comando acima, caso contrário o chroot vai dar um erro de permissão.
# chroot /dev/hda1
Agora use um editor de texto em modo texto, como o mcedit ou o joe para alterar o arquivo "/etc/lilo.conf" e chame o executável do lilo para salvar as alterações. Depois de terminar, pressione Ctrl+D para sair do chroot.
# mcedit /etc/lilo.conf # lilo
Configurando o grub
Muitas distribuições permitem que você escolha entre usar o lilo ou o grub durante a instalação. Outras simplesmente usam um dos dois por padrão. De uma forma geral, o grub oferece mais opções que o lilo e inclui um utilitário, o update-grub que gera um arquivo de configuração básico automaticamente. Por outro lado, a sintaxe do arquivo de configuração do grub é mais complexa o que o torna bem mais difícil de editar manualmente que o do lilo. O grub inclui ainda um prompt de comando, novamente nenhum exemplo de amigabilidade.
De resto, os dois possuem a mesma e essencial função. Sem o gerenciador de boot o sistema simplesmente não inicializa. :-)
O grub usa o arquivo de configuração "/boot/grub/menu.lst". Este arquivo é lido a cada boot, por isso não é necessário reinstalar o grub ao fazer alterações, como no caso do lilo.
Para entender melhor como o grub funciona, vamos ver como instalá-lo no Kurumin, substituindo o lilo que é usado por padrão.
Em primeiro lugar, você precisa instalar o pacote do grub via apt-get. Ele não possui dependências externas, inclui apenas os executáveis principais. Você pode até mesmo arriscar compilar a versão mais recente, baixada no site do projeto.
# apt-get install grub
Depois de instalar, crie a pasta "/boot/grub/" e use o "update-grub" para gerar o arquivo "menu.lst". Basta responder "y" na pergunta e o arquivo é gerado automaticamente:
# mkdir /boot/grub # update-grub Testing for an existing GRUB menu.list file... Could not find /boot/grub/menu.lst file. Would you like /boot/grub/menu.lst generated for you? (y/N) y Searching for splash image... none found, skipping... Found kernel: /boot/vmlinuz-2.6.8.1-kanotix-10 Found kernel: /boot/memtest86.bin Updating /boot/grub/menu.lst ... done
Agora só falta instalar o grub na MBR usando o comando:
# grub-install /dev/hda
Ao gravar o grub, ele naturalmente substitui o lilo ou qualquer outro gerenciador de boot que esteja sendo usado.
Se você mudar de idéia mais tarde e quiser regravar o lilo, subscrevendo o grub, basta chamá-lo novamente:
# lilo
Assim como no caso do lilo, o arquivo de configuração do grub inclui uma seção separada para cada sistema que aparece no menu de boot. O update-grub não é muito eficiente em detectar outros sistemas instalados, por isso depois de gerar o arquivo você ainda precisará adicionar as linhas referentes a eles no final do arquivo "/boot/grub/menu.lst".
Para que o grub inicialize uma cópia do Windows, instalada na primeira partição, /dev/hda1, adicione as linhas:
title Windows rootnoverify (hd0,0) chainloader +1
Elas equivalem à opção "other=/dev/hda1" que seria usada no arquivo do lilo. A linha "title" contém apenas a legenda que é mostrada no menu de boot. O que interessa mesmo é a linha rootnoverify (hd0,0), que indica o HD e a partição onde o outro sistema está instalado. O primeiro número indica o HD e o segundo a partição dentro deste. Na nomenclatura adotada pelo grub temos:
/dev/hda = 0 /dev/hdb = 1 /dev/hdc = 2 /dev/hdd = 3
As partições dentro de cada HD são também nomeadas a partir do zero:
/dev/hda1 = 0,0 /dev/hda2 = 0,1 /dev/hda3 = 0,2 /dev/hda4 = 0,3 /dev/hda5 = 0,4 /dev/hda6 = 0,5
etc...
Se você quisesse que o grub iniciasse também uma instalação do Mandrake no /dev/hda3, cujo lilo (ou grub) foi instalado na partição, adicionaria as linhas:
title Mandrake rootnoverify (hd0,2) chainloader +1
A linha "chainloader +1" especifica que o grub vai apenas chamar o gerenciador de boot instalado na partição e deixar que ele carregue o outro sistema, assim como fizemos ao editar o arquivo do lilo.
Você pode usar o grub para carregar diretamente o outro sistema, sem precisar passar pelo outro gerenciador de boot. Neste caso você usaria as linhas:
title Mandrake root (hd0,2) kernel /boot/vmlinuz-2.6.8 root=/dev/hda3 ro savedefault boot
Veja que neste caso você precisa especificar a localização do executável do Kernel dentro da partição. Você pode especificar também opções para o Kernel e usar um arquivo initrd, caso necessário, como neste segundo exemplo:
title Mandrake root (hd0,2) kernel /boot/vmlinuz-2.6.8 root=/dev/hda3 ro vga=791 acpi=off splash=verbose initrd /boot/initrd.gz savedefault boot
Assim como no caso do lilo, você pode usar um CD do Kurumin ou Knoppix para reinstalar o grub, caso ele seja subscrito por uma instalação do Windows ou outra distribuição Linux.
Neste caso, depois de dar boot pelo CD, você só precisa montar a partição onde o sistema está instalado, como em:
# mount -t reiserfs /dev/hda2 /mnt/hda2
E usar o chroot para obter o prompt de comando do sistema que está recuperando:
# chroot /mnt/hda2
No prompt, você precisa apenas editar o arquivo "/boot/grub/menu.lst", ou gerá-lo novamente usando o comando "update-grub" e reinstalar o grub, usando o comando:
# grub-install /dev/hda
Gostou da dica? Veja a agenda de cursos presenciais com Carlos E. Morimoto em Porto Alegre e São Paulo
- Curso: Redes e Servidores Linux (com Carlos E. Morimoto) Em Porto Alegre, início dia 04/07
- Curso: Programando em Shell Script (com Júlio Cezar Neves) Em Porto Alegre, início dia 11/07
Fonte: http://www.dicas-l.com.br/print/20050626.html
Usando políticas de senhas em diretórios LDAP
Usando políticas de senhas em diretórios LDAP
Colaboração: Gabriel Menezes Nunes
Vou descrever nesse artigo uma maneira que encontrei de usar os recursos de políticas de senhas em diretórios LDAP. Essa é uma ótima maneira de reforçar a segurança total da sua infra-estrutura da rede, pois um usuário com senha fraca pode colocar em risco todo um planejamento feito durante muito tempo. Caso um servidor seja penetrado por um intruso, devido a uma conta com senha fraca, o invasor estará a um passo de uma possível escalada de privilégios e total comprometimento da máquina em questão. Então, uma "cartilha" de políticas a serem usadas numa rede que contém dados privados de usuários, é crucial para qualquer pequena ou grande empresa.
Procurei muito por esse assunto na internet, mas não encontrei uma documentação interessante usando o OPENLDAP (http://www.openldap.org).
Esse artigo irá apenas demonstrar a instalação e configuração do schema "ppolicy", usado nas políticas de senhas no servidor. Qualquer configuração adicional do LDAP ou configuração do cliente estão fora do escopo desse documento.
Para usar os atributos LDAP de aplicação de senhas fortes, será necessário o PAM. Logo distribuições que não o usem, como o SLACKWARE, não serão afetadas e irão ignorar qualquer bloqueio de usuário ou expiração de senha. Nessas distros, você terá que compilar o PAM , e recompilar alguns pacotes como OpenSSH e Shadow.
Começando pela instalação a partir do código fonte:
Pegue o OpenLDAP mais atual (http://www.openldap.org/software/download) Estou usando a versão 2.3.23
tar xvzf openldap-2.3.23.tgz
Agora vem uma parte interessante: a alteração do código fonte!
Teremos que alterá-lo para podermos usar as políticas de senhas diferentes para cada usuário, e não apenas uma genérica para a base de dados inteira, e também para podermos modificar alguns atributos operacionais que o OpenLDAP padrão não nos deixa modificar.
Então vamos "hackear" o OpenLDAP !!!
Entre no diretório "servers/slapd/overlays" dentro da pasta do openldap.
cd openldap-2.3.23/servers/slapd/overlays
Dentro desse diretório localize e abra o arquivo ppolicy.c, de preferência com um editor que localize facilmente uma string de busca!
kate ppolicy.c
Aberto o arquivo, retire todas as strings "NO-USER-MODIFICATION" dos atributos do schema.
Explicando melhor, schema é um conjunto de atributos e classes usados no LDAP para guardar dados específicos do usuário. Caso esse atributo esteja como "NO-USER-MODIFICATION", ele não poderá ser mudado para usuários normais, logo não será possível uma política individual para cada um no seu banco de dados. Exemplos de schema podem ser samba.schema, para uso do samba com ldap, ou até mesmo um schema feito por um administrador para uso privado e exclusivo da empresa, usando atributos como RG, número do funcionário, salário, andar em que se localiza no prédio, etc.
Arquivo alterado, e só salvar, e agora iremos compilar
Volte ao diretório base do openldap
cd ../../.. ./configure --enable-overlays --enable-lmpasswd --enable-crypt
A parte mais importante é habilitar todos os "overlays", mais especificamente o "ppolicy". LMPasswd é para manter alguma compatibilidade com o samba, caso queira integrá-lo ao LDAP, e "crypt" mantém compatibilidade com sistemas que não usam PAM, como o SLACKWARE.
Caso dê algum problema com o Berkeley DB, exporte o CPPFLAGS: export CPPFLAGS="-I/usr/include/db4" ou onde estiver os includes do Berkeley DB. Repita o configure
E para terminar a instalação
make make install
Para configurar o ppolicy será necessário apenas a adição de uma linha ao slapd.conf
overlay ppolicy
Pronto! Já temos as políticas de senhas rodando no servidor.
Para testar podemos montar um LDIF:
lock_user.ldif ----------------------------------------------- dn: uid=gabriel,dc=servidor,dc=org,dc=br changetype: modify add: pwdAccountLockedTime pwdAccountLockedTime: 000001010000Z -----------------------------------------------
e adicionamos
ldapmodify -x -D 'cn=admin,dc=servidor,dc=org,dc=br' -w senha_do_ldap -f lock_user.ldif
A partir desse comando esse usuário estará bloqueado no servidor e não poderá mais logar. Para permitir sua autenticação:
unlock_user.ldif ----------------------------------------------- dn: uid=gabriel,dc=servidor,dc=org,dc=br changetype: modify delete: pwdAccountLockedTime ----------------------------------------------- ldapmodify -x -D 'cn=admin,dc=servidor,dc=org,dc=br' -w senha_do_ldap -f unlock_user.ldif
O servidor volta a permitir o usuário "gabriel" a se autenticar na base de dados.
Para mais atributos e manipulação de tais políticas, olhe no arquivo ppolicy.schema no diretório schema do OpenLDAP ou no Google!!!
Fonte: http://www.dicas-l.com.br/print/20060621.html
Roteamento avançado - Linux - utilizando IPROUTE e IPTABLES - Load Balance
Roteamento avançado - Linux - utilizando IPROUTE e IPTABLES - Load Balance
Colaboração: Fabricio Ferreira - GUZZY
Certo tempo atrás, escrevi um script usando IPROUTE2 e IPTABLES que desenvolvi na ocasião, já que havia a necessidade de utilizar 2 links de Internet distintos. Desta vez, reescrevi com muito mais detalhes mostrando exatamente como funciona cada passo.
Lembrando que, este script foi desenvolvido no SLACKWARE, mas acredito que funcione em qualquer outra distribuição LINUX com Kernel 2.4.x e superiores, com algumas poucas modificações.
Quanto aos links, vamos chamá-los de LINK1 e LINK2...
Imagine que você queira que determinado protocolo use o LINK1 e outro protocolo use o LINK2.
Um exemplo fácil seria dizer que mensagens de E-mail SMTP e POP (portas 110 e 25) utilizam o LINK1, enquanto o tráfego de internet (portas 80, 21, 53, 443...) utiliza o LINK2. Isto permitiria que usuários fizessem downloads pesados sem comprometer o tráfego de mensagens, ou ainda, enviar e receber mensagens de E-mail grandes sem interferir na velocidade dos usuários que navegam na Internet.
Um outro exemplo para quem tem Vlans em suas redes seria dizer que a REDE 192.160.0.X utiliza o Link1, enquanto a REDE 192.170.0.X utiliza o LINK2.
Basicamente, o processo funciona marcando pacotes que entram e saem do FIREWALL onde o script será implementado com o Comando IPTABLES usando Mark, um artifício que faz com que o Firewall monte uma tabela dinâmica de todos os pacotes que passam por ele. Imagine que você tenha um Firewall com 4 Interfaces, assim vamos chamá-las de: ETH0, ETH1, ETH2 e ETH3, onde ETH0 está conectada à sua LAN interna, a ETH1 conectada em uma DMZ, e as interfaces ETH3 e ETH4 conectadas a 2 Links distintos.
Se um pacote entrou pela interface ETH0 e saiu pela interface ETH3, é necessário que ele retorne para o mesmo lugar de onde veio. Eis o motivo de marcar os pacotes; caso contrário, eles se utilizarão do DEFAULT GATEWAY do Firewall, que pode não ser o mesmo que você deseja.
Entendendo isto, podemos seguir adiante com nosso script.
Abaixo descrevo detalhadamente como fazer cada configuração no Script para que você tenha sucesso na implementação.
Entendam que os IP´s aqui utilizados são fictícios, bem como seus Defaut Gateways. Você deverá trocá-los pelos IP´S da sua rede conforme a necessidade!
Eis um exemplo de um script pronto em um Firewall com 3 Interfaces apenas.
A primeira - ETH0, é a interface conectada à rede interna. A Interface ETH1 é a interface ligada ao LINK1, e por último, a interface ETH2, ligada ao LINK2.
Vejamos:
############################################################################## # Nesta parte denominamos variáveis para as interfaces como segue. # Denominamos que o nome LAN seja referente à Interface ETH0 que no nosso # script é a da rede interna. Verifique no seu Firewall qual é a interface # correta. IF_LAN='eth0' # Aqui denominamos as variáveis dos LINKS 1 e 2, e os chamamos de LINK1 e LINK2 # É claro que você poderá chamá-los do que quiser. Exemplo: ADSL1 e ADSL2, # mas não esqueça de alterar as variáveis no restante do script. IF_LINK1='eth1' IF_LINK2='eth2' # Aqui colocamos os Gateways dos Links de Internet. # Geralmente, os Default Gateways dos Links são os IP´S dos roteadores de # Internet. GW_LINK1='200.70.0.1' GW_LINK2='200.80.0.1' # Nesta parte, utilizamos o comando IPTABLES para mascarar os IP s, ou seja, # fazemos um NAT (Network Address Translation) para que os pacotes que venham da # Interface ETH0 com IP s da rede interna, ou mesmo pacotes gerados dentro do # próprio Firewall, possam sair para a Internet com endereços trocados, usando # os IP s das interfaces ligadas aos Links de Internet. # O MASQUERADE ao final do comando faz exatamente isto. # Caso contrário, utilizaria ACCEPT, mas aí os pacotes sairiam para a Internet # com IP s da rede interna e jamais retornariam ao Firewall. iptables -t nat -A POSTROUTING -o $IF_LINK1 -j MASQUERADE iptables -t nat -A POSTROUTING -o $IF_LINK2 -j MASQUERADE # Aqui começamos a marcar os pacotes diferenciando-os pela porta utilizada. # Observe que escolhemos os pacotes com destino às portas 80 (HTTP) 443 (HTTPS) # 25 (SMTP) 110 (POP) # Todo pacote que passar pelo Firewall com estas particularidades receberão # uma marca , uma espécie de carimbo. Pacotes destinados à porta 80 # recebem carimbo de número 2, pacotes com destino à porta 25 # recebem carimbo número 3. # Desta forma, podemos diferenciá-los para que mais à frente no script tenhamos # controle do que saiu/entrou e por onde saiu/entrou. iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 80 -j MARK --set-mark 2 iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 443 -j MARK --set-mark 2 iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 25 -j MARK --set-mark 3 iptables -t mangle -A PREROUTING -i $IF_LAN -p tcp --dport 110 -j MARK --set-mark 3 # A diferença entre o PREROUTING e o OUTPUT é que, PREROUTING abrange os # pacotes que foram originados fora do FIREWALL, por exemplo Interface ETH0 # ($IF_LAN), enquanto OUTPUT são os pacotes originados no Firewall, ou seja, na # própria console. iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 2 iptables -t mangle -A OUTPUT -p tcp --dport 443 -j MARK --set-mark 2 iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 3 iptables -t mangle -A OUTPUT -p tcp --dport 110 -j MARK --set-mark 3 # Aqui montamos as tabelas dinâmicas a partir das marcas (carimbos) que fizemos # lá em cima no nosso script. # Pacotes que foram marcados com 2 vão para a tabela table 20 e os marcados # com 3, vão para a tabela table 21 , com a mesma prioridade. Perceba o PRIO 20 # após os comandos. ip rule add fwmark 2 table 20 prio 20 ip rule add fwmark 3 table 21 prio 20 # se quisermos condicionar esta marcação de outra forma, podemos utilizar o # comando das seguintes formas: # Este condiciona que todos os pacotes que vierem da rede 192.160.0.0 vão para # a tabela 20. # O comando está comentado. Caso queira utilizá-lo, apenas retire o sinal de "#" # da frente. # ip rule add from 192.160.0.0/24 table 20 # Este outro condiciona os pacotes da rede 192.170.0.0 a irem para a tabela 21 # O comando está comentado. Caso queira utilizá-lo, apenas retire o sinal de # "#" da frente do comando. # ip rule add from 192.170.0.0/24 table 21 # Agora sim daremos rumo aos pacotes que foram marcados e cadastrados na tabela # dinâmica. # Veja que os pacotes que foram enviados para a tabela 20 têm como DEFAULT # GATEWAY o LINK1. Sendo assim, os pacotes serão enviados para o LINK1 na # Interface ETH1 com o IP 200.70.0.1. # Já os pacotes da tabela 21 serão enviados para o LINK2 na Interface ETH1, com # o IP 200.80.0.1 ip route add default via $GW_LINK1 dev $IF_LINK1 table 20 ip route add default via $GW_LINK2 dev $IF_LINK2 table 21 # Este último comando limpa a tabela, caso ela já tenha sido utilizada # anteriormente, ou apenas para termos certeza de que quando você resetar as # regras todas, o Firewall não guarde nenhum tipo de informação na # memória (cache). Daí o nome FLUSH CACHE. ip route flush cache
Você pode utilizar parte do script, se necessário. Por exemplo, se quiser apenas rotear pacotes pela origem, utilize:
ip rule add from 192.160.0.0/24 table 20
ou
ip rule add from 192.160.0.0/24 table 21
Conforme o Link que deseja utilizar. Onde 192.160.0.0/24 é a origem. Neste exemplo, a rede em questão tem a máscara 255.255.255.0 (/24)
Desta forma, não há necessidade de marcar pacotes e você poderá deletar as linhas do script.
Fabrício Ferreira GUZZY Especialista em Segurança Digital MCP Microsoft Certified Professional Linux Specialist
Fonte: http://www.dicas-l.com.br/print/20070327.html
Instalação do Redhat, Suse, Slackware e WindowsXP
Instalação do Redhat, Suse, Slackware e WindowsXP
Colaboração: Pedro Junior <<pedro (a) cybinfo com br>>
Esta dica eu recebi do Pedro Junior, e ensina com se instalar diversos sistemas operacionais em um mesmo HD. Eu não verifiquei se funciona, mas o Pedro me garantiu que dá certo mesmo. Qualquer dúvida ou problema, falem direto com ele (<pedro (a) cybinfo com br>).
Como certamente é um assunto bem interessante e útil, aqui vai:
Instalação do Redhat, Suse, Slackware e WindowsXP
Este tutorial aborda como instalar RH, Ss, Slack e WinXP no mesmo Winchester .
Minha maquina que foi usada pra este teste foi um:
Pentium III 900MHZ / Dual Processor 1,512 GB Ram HD de 40 Gigas Quantum Mas pode ser feita a mesma coisa em um Pentium 100MHZ com 32MB Ram claro vc não vai poder instalar o WindowsXP.
1º Passo: Crie uma partição de 30MB p/ que futuramente usarmos como /boot. Crie também uma partição primaria p/ Windows. No meu caso criei uma partição de 3,500GB. Temos duas partições, uma de 30MB e outra de 3,500GB p/ Windows.
Só uma dica, use o fdisk do Linux pra criar a partição de 30MB mencionada logo acima.
2º Passo: Instale o Windows95/98/ME/NT ou XP na partição que vc criou de 3,500GB lembra-se? No Meu caso Instalei o WindowsXP.
3º Passo: Depois de Instalar o Windows pegue seu cd do Linux RH e dê um boot com ele. Agora sim começa a ficar interessante a instalação, de preferência instale o RH em modo texto no caso linux text quando o cd pedir o boot. Depois disso a instalação prossegue normalmente instale o RH de acordo com suas necessidades, quando estiver naquela parte do DiskDruid, vc cria a partição de Swap no meu caso foi de 1,512GB de Swap e cria uma partição Ext3 para que seja o raiz do RedHat no caso o /. No meu caso criei uma de 15,00GB para o RedHat. Vc se lembra daquela partição que criamos lá no primeiro passo de 30MB, edita ela no DiskDruid e coloca ela como /boot pois a usaremos para gravar o lilo.conf do (RedHat) Se quiser pode também editar a partição do Windows e citá-la pra montar no RedHat automaticamente tipo /mnt/win Mas cuidado se vc formatou a instalação do win como NTFS vc devera compilar seu Kernel com suporte a opção NTFS, mas isso fica pra depois. Quando acabar de instalar o RedHat de um boot na maquina e entre no fdisk do win pra que vc possa colocar a partição de 30MB que vc gravou o lilo como inicializavel certo. Se tudo correr bem e se vc gravou o lilo no /boot de 30MB seu Win e o Linux RedHat vão funcionar normalmente, digo o boot vai funcionar normalmente chamando o Linux e o DOS que no caso e o Windows.
4º Passo: Se esta tudo funcionando normalmente então e hora de instalar o Suse Linux certo, bote o cd do Suse e de um boot com ele inicie a instalação com o Yast ou em modo texto fica a seu critério certo, quando chegar na parte de partições crie uma partição de 20MB para o boot do Suse e crie uma partição de Linux Native certo, no meu caso criei uma de 10,00GB para o / do Suse. Não precisa criar uma partição de Swap porque o Suse ira usar a mesma partição de Swap do RedHat , não me pergunta porque mas funcionou. Quando for pra gravar o lilo do Suse grave na partição que vc criou cd 20MB na instalação e não se esqueça de criar um disco de boot por precaução outra coisa pegue o numero da partição de boot do Suse tipo hdaX o numero da partição de boot não do / !! Depois de instalar o Suse vc vai dar um boot na maquina e vai perceber que a partição inicializavel e o do RedHat aquela que a gente colocou certo no fdisk do win. Tudo bem entre então no RedHat e edite o lilo.conf e o sistema Linux Suse tipo :
other = /dev/hdX partição de boot do Suse label = Linux Suse
E só executar o comando lilo na console e ver se não deu nenhum pau certo tenha certaza que a partição que vc colocou no lilo.conf do RedHat e a partição de boot do Suse Blza se tudo foi feito como descrevi vai dar certo, pelo menos deu certo comigo. Agora temos no total 03 Sistemas operacionais na nossa maquina certo na verdade so 02 o win não conta como Sistema Operacional hehehe .....
5º E ultimo Passo :
Agora iremos instalar o Slakware 8.0 maravilha de Linux !!!!!! Comece a instalação normalmente do slack e quando for usar o cfdisk crie uma partição / para ele o tamanho no meu caso coloquei 10,00GB somente isso não prescisa criar partição de boot nem de swap ele vai usar o swap do RedHat também igual o suse quando for gravar o lilo do Slack grave no MBR leu bem MBR certo.
Depois da instalação feita do Slack de um boot e vc vai ver que o Slack assumiu o boot mas no menu do boot so temos o DOS que no caso e o Win e o Linux que no caso e ele mesmo o Slack, então entre no Slack e edite o lilo.conf com o jedit ou vi ou melhor o mcedit e acresente os dois sistemas operacionais RedHat e o Suse no adicione as partições de boot tanto do RedHat quanto do Suse são aquelas partições de 30 e 20 MB se lembra deve ser hdaX , onde e X e o numero da partição.
other = /dev/hdX partição de boot do Suse label = Linux Suse
other = /dev/hdX partição de boot do RedHat label = Linux RedHat
E só executar o comando lilo na console e ver se não deu nenhum pau. E assim se fez a instalação, na verdade o lilo.conf do Slack vai chamar o boot do RedHat e e do Suse, e o boot do Redhat tembém vai chamar o Suse, porque nos adcionamos o Suse la no lilo.conf do RedHat .
Veja como deve ter ficado a lista de partições:
hda1 ? / boot do RedHat hda2 ? partição vfat ou NTFS do Windows hda3 ? / raiz do RedHat hda4 ? / boot do Suse hda5 ? / raiz do Suse hda6 ? Partição de Swap hda7 ? / raiz do Slackware
Duvidas sujestões criticas mail-me : <p3dr0 (a) imasters com br> Pedro Junior
Fonte: http://www.dicas-l.com.br/print/20020319.html
Recuperando partições danificadas
Recuperando partições danificadas
Assim como no Windows, você nunca deve desligar o micro no botão ao rodar qualquer distribuição Linux.
Mas, acidentes acontecem. A energia elétrica acaba de vez em quando, alguns dos drivers de softmodems podem fazer o micro travar (estes drivers são proprietários, por isso não é possível corrigir bugs, como em outras partes do sistema; você depende unicamente da boa vontade do fabricante) e assim por diante.
Durante o boot, o sistema verifica as partições em busca de problemas, tentando resolver qualquer inconsistência no sistema de arquivos causado por um desligamento incorreto. Você pode perder alguns arquivos que ainda não tivesse sido salvos no HD, mas a idéia é que a verificação coloque todo o resto em ordem.
Para partições em ReiserFS é usado o reiserfsck, para partições em Ext2 ou Ext3 é usado o fsck e para partições em XFS é usado o xfs_repair.
Mas, em alguns casos, o dano pode ser grande o suficiente para que não seja possível repará-lo automaticamente, fazendo com que o sistema simplesmente deixe de dar boot.
Não há motivo para pânico. Você pode dar boot pelo CD do Kurumin e usá-lo para reparar as partições danificadas.
Abra um terminal e vire root (su), lembre-se que ao rodar o Kurumin pelo CD você pode definir a senha de root usando o comando "sudo passwd". A partição a ser reparada precisa estar desmontada. Vou usar como exemplo a partição /dev/hda1.
Se for uma partição Ext2 ou Ext3, use o comando:
# fsck /dev/hda1
Ele vai começar a apontar os erros e perguntar se cada um deve ser corrigido. Normalmente você pode ir apenas respondendo "y" para tudo, mas caso existam dados realmente importantes na partição é melhor prestar mais atenção. Arquivos danificados ou fragmentos de arquivos que puderam ser recuperados vão para a pasta "lost+found" no diretório raiz da partição.
Numa partição ReiserFS, comece com o comando:
# reiserfsck --check /dev/hda1
Ele exibe um aviso:
Do you want to run this program?[N/Yes] (note need to type Yes if you do):
Ou seja, você precisa digitar "Yes" para continuar, caso apenas dê Enter ele aborta a operação.
Ele vai verificar toda a estrutura do sistema de arquivos e indicar os erros encontrados. O próximo passo é usar a opção "--fix-fixable":
# reiserfsck --fix-fixable /dev/hda1
Este segundo comando efetivamente corrige todos os erros simples, que possam ser corrigidos sem colocar em risco as demais estruturas do sistema de arquivos. Em 90% dos casos isto é suficiente.
Caso seja encontrado algum erro grave, ele vai abortar a operação. Estes erros mais graves podem ser corrigidos com o comando:
# reiserfsck --rebuild-tree /dev/hda1
Este comando vai reconstruir do zero todas as estruturas do sistema de arquivos, vasculhando todos os arquivos armazenados. Esta operação pode demorar bastante, de acordo com o tamanho e quantidade de arquivos na partição. Nunca interrompa a reconstrução, caso contrário você não vai conseguir acessar nada dentro da partição até que recomece e realmente termine a operação.
O --rebuild-tree vai realmente corrigir qualquer tipo de erro no sistema de arquivos. Ele só não vai resolver o problema caso realmente existe algum problema físico, como por exemplo um grande número de setores defeituosos no HD.
Finalmente, caso você esteja usando uma partição formatada em XFS, comece com o:
# xfs_check /dev/hda1
Ele vai indicar os problemas encontrados. Para realmente corrigi-los, rode o:
# xfs_repair /dev/hda1
Assim como no caso do reiserfsck, todo o processo é automático. Ao contrário do ext2, tanto o reiserfs quanto o XFS são sistemas de arquivos muito complexos, por isso qualquer intervenção manual só aumentaria a possibilidade de destruir tudo.
Mas, ambos incluem algumas opções avançadas, que podem ser especificadas no comando. Você pode dar uma olhada dentro dos manuais: "man reiserfsck" ou "man xfs_repair".
Gostou da dica? Conheça outros trabalhos do autor
- Livro Impresso: Linux Ferramentas Técnicas Carlos E. Morimoto. 256 páginas, R$ 27.
- Agenda de cursos presenciais em SP e RS
Fonte: http://www.dicas-l.com.br/print/20050621.html
Fatiamento de arquivos para transferência em links de baixa qualidade
Fatiamento de arquivos para transferência em links de baixa qualidade
Colaboração: Roberto Baronas
A transferência de grande quantidade de dados entre servidores UNIX distantes, servidos por links de telecomunicação de baixa qualidade às vezes é um problema que nos causa grandes dissabores, principalmente devido às frequentes interrupções que possam ocorrer.
No meu caso, uma solução caseira que resolveu em definitivo o problema de transferência de quatro arquivos de +-600Mb entre o Brasil e a Bolívia, num link de baixa velocidade foi a seguinte:
Usei o comando split conforme mostrado abaixo, para fatiar os arquivos de 600Mb em aproximadamente oito arquivos de 80Mb cada:
split -b 80m o92dk1.tar dk1
Esse comando, pegou o arquivo o92dk1.tar com aproximadamente 600Mb de tamanho e o quebrou em fatias com o tamanho máximo de 80Mb, no caso, oito fatias, prefixadas pelo string dk1.
O resultado do que ocorreu pode ser visto abaixo:
-rw-r--r-- 1 oracle dba 649144320 Feb 3 15:17 o92dk1.tar -rw-r--r-- 1 root sys 83886080 Feb 15 16:52 dk1aa -rw-r--r-- 1 root sys 83886080 Feb 15 16:52 dk1ab -rw-r--r-- 1 root sys 83886080 Feb 15 16:52 dk1ac -rw-r--r-- 1 root sys 83886080 Feb 15 16:52 dk1ad -rw-r--r-- 1 root sys 83886080 Feb 15 16:52 dk1ae -rw-r--r-- 1 root sys 83886080 Feb 15 16:53 dk1af -rw-r--r-- 1 root sys 83886080 Feb 15 16:53 dk1ag -rw-r--r-- 1 root sys 61941760 Feb 15 16:53 dk1ah
A restauração pôde ser feita via comando cat, da seguinte forma:
cat dk1aa dk1ab dk1ac dk1ad dk1ae dk1aaf dk1ag dk1ah > novo_arquivo
Assim, pudemos, transmitir as fatias, e em caso de queda de link, perderiamos somente a fatia que estava sendo transmitido no momento da queda. As fatias já transferidas estavam salvas.
Para testar a integridade dos arquivos, bastou utilizar o comando cksum no arquivo original o92dk1.tar e no arquivo de destino arquivo_novo. Os números do resultado devem ser os mesmos para ambos os arquivos. Abaixo temos um exemplo:
cksum o92dk1.tar 97395000 649144320 o92dk1.tar cksum arquivo_novo 97395000 649144320 arquivo_novo
O valor verificador encontrado foi o número 97395000 para os dois arquivos, o que provou a integridade dos mesmos.
Finalmente, temos um exemplo do script que foi utilizado no servidor de destino para efetuar a transferência dos arquivos:
ftp -n -i -v arcturus.ho.u2236.unilever.com << eod >>zz_ftp.log 2>&1 user usuario senha pwd lcd /diretorio_de_origem cd /diretorio_de_Destino get dk1aa get dk1ab get dk1ac get dk1ad get dk1ae get dk1af get dk1ag get dk1ah eod
Sistema Operacional utilizado: HP-UX 11i ou 11.11
Bem, espero que esse procedimento lhes possa ser útil. No meu caso, ajudou, e muito...
Roberto Baronas
Fonte: http://www.dicas-l.com.br/print/20050322.html
Instalando o Slackware via NFS ou FTP
Instalando o Slackware via NFS ou FTP
Colaboração: Ricardo Iramar dos Santos
Esta documentação tem o objetivo descrever os passos relativo da instalação do Slackware via NFS ou FTP. É indicado que você saiba fazer a instalação padrão do Slackware diretamente do CD. Para maiores informações sobre como instalar o Slackware detalhadamente visite Piter Punk's HomePage.
Quando escrevi esta documentação o Slackware estava na versão 9.1.0. O procedimento para versões anteriores e o current é o mesmo e provavelmente será identico para versões posteriores.
Na realidade desta documentação poderia ser escrito duas outras (NFS e FTP), porém como as mesmas possuem muitas coisas em comum resolvi colocar tudo em uma única documentação.
A instalação do Slackware via NFS ou FTP não tem muita dificuldade, o que existe é uma pegadinha que até hoje não vi escrito em nenhuma documentação.
Curioso para saber sobre a pegadinha? Leia a documentação por completo para não cair nela :^D
Pré-requisitos
- Disco do boot, utilize o mais adequado para o seu hardware.
- Disco 1 de instalação.
- Quatro disquetes de 3 1/2**.
- CD 1 de instalação do Slackware ou um mirror da árvore oficial do Slackware.
Pré-requisitos para instalação via NFS
Pré-requisitos para instalação via FTP
Preparando o Terreno
Primeiro vamos gerar os disquetes, utilize o comando abaixo para gerar o disco de boot:
ricardo@smith:~$ cat bare.i > /dev/fd0
Repita o comando acima para os demais disquetes conforme o seu método de instalação (NFS ou FTP).
Nesta documentação a máquina chamada smith será o servidor de onde as estações poderam instalar o Slackware via NFS ou FTP.
Para a origem da instalação temos três opções: diretamente do CD, mirror local ou mirror remoto (somente FTP). Se for usar diretamente do CD é necessário primeiro montá-lo, insira o cd no driver de CD-ROM e digite o seguinte comando como root:
ricardo@smith:~# mount /mnt/cdrom
Você pode copiar o conteúdo do CD para o HD local gerando um mirror local ou baixar de qualquer mirror oficial do Slackware como o http://slackware.at. Deste mirror você pode baixar via http, ftp ou rsync.
Preparando o Terreno para instalação via NFS
Execute o comando abaixo para inserir uma linha no arquivo /etc/exports:
ricardo@smith:~# echo **/mnt/cdrom/slackware *(ro,insecure,all_squash)** >> /etc/exports
Caso esteja usando um mirror local substitua no comando acima o diretório /mnt/cdrom/slackware pelo diretório /mirrordir/slackware-9.1/slackware do mirror local.
ATENÇÃO: Esta é a famosa pegadinha, se o diretório exportado pelo NFS não contiver os diretório de softwares series (A, AP, D, E, ... X, XAP e Y) a instalação não irá funcionar e o pior, não emitirá nenhum erro.
Com esta linha no exports qualquer usuário da rede poderá montar este diretório como somente leitura. Reinicie o NFS para atualizar com a nova configuração:
ricardo@smith:~# /etc/rc.d/rc.nfsd restart
Preparando o Terreno para instalação via FTP
Remova a linha ftp do arquivo /etc/ftpusers para ativar o servidor anonymous do Proftpd. Agora edite o arquivo /etc/proftpd.conf alterando a seguinte linha de <Anonymous ~ftp> para <Anonymous /mnt/cdrom>. Caso esteja usando um mirror local substitua o diretório /mnt/cdrom pelo diretório /mirrordir/slackware-9.1 do mirror local.
No caso do FTP não tem pegadinha, porque no momento da instalação é necessário digitar o diretório que contém os diretórios de softwares series.
Reinicie o servidor FTP para valer as novas configurações com o seguinte comando:
ricardo@smith:~# /etc/rc.d/rc.inetd restart
Instalando
Inicie o computador onde deseja instalar com o disco de boot (bare.i). Aguarde até que apareça o prompt boot:, esse prompt serve para passar parâmetros para o kernel do linux na inicialização. Se você não sabe que parâmetro passar ou não precise passar nenhum tecle ENTER.
Aguarde enquanto o kernel do linux é carregado. Quando aparecer VFS: Insert root floppy disk to be loaded to RAM disk and press ENTER remova o disco de boot e insira o primeiro disco de instalação (install.1) e tecle ENTER. Mais uma vez, aguarde enquanto o primeiro disco de instalação do Slackware é carregado em memória RAM.
Quando aparecer Insert install.2 floppy disk to be loaded into RAM disk and press ENTER remova o primeiro disco de instalação e insira o segundo (NFS: install.2 ou FTP: install-ftp.2) teclando ENTER em seguida.
Ao aparecer Enter 1 to select a keyboard map: se estiver utilizando um teclado US International (sem cedilha) tecle ENTER caso contrário tecle 1 e em seguida ENTER.
Escolha o mapa conforme o seu teclado, se não souber qual escolher e seu teclado possuir cedilha escolha a opção qwerty/br-abnt2.map e tecle ENTER. Na janela de título KEYBOARD TEST tecle 1 em ENTER em seguida.
Provavelmente irá aparecer a tela de login com slackware login: no final. Tecle root sem as aspas é claro e tecle ENTER. Apesar de simples este passo é MUITO importante, se você teclar algo diferente de root (minúsculo) terá graves problemas mais para frente.
root@slackware:/#
Esse é o prompt de instalação do Slackware. Agora você já pode particionar o seu disco da forma que achar melhor usando cfdisk ou fdisk. Não vou explicar isso aqui pois não é a intenção desta documentação.
Após ter particionado o seu disco remova o segundo disco de instalação e insira o disco de rede (NFS: network.dsk ou FTP: network-ftp.dsk). No prompt digite network e telcle ENTER. Ele irá pedir para inserir o disco de rede, como você já inseriu simplesmente tecle ENTER novamente. Agora estamos no prompt network> do disco de rede.
Este é um procedimento específico para a instalação via FTP, caso esteja instalando via NFS pule para o próximo parágrafo. Para futuramente montar a partição via ftpfs precisamos subir agora o módulo do ftpfs teclando F e ENTER.
Em muito dos casos (provavelmente o seu também) um simples ENTER irá detectar a sua placa de rede e subir o seu respectivo módulo, caso contrário mude para outro console carregue o módulo manualmente com o comando modprobe.
Se o módulo da placa de rede for carregado com sucesso tecle ENTER para desmountar o disco de rede e voltar ao prompt de instalação. Você pode usar o comando lsmod para ver se o módulo realmente foi carregado.
Este é um procedimento específico para a instalação via FTP, caso esteja instalando via NFS pule para o próximo parágrafo. Perceba que ao executar lsmod o módulo ftpfs também é listado, caso não apareça você deve carregar o disco de rede novamente para carregar conforme descrito acima.
No prompt digite o comando setup e tecle ENTER.
root@slackware:/# setup
Realmente a brincadeira só começa agora, mas como a intenção desta documentação não é explicar passo a passo toda a instalação do Slackware vamos pular direto para o passo SOURCE Select source media supondo que você já tenha efetuado os passos obrigatórios anteriores.
Se estiver instalando via NFS selecione a opção 3 Install from NFS (Network File System) e tecle ENTER. Caso contrário selecione a opção 4 Install from an FTP server e tecle ENTER.
Na próxima tela entre com um IP (ex. 192.168.1.21) para configurar a maquina na qual o Slackware esta sendo instalado.
Entre com a máscara de rede (netmask), o setup assume por padrão a máscara 255.255.255.0 a qual iremos adotar nesta documentação como exemplo.
Essa tela é exclusiva da instalação por ftp, caso esteja instalando via NFS pule para o próximo parágrafo. Responda Yes se você possuir um gateway em sua rede, caso contrário responda No e pule o próximo parágrafo. Caso o FTP Server de onde você irá instalar estiver na internet você é obrigado a configurar um gateway.
Agora é a vez do gateway (ex. 192.168.1.254), se o seu servidor onde se encotra os softwares series estiver em outra rede você deve configurar com um gateway que consiga rotear para a rede dele.
No caso de instalação via NFS este é o passo mais importante, o IP do NFS Server (ex. 192.168.1.2). Na próxima tela indique o diretório do NFS Server que contém os diretórios de softwares series conforme comentado anteriormente (ex. se estiver usando CD indique /mnt/cdrom/slackware, caso contrário o diretório correspondente no mirror.).
Este é um procedimento específico para a instalação via FTP, caso esteja instalando via NFS pule para o próximo parágrafo. Agora você precisa configurar o IP (ex. 192.168.1.2) do FTP Server e o diretório onde estão os softwares series. Se você configurou o diretório root do usuário anonymous como sendo /mnt/cdrom como indicado acima, você deve entrar com os seguintes dados anonymous:senha@192.168.1.2/slackware. Caso esteja utilizando um mirror altere o diretório após o IP do FTP Server apontando para o diretório onde se encontra os softwares series.
Em seguida o setup irá configurar sua placa de rede com os dados fornecidos anteriormente e configurar o gateway se você possuir algum.
Se estiver instalando via NFS o setup irá rodar também o rpc.portmap para poder montar o NFS e em seguida montar o NFS. E por último o setup irá listar a tabela de partições montadas para você verificar se o NFS foi montado corretamente. Caso o NFS tenha montado corretamente tecle n e ENTER para continuar com a instalação ou y para revisar suas configurações de rede.
Caso contrário, instalação via FTP, o setup irá listar a tabela de partições montadas para você verificar se a partição foi montada corretamente utilizando o ftpfs. Caso a partição tenha sido montado corretamente utilizando o ftpfs tecle n e ENTER para continuar com a instalação ou y para revisar suas configurações de rede.
A próxima tela deve aparecer os softwares series para que você selecione os que deseja instalar, se não aparecer provavelmente você errou em algum passo acima.
No caso de ter errado algo você pode selecionar Cancel teclando TAB e ENTER para cancelar a instalação e em seguida voltar a selecionar a opção SOURCE Select source media para reiniciar as configurações.
Se tudo estiver correto até aqui, agora é só seguir com o procedimento padrão de instalação do Slackware como se fosse diretamente de um CD.
Conclusão
O mito que a instalação via rede do Slackware é complicada foi completamente desvendada.
Em testes práticos tive menos problemas com a instalação via FTP do que via NFS. O interessante do NFS é fornecer acesso ao diretório patches para futuras atualizações do sistema em rede otimizando o espaço em disco em diversas máquinas.
Referências
Dúvidas, críticas e sugestões devem ser enviadas para agent.smith@globo.com.
Quer saber mais um pouco sobre o autor desta documentação? Acesse minha home page em http://www.agentsmith.kit.net.
Fonte: http://www.dicas-l.com.br/print/20050716.html
Formas de if
Formas de if
Colaboração Júlio Cezar Neves//**
O Júlio Cezar, autor do melhor livro de programação shell que conheço :-) me enviou alguns comentários a respeito de uma dica que escrevi com base em uma palestra dele que assisti no IV Fórum Internacional de Software Livre, em Porto Alegre.
O livro de Programação Shell do Júlio pode ser encontrado em http://www.brasport.com.br/livro.asp?Cod=85-7452-118-3
Gostaria de agradecer ao Júlio por compartilhar seus grandes conhecimentos e seu eterno bom humor conosco :-)
A seguir, a mensagem do Júlio:
Formas de if
Júlio Cezar Neves
Como eu havia te prometido ai vai uma série de formas de executar a mesma tarefa:
- Forma 1 -
#!/bin/bash if cd dir 2> /dev/null then >a; >b; >c ls -l else mkdir dir cd dir >a; >b; >c ls -l fi pwd
Observações da Forma 1:
Neste exemplo, tirei partido da característica do comando if que diferentemente dos ifs das linguagens tradicionais não testa uma condição, mas sim a instrução a ele associada, isto é, caso o cd seja bem sucedido (e o será se já existir o diretório dir), a seqüência do programa será pelo then, caso contrário pelo else.
Repare que neste script não usei o touch, usei o redirecionamento da saída padrão (>) para criar os arquivos (a, b e c) sem onerar o kernel, ganhando na execução. O ponto-e-vírgula serve para colocar mais de um comando na mesma linha.
O pwd ao final foi colocado para mostrar que o ls foi feito de dentro do diretório dir, pois qdo termina a execução do script (que estava sendo executado em um sub-shell) vc estará novamente no diretório do shell pai. Se vc executar somente do if ao fi no prompt de comando, ele permanecerá em dir pq não foi criado um sub-shell.
- Forma 2 -
#!/bin/bash if test -d dir then >a; >b; >c ls -l else mkdir dir cd dir >a; >b; >c ls -l fi pwd
Observações da Forma 2:
Neste caso, utilizei o cmd test que serve para testar condições. Além das condições tradicionais (maior, menor, igual, diferente, maior-ou-igual, ...) este cmd também possui diversas opções para testar arquivos e diretórios (neste caso, a opção -d foi usada para verificar se havia um diretório dir definido).
Observe que o if continua testando a execução de uma instrução, no caso o test.
Como esta construção é muito feia e xquisita, foi implementado um alias para o cmd test, que consiste em colocar o escopo da instrução entre um par de colchetes, embelezando e tornando a leitura mais fácil. Assim sendo, o script abaixo é exatamente igual ao anterior, e por isso não será chamado de forma 3.
#!/bin/bash if [ -d dir ] then >a; >b; >c ls -l else mkdir dir cd dir >a; >b; >c ls -l fi pwd
- Forma 3 -
#!/bin/bash cd dir 2> /dev/null || { mkdir dir cd dir } >a; >b; >c ls -l pwd
==Observações da Forma 3:==
Neste caso uma construção maluca! Vejam só a criatividade que o shell permite! O conector || significa um ou lógico (o e lógico é &&), então como sabemos que verdadeiro ou qualquer coisa (falso, verdadeiro) resultará em verdadeiro, a otimização do shell qdo encontra verdadeiro, não executa o que segue o ou. Ao contrário, se o primeiro membro for falso o segundo será executado. Desta forma, caso não haja o diretório dir (o cd dir resultará falso), o conector || fará com que o bloco de programa entre as chaves (<>) seja executado.
Fonte: http://www.dicas-l.com.br/print/20030701.html
Verificação dos argumentos em shell scripts
Verificação dos argumentos em shell scripts
Colaboração: Rubens Queiroz de Almeida
É fundamental que todo shell script verifique, antes de realizar qualquer ação, que o número correto de argumentos foi fornecido por quem invoca o programa:
#!/bin/sh if [ $# -ne 3 ]; then echo 1>&2 Sintaxe: $0 a b c exit 999 fi
O script acima requer três argumentos que, se não forem fornecidos, impedem a execução do programa e seta o código de retorno com o valor 999. Normalmente um código de retorno diferente de zero indica a ocorrência de um erro.
Outro exemplo, o programa tiraacento, já veiculado nesta lista:
#! /bin/sh MACROS=/home/queiroz/bin infile=$1 outfile=$2 # Neste ponto verifica-se se o número de argumentos fornecido # foi igual a dois. Caso contrário, é escrito na tela uma mensagem # indicando a sintaxe correta, atribuindo-se o valor 1 ao código de # saída if [ $# -ne 2 ]; then echo 1>&2 Sintaxe: $0 arquivo_entrada arquivo_saida exit 1 # Caso o número de argumentos esteja correto, executa-se então # o programa else if [ -f $infile ]; then # A função deste if é verificar se o arquivo de entrada existe # Caso exista, então é executado o comando, caso contrário, # o processamento é encerrado com uma mensagem de erro e ao código # de saída é atribuído o valor 1. sed -f $MACROS/tiraacento.sed $infile > $outfile else # Nunca se esqueça do aviso de erro. Caso contrário o usuário # do programa pode pensar que tudo deu certo. echo "$infile não existe!!! " exit 1 fi fi
Complemento à dica sobre Eudora
Colaboração de Luis Filipe M. Figueira (<filipe (a) eco unicamp br>)
Suponhamos que eu tenha mais de 100 usuários para usarem o Eudora em uma mesma máquina, como fazer?
Passei por esse problema aqui, pois tenho varias salas de usuarios e resolvi da seguinte forma.
Crie o Icone no Win com o seguinte comando: Eudora a:
Para isso você precisará colocar um disquete no drive antes da execução.
Esse disquete irá conter os arquivos attach, as msgs e os dados pessoais....
Dica Humorística
KNOW YOUR UNIX SYSTEM ADMINISTRATOR-- A FIELD GUIDE
There are four major species of Unix sysad:
1) The TECHNICAL THUG. Usually a systems programmer who has been forced into system administration; writes scripts in a polyglot of the Bourne shell, sed, C, awk, perl, and APL.
2) The ADMINISTRATIVE FASCIST. Usually a retentive drone (or rarely, a harridan ex-secretary) who has been forced into system administration.
3) The MANIAC. Usually an aging cracker who discovered that neither the Mossad nor Cuba are willing to pay a living wage for computer espionage. Fell into system administration; occasionally approaches major competitors with indesp schemes.
4) The IDIOT. Usually a cretin, morpohodite, or old COBOL programmer selected to be the system administrator by a committee of cretins, morphodites, and old COBOL programmers.
Fonte: http://www.dicas-l.com.br/print/19970528.html
Exportando Banco de Dados DBF para MySQL
Exportando Banco de Dados DBF para MySQL
Colaboração: André Marques Saunite
Algum tempo atrás comecei a trabalhar em uma pequena empresa que utilizava um programa de gerenciamento feito em Clipper, com banco de dados FoxBase, rodando num servidor linux, o sistema era muito bom, porém havia a necessidade de se alterar algumas coisas, principalmente na parte de geração de relatórios.
Como não tinha acesso ao código fonte, e a documentação sobre FoxBase é escassa, resolvi tentar exportar os dados para MySQL, depois de algumas perguntas para Ele (www.google.com <http://www.google.com>), achei um software livre para linux que fazia essa exportação ( http://www.anubisnet.de/products/dbf), efetuei a instalação:
tar xfvz dbf-<versao>.tar.gz cd dbf-<versao> make su make install
Exportei o dbf para um arquivo SQL sem problemas:
dbf --sql <arquivo-destino.sql> <arquivo-origem.dbf>
Porem na hora de importar o dado para mysql:
mysql -u root -p <senha> CREATE TABLE teste; USE teste; source <arquivo.sql>
Vários registros da tabela apresentaram erros ao tentar passar para o MySQL, analisando melhor os arquivos gerados pelo programa, percebi que algumas das linhas inseridas tinham erros de sintaxe que o MySQL não aceitava, então desenvolvi um pequeno script que (pelo menos no meu caso) consertou 100% das tabelas que não foram exportadas corretamente pelo programa.
Esse script lê a tabela passada como argumento, utiliza o dbf para importar os dados e resulta num arquivo .sql que pode ser facilmente importado pelo MySQL, segue abaixo o script:
# # Descrição: Importa tabelas do banco de dados .DBF para .sql # Dependencia: dbf (http://www.anubisnet.de/products/dbf) # Nome: /usr/bin/dbf2sql # # Autor: André Marques Saunite # e-mail: saunite [a] gmail dot com # # Última atualização: 04/08/2005 # # Coloque aqui os diretórios corretos (sem "/" no final): # Caminho onde serão copiados os arquivos .sql: DBF2SQL_DIR='/home/dbf2sql' # Caminho temporária que será criada e apagada: DBF2SQL_TEMP_DIR='/home/dbf2sql/tmp' # Caminho para o executavel do dbf DBF_DIR='/usr/local/bin' # DATABASE a ser utilizado DATABASE='estoque' if ! [ $# -lt 2 ]; then mkdir $DBF2SQL_TEMP_DIR NAME=$2; DBF=$1; rm $DBF_DIR/$NAME.sql -rf $DBF_DIR/dbf --sql $DBF2SQL_TEMP_DIR/dbf2sql.SQL $DBF cat $DBF2SQL_TEMP_DIR/dbf2sql.SQL | grep -v "^$" | grep -v "^'" | grep -v "($" |grep -v "^--" | grep -v "^drop" > $DBF2SQL_TEMP_DIR/dbf2sql.NOCREATESQL grep "CREATE TABLE" $DBF2SQL_TEMP_DIR/dbf2sql.SQL > $DBF2SQL_TEMP_DIR/dbf2sql.CREATESQL cat $DBF2SQL_TEMP_DIR/dbf2sql.CREATESQL $DBF2SQL_TEMP_DIR/dbf2sql.NOCREATESQL > $DBF2SQL_TEMP_DIR/dbf2sql.CLEANSQL $DBF_DIR/dbf --csv $DBF2SQL_TEMP_DIR/dbf2sql.CSV $DBF LINHAS=`cat $DBF2SQL_TEMP_DIR/dbf2sql.CSV | awk 'END'` LINHAS=`expr $LINHAS - 1` tail -n $LINHAS $DBF2SQL_TEMP_DIR/dbf2sql.CSV > $DBF2SQL_TEMP_DIR/dbf2sql.CSVLINES cat $DBF2SQL_TEMP_DIR/dbf2sql.CSVLINES | sed s/^/"INSERT INTO $NAME VALUES ("/g | sed s/$/");"/g | sed s/",);"/","");"/g > $DBF2SQL_TEMP_DIR/dbf2sql.CLEANCSV cat $DBF2SQL_TEMP_DIR/dbf2sql.CLEANSQL $DBF2SQL_TEMP_DIR/dbf2sql.CLEANCSV > $DBF2SQL_TEMP_DIR/dbf2sql.JOIN REPLACE=`echo $DBF2SQL_TEMP_DIR | sed s/\//\\\\\//g` cat $DBF2SQL_TEMP_DIR/dbf2sql.JOIN | sed s/",,"/","","/g | sed s/",,"/","","/g | sed s/"$REPLACE/dbf2sql"/$NAME/g | sed s/"\\"/"\\\\"/g | sed s/"(#"/"("/g | sed s/"~"/"_"/g > $DBF2SQL_TEMP_DIR/dbf2sql.BODY echo "USE $DATABASE;" > $DBF2SQL_TEMP_DIR/dbf2sql.CAB # Se o script for atualizar automaticamente o MySQL (comentário abaixo) e ainda não existir a tabela criada, comente a linha abaixo; echo "DROP TABLE $NAME;" >> $DBF2SQL_TEMP_DIR/dbf2sql.CAB cat $DBF2SQL_TEMP_DIR/dbf2sql.CAB $DBF2SQL_TEMP_DIR/dbf2sql.BODY > $DBF2SQL_DIR/$NAME.sql # Caso queira que o script importe automaticamente a tabela para o MySQL descomente a linha abaixo # mysql --user=<usuário> --password=<senha> < $DBF2SQL_DIR/$NAME.sql else echo "Uso: $0 <arquivo-dbf> <nome-tabela>" fi rm $DBF2SQL_TEMP_DIR -rf
Caso seja necessária a importação de vários arquivos de uma vez pode-se usar o seguinte script, que converterá todos os arquivos .DBF da pasta atual para uma pasta SQL que será criada:
# # Descrição: Script de apoio para dbf2sql # Dependencia: dbf2sql, dbf (http://www.anubisnet.de/products/dbf) # Nome: /usr/bin/all2sql # # Autor: André Marques Saunite # e-mail: saunite [a] gmail dot com # # Última atualização: 04/08/2005 # #!/bin/bash echo "Criando pasta SQL" mkdir SQL for i in `ls *.DBF`; do NOME=`echo "$i" | sed s/".DBF"/""/` echo "Transformando Arquivo $i em ./SQL/$i.sql " dbf2sql $i $NOME done echo "Movendo todos os arquivos .sql para ./SQL" mv *.sql SQL
Esses pequenos scripts me ajudaram muito, o único problema que encontrei foi que o programa de conversão usado não tem suporte a tabelas .dbf que utilizam o campo memo, como no meu caso as tabelas desse tipo não eram importantes, consegui driblar esse problema.
Algumas das utilidades interessantes do programa de exportação de dbfs utilizado:
Exporta o banco de dados para MySQL
dbf --sql <arquivo-destino> <arquivo-origem>
Exporta o Banco de Dados para um Arquivo CSV (Comma Separated Values)
dbf --csv <arquivo-destino> <arquivo-origem>
Simplesmente mostra o conteúdo da tabela
dbf --view-info <arquiv.dbf>
Fonte: http://www.dicas-l.com.br/print/20051013.html
Implementando soluções com o OpenVPN
Implementando soluções com o OpenVPN
Colaboração: Tiago Cruz
VPN significa Virtual Private Network, usada amplamente para fazer um túnel seguro entre duas redes distantes, separadas pela internet. Os dados são criptografados antes de entrar no túnel e apenas a outra ponta conhece a chave para descriptografar o mesmo, criando um canal de comunicação relativamente seguro.
Este documento visa abranger os principais problemas de implementação de uma VPN, assim como suas soluções.
Porque usar PPTP
O PPTP (Point-to-Point Tunneling Protocol) é uma implementação de VPN baseado no protocolo GRE e na tecnologia PPTP. Seu funcionamento é semelhante ao de uma conexão dial-up: ele "disca" para um host conhecido, troca chaves através do protocolo GRE e conecta uma interface virtual (ppp) por onde a comunicação dentro do túnel ocorre. Para estabelecer a conexão é necessária a autenticação de um usuário, podendo ser local ou um já pré-existente em uma base LDAP como o Active Directory.
Ele possui a vantagem de ter sido "adotado" pela Microsoft, portanto funciona nativamente desde o Windows 95 até o atual Windows XP sem precisar instalar nada no cliente. Seria uma solução interessante: O cliente remoto com um notebook poderia conectar à nossa rede de uma forma segura, passando pelo firewall em Linux/ BSD e autenticando em nossa rede usando a mesma senha da rede local. Seria realmente bem bacana se não fosse as desvantagens do PPTP.
Porque não usar PPTP
Ao mesmo tempo que é uma vantagem ter um protocolo mantido pela Microsoft, é também uma desvantagem devido a falta de segurança da empresa citada e seus produtos. Segundo o Marcolino Alexandre, "O protocolo PPTP possui uma série de falhas exploradas por hackers que possibilitam a invasão ou a indisponibilidade de servidores Windows. Tanto o projeto POPTOP como o MPD que fazem o trabalho de servidor PPTP para Linux e FreeBSD respectivamente, não são vulnerável à ataques de exploits para Windows, apesar do protocolo ainda ser vulnerável a indisponibilidade."
Mas o problema mais grave que eu percebi durante a implementação do PPTP é este descrito pelo Gleb Smirnoff: //"Masquarading GRE protocol, which is used by PPTP as transport, isn't simple. Not all NATs can do this. If you are going to server a lot of clients connecting from random places in the world, then you will face this problem time to time."//
Portanto, se algum dia seu cliente com o notebook estiver em algum hotel, aeroporto ou qualquer lugar do mundo conectado à Internet atras de um NAT de roteador, ele não conseguirá se conectar a sua rede. Configurar um firewall para rotear o protocolo GRE é extremamente trabalhoso, incluindo passos como a recompilação do kernel no Linux. Fora o fato de que alguns roteadores "encaixados" simplesmente não roteiam e ponto final. E o trabalho deve ser feito no roteador onde o cliente está, e não do seu lado, tornando-se impraticável pedir para que cada sysadmin faça isso em seu firewall antes que seu cliente precise de tal recurso.
Para ler mais sobre esta solução, favor consultar o artigo anterior chamado Soluções de VPN integrando Linux, FreeBSD e Windows.
Sobre o OpenVPN
O OpenVPN usa criptografia de chaves ao invés de usuário e senha para fechar um túnel de VPN. Segundo o Luiz Antônio Filho, ele "simplesmente pega a informação que ele precisa mandar para a outra ponta, criptografa ela, e manda pela internet por um pacote UDP. A grande vantagem, é que ele não tem muitos problemas para passar por firewalls, e por roteadores que fazem NAT."
Atualmente, o OpenVPN roda nas seguintes plataformas: Linux, Windows 2000/XP ou superior, OpenBSD, FreeBSD, NetBSD, Mac OS X, e Solaris. É, por assim dizer, um projeto Open Source licenciado pela GPL.
1. Instalação
A parte da instalação está bem documentada no site oficial do projeto e traduzida para o Português do Brasil aqui.
Você pode encontrar pacotes pré-compilados para a maioria das distribuições Linux, ou ainda instala-lo através do /usr/ports/security/openvpn do FreeBSD. Se você preferir compilar "na unha" certifique-se de ter as bibliotecas de desenvolvimento do OpenSSL (algo como openssl-dev) instaladas no seu micro. O dispositivo TUN/TAP deverá estar compilado no seu kernel também, caso sua distribuição não o traga como padrão (está presente desde o kernel 2.4.7).
1.1. Gerando os Cerificados e Chaves RSA
Antigamente, você tinha que gerar as chaves CA manualmente, assina-las, criar as chaves dos clientes e gerar os parâmetros Diffie-Hellman (utilizado para a troca das chaves criptografadas durante a execução). Eram uma série de comando complicados de decorar, mas agora o OpenVPN vem com uma série de scripts chamados easy-rsa junto em seu pacote, para tornar esta tarefa mais simples.
Você pode encontrar estes scripts em /usr/local/share/doc/openvpn/easy-rsa e é encorajado a copia-los para seu diretório de configuração do OpenVPN (algo como /etc/openvpn ou /usr/local/etc/openvpn).
Ja dentro do diretório apropriado, você deve editar o arquivo vars e personalizar suas informações. Após isso, pode seguir com os comandos:
# . ./vars # ./clean-all # ./build-ca
O último comando, buil-ca irá gerar seu Certificado de Autoridade (CA) usando as bibliotecas do OpenSSL. Os parâmetros serão lidos do arquivo previamente configurado (vars) com excessão do parâmetro Common Name, onde você pode colocar algo como "CA-OpenVPN".
1.2. Gerando o certificado e a chave para o servidor
Use o comando abaixo, respondendo a questão "Common Name" como anteriormente (você pode usar "server" neste caso). Deverá tomar cuidado também em responder "y" quando solicitado em "Sign the certificate? [y/n]".
# ./build-key-server server
1.3. Gerando os certificados e chaves para os clientes
Os comandos abaixos deverão ser utilizados para gerar a chave dos clientes, e você deve colocar este mesmo nome quando solicitado no campo Common Name.
# ./build-key mario # ./build-key maria # ./build-key renata
Importante: Cada cliente deverá ter um Common Name único!
Para aumentar ainda mais a segurança, recomendo usar o comando build-key-pass para que as chaves seram geradas com uma senha. Assim, o cliente deverá ter o certificado e deverá saber a senha para acessar sua rede.
1.4. Gerando os parâmetros Diffie Hellman
Os parâmetros do Diffie Hellman deverão ser gerados da seguinte forma:
# ./build-dh
Nota: Isso pode demorar um pouco.
1.5. Chaves geradas
No subdiretório chamado "keys" você encontrará os arquivos gerados. Segue uma tabela falando sobre os principais arquivos:
| Arquivo | Necessário por | Finalidade | Secreto |
|---|---|---|---|
| ca.crt | servidor + todos clientes | Certificado CA raiz | NÃO |
| ca.key | máquina que assina as chaves | Chave CA raiz | SIM |
| dh |
somente servidor | Parâmetros Diffie Hellman | NÃO |
| server.crt | somente servidor | Certificado do Servidor | NÃO |
| server.key | somente servidor | Chave do Servidor | SIM |
| mario.crt | somente mario | Certificado do mario | NÃO |
| mario.key | somente mario | Chave do mario | SIM |
| maria.crt | somente maria | Certificado da maria | NÃO |
| maria.key | somente maria | Chave da maria | SIM |
| renata.crt | somente renata | Certificado da renata | NÃO |
| renata.key | somente renata | Chave do renata | SIM |
Agora você deverá copiar os arquivos para o diretório de configuração dos clientes ou servidores. A cópia deverá ser feita preferencialmente usando uma forma segura, pois a mesma garante a conexão do mesmo com a rede.
No servidor, copie as chaves para /etc/openvpn (Linux) ou /usr/local/etc/openvbd (FreeBSD). Nos clientes Windows, copie para "%programfiles%"/OpenVPN/Config.
1.6. Bloqueando clientes indesejados
Você pode ainda querer tira o o acesso de determinado cliente. Você pode fazer isso de pelo menos duas maneiras:
1.6.1. Criando uma rota inválida
Coloque essa linha no server.conf:
client-config-dir ccd
Crie o diretório ccd e dentro dele um arquivo como esse:
# cat ccd/mario ifconfig-push 10.8.2.5 10.8.2.6
Assim, quando o Sr. Mario conectar ele irá pegar uma rota inválida e não vai conseguir acessar nossa rede. Uma maneira mais elegante de fazer isso é descrito abaixo:
1.6.2. Revogando o certificado
Use o script contido no easy-rsa:
# . vars # ./revoke-full mario
E adicione essa linha no server.conf:
crl-verify crl.pem
Assim, o cliente irá falhar logo no "handshake". Apenas cerifique-se de copiar o arquivo crl.pem gerado dentro da pasta keys para o diretório de configuração do servidor!
1.7. Configurando o servidor
O arquivo openvpn.conf poderá ficar assim:
# IP e porta do servidor local 200.222.222.222 port 1194 proto udp dev tun # Certificados gerados ca ca.crt cert server.crt key server.key dh dh1024.pem # Criar no diretorio cdd/cliente a configuracao # dele - ou uma invalida para trava-lo :) client-config-dir ccd # Rede que os clientes irão "pegar" server 10.8.0.0 255.255.255.0 push "route 192.168.0.0 255.255.252.0" push "dhcp-option DNS 192.168.0.19" # Neste arquivo serão guardados os IPs dos clientes # para conectarem com o mesmo IP da proxima vez ifconfig-pool-persist ipp.txt client-to-client # Ative para permitir dois clientes com o mesmo # certificado - não recomendável ;duplicate-cn keepalive 10 120 # Compressão, privilégios do cliente comp-lzo max-clients 15 user nobody group nobody # Logs e etc persist-key persist-tun status /var/log/openvpn-status.log log /var/log/openvpn.log log-append /var/log/openvpn.log verb 6
Ao iniciar, fique atento aos logs para ver se está tudo certo.
1.8. Configurando um cliente Windows
1.8.1. Instalação
A instalação é bem simples: Basta instalar o arquivo openvpn-2.0.5-gui-1.0.3-install.exe e copiar os arquivos para sua pasta de configuração. Para simplificar mais ainda, escrevemos um arquivo de lote para facilitar a instalação em clientes remotos. Note que permissão de administrador se faz necessário para instalar este software.
@echo off REM OpenVPN Installer REM by Tiago Cruz REM Julio Soares REM 20 Jan 2006 @echo. echo Wait, starting instalation of OpenVPN... echo Always click in 'Next', 'Install', 'Continue Anyway' and 'Finish' start /wait bin/openvpn-2.0.5-gui-1.0.3-install.exe @echo. echo Wait, copying files... @echo. copy conf*.* "%programfiles%"OpenVPNConfig @echo. echo Done. You can access the VPN now. @echo. pause @echo.
Preparamos ainda um "pacote" zipado com arquivo a ser instalado dentro do diretório "bin" e as configurações no "config". Assim o usuário final apenas precisa descompactar o arquivo zip e clicar no install.bat 8-)
1.8.2. Configuração
Um exemplo de configuração de um cliente Windows:
client dev tun proto udp remote 200.222.222.222 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert renata.crt key renata.key ns-cert-type server comp-lzo verb 3
Você deve ser capaz de conectar ao seu servidor, pinga-lo através do IP 10.8.0.1 e sua rede 192.168.0.0/22 também através da rota criada no arquivo de configuração do servidor, caso ele seja o gateway de sua rede.
Consulte o howto oficial para maiores detalhes sobre os assuntos aqui abortados.
2. Dicas avançadas
2.1. VPN em um host não gateway
Se você montar seu servidor de VPN em um host que não é o gateway da internet (por exeplo no 192.168.0.253) você precisará criar uma rota em seu gateway pelo seguinte motivo:
Quando o cliente conectado via VPN com o IP 10.8.0.1 envia um pacote de ICMP para o host 192.168.0.11. O pacote chega até o host, mas ele não tem rota para a rede 10.8.0.0/24 portanto ele devolve o pacote para o gateway da rede. Se este gateway não tiver rota também, o pacote será descartado. Portanto, é necessário que o gateway envie os pacotes para o servidor de VPN.
Em um servidor FreeBSD a rota ficaria assim:
route delete 10.8.0.0 &> /dev/null route add -net 10.8.0.0 -netmask 255.255.255.0 192.168.0.253 &>/dev/null
Em um servidor Linux seria assim:
route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.0.253 eth0
2.2. Conflito: redes iguais
Se a rede de sua empresa é 192.168.0.0/24 e a do cliente também, ao fechar a VPN o cliente irá ficar com duas rotas para o mesmo destino. No caso do Windows, o pacote não irá para uma rede e nem para a outra :-)
Será necessário remapear a rede de destino para "enganarmos" o sistema operacioal, fazendo parecer que temos duas redes distintas: a do cliente 192.168.0.0/24 e a do servidor que também é 192.168.0.0/24 ficará como sendo 192.168.1.0/24.
Utilizando o iptables/ netfilter do Linux:
iptables -t nat -A PREROUTING -d 192.168.0.0/24 -j NETMAP --to 192.168.1.0/24
Utilizando o PF do Free/OpenBSD:
vpn = "tun0" ... set loginterface $vpn2 ... binat on $vpn from 192.168.0.0/24 to any -> 192.168.1.0/24 ... pass in on $vpn from any to any keep state pass out on $vpn from any to any keep state
Assim, para o cliente via VPN alcançar o host 192.168.0.32, ele deverá procurar por 192.168.1.32.
Outra coisa, no arquivo de configuração do OpenVPN deverá conter a rota adequada:
push "route 192.168.1.0 255.255.255.0"
No lugar da rota antiga:
push "route 192.168.0.0 255.255.255.0"
Você verá algo assim no tcpdump:
54. 224700 rule 26/0(match): pass in on tun0: 10.8.0.6 > 192.168.0.32: ICMP echo request, id 1024, seq 13568, length 40
Você pode encontrar mais informações neste artigo chamando Dirty NAT Tricks, escrito pelo Nick Martin.
2.3. Solucionando problemas
Caso você tenha algum problema durante a operação, será necessário acompanhar os logs do aplicativos, bem como utilizar a ferramenta tcpdump para ver o que está acontecendo com os pacotes. Os logs do firewall também podem ajudar neste caso, assim como o comando netstat -nr para acompanhar se os pacotes estão dando match nas rotas propostas.
Você pode ainda contar com a ajuda de algumas listas de discussão, como as listadas abaixo:
- https://lists.sourceforge.net/lists/listinfo/openvpn-users
- http://lists.freebsd.org/mailman/listinfo/freebsd-net
- http://lists.freebsd.org/mailman/listinfo/freebsd-pf
- http://lists.netfilter.org/mailman/listinfo/netfilter/
Fonte: http://www.dicas-l.com.br/print/20060316.html
Instalação de múltiplos sistemas operacionais em um mesmo equipamento
Instalação de múltiplos sistemas operacionais em um mesmo equipamento
Por Sergio Kneizl, 1997.
Este texto pode ser livremente distribuido por meios eletronicos, desde que se mantenha integral e sem alteracoes (incluindo o nome do autor). Qualquer outra situacao, incluindo publicacao impressa ou traducoes, devem ser autorizadas pelo autor por escrito.
Sugestoes e comentarios podem ser enviados para o endereco <sergiok (a) ax ibase org br>.
Versao: Jan/1997.
Instalacao de DOS, Windows 95 e NT, OS/2 e Linux em uma mesma maquina
A ideia e' usar o menu de boot que vem com o OS/2, o Boot Manager (Gerenciador de Inicializacao), juntamente com o menu de boot que vem com o NT. O Linux sera' carregado a partir do DOS, porem ele nao usara' o DOS, assumindo o controle da maquina.
Eu usei as seguintes versoes:
- DOS 5.00
- Windows 95 (4.00.950 em portugues)
- Windows NT Server 3.51 em ingles (veio em uma PC Magazine)
- OS/2 Warp 3.0 (Ou os dois primeiros discos de instalacao)
- Linux Slackware 2.3 em CD, kernel 1.2.8
Atencao! (depois nao fale que eu nao avisei...)
- Sera' necessario reparticionar o disco rigido, o que significa perder todos os arquivos.
- A forma com que o Windows 95 salva os nomes longos de arquivo (mais de 8_letras.3_letras) nao e' compativel com a forma do OS/2 (em FAT). O melhor e' nao misturar em um mesmo drive os dois sistemas. A forma do OS/2 e' menos invasiva (eles sao gravados em um arquivo a parte) do que a do Windows 95 (varias entradas marcadas como label de disco e invisiveis). Em um disco que tem arquivos gravados pelo Windows 95, deve-se usar apenas o scandisk e o Norton Utilities feitos para o 95, senao voce podera' perder todos os nomes longos. Como o Linux grava diretamente no disco e supoe a estrutura antiga, sem nomes longos, e' melhor nao gravar nomes longos do 95 no direto- rio dele. Seguindo os passos abaixo, o disco do Linux nao estara' visivel para o Windows 95.
- Nao instale programas compressores de disco. Eles trocam alguma perda de desempenho por mais espaco de disco. Depois, em sistemas realmente multitarefa, a perda e' mais notada do que em DOS (estes compressores aproveitam o tempo que o DOS ia desperdicar, esperando os dados chegarem do disco, para descomprimir. Sistemas de verdade aproveitam esse tempo para rodar outros programas). Mas se nao quiser seguir o meu conselho, nao comprima o drive onde os sistemas estao, separe uma particao para isso. Existe uma versao do Stacker para DOS e OS/2, so' que para instalar no OS/2 tem que fazer boot pelo DOS (sem comentarios) e por causa disso o drive do OS/2 deve estar em FAT (a nao ser que voce instale ele editando os arquivos de sistema...)
- Recomendo a instalacao do OS/2 em uma particao separada, formatada em HPFS. O HPFS e' um sistema de arquivos diferente e mais rapido. E o aumento de velocidade e' maior com o proprio OS/2. So' que um drive com o HPFS nao pode ser acessado por outros sistemas, entao neles o drive nao aparece. Por causa disso, o drive com HPFS deve ser o ultimo (evita que drives mudem de letra quando voce carregar um outro sistema). Porem, o HPFS deve ser usado apenas para maquinas com mais de 8 MB de memoria. Obs.: O HPFS e' reconhecido pelo NT 3.51, mas parece que o suporte a ele foi removido do NT 4.0 (o OS/2 e' do concorrente...).
- O Windows NT tambem tem um sistema de arquivos proprio, o NTFS, que tambem pode ser instalado. Assim como o HPFS do OS/2, o drive so' podera' ser acessado pelo NT e deve ser o ultimo. Eu nao tentei usar.
- Quando formatamos um drive pelo DOS ou pelo Windows 95 (estrutura FAT), o espaco livre e' dividido em pedacos fixos chamados clusters. Conforme um arquivo vai aumentando de tamanho, o DOS vai associando clusters ao arquivo. Isso quer dizer, por exemplo, que um arquivo de um byte gastara' um cluster inteiro. O tamanho do cluster depende do tamanho total do drive. Veja a seguinte tabela:
Tamanho do disco Tamanho do Cluster 1GB < t 32K ou mais 512MB < t <= 1GB 16K 256MB < t <= 512MB 8K 128MB < t <= 256MB 4K t <= 128MB 2K ou menos
Quer dizer, um disco de 1.2GB com 9000 arquivos de um byte ocupa 9000 * 32K, ou 281 MB ! Isso e' 23 por cento do disco todo! Detalhe: a primeira instalacao que fiz do Linux tinha 9000 arquivos ... Para simplicidade do texto, eu estou ignorando isso aqui. Se quiser, divida o espaco livre em varias particoes de 512 MB. No HPFS do OS/2, o tamanho do "cluster" e' sempre 0.5K. - Cada disco rigido fisico tem quatro "slots" para particoes, sendo que todas as particoes logicas estendidas ocupam um unico "slot". O menu de boot do OS/2 gasta um destes "slots". Assim, em um mesmo disco rigido, nao sera' possivel criar mais particoes primarias alem das que eu explico aqui. Em um outro disco rigido, tambem podemos instalar particoes primarias e particoes logicas. A que ja' vem instalada de fabrica e' sempre uma particao primaria. As letras dos drives sao atribuidas da seguinte forma: primeiro todas as primarias de cada disco rigido, depois as logicas de todos os discos rigidos. Assim, se instalarmos depois um novo disco rigido, como a particao dele e' primaria, ele vai aparecer no meio dos drives existentes, e varios deles vao mudar de letra. Isso pode ser resolvido se apagarmos a particao primaria do disco novo e recriarmos ela como uma particao logica.
- Por que estou tentando evitar que drives mudem de letra? E' porque alguns programas nao irao funcionar depois que o drive onde eles estao instalados mude. Isto acontece com a maioria dos programas para Windows, mesmo que o path no icone seja consertado.
Passos para a instalacao dos sistemas:
- Boot com os discos de instalacao do OS/2 :
- Disco de instalacao (sem numero)
- Disco numero 1
- Se perguntar sobre instalacao facil ou avancada, escolher a instalacao avancada.
- Vai avisar que o OS/2 sera' instalado no drive C, perguntando se quer aceitar a unidade, ou especificar uma unidade/particao diferente. Pedir outra unidade/particao. Vai aparecer (depois do aviso) o FDISK do OS/2.
- Apagar todas as particoes. Pressionar ENTER sobre uma particao para ver as opcoes, uma delas serve para eliminar a particao. Deve sobrar uma unica linha infor- mando o espaco livre.
- Criar particao do menu. Pressionar ENTER sobre a linha de espaco livre, pedir para instalar o gereciador de inicializacao (ou boot manager) no inicio do espaco livre. Ele vai ocupar de um a dois megabytes.
- Criar a particao que contera' o DOS (e, se quiser, o Linux tambem). Sera' o drive C quando fizer boot com o DOS. Pressionar ENTER sobre a linha de espaco livre, pedir para criar uma particao primaria no inicio do espaco livre. Escolher um tamanho suficiente para o DOS e o Linux.
- Criar a particao que sera' usada para carregar (boot) o Windows 95 (e, se quiser, o Windows NT tambem): Sera' o drive C quando fizer boot pelo Windows 95 (e NT). Pressionar ENTER sobre a linha de espaco livre, pedir para criar uma particao primaria no inicio do espaco livre. Escolher um tamanho minimo de 6 MB (boot pelo drive C e Windows 95 instalado no D) ou mais, se quiser instalar os arquivos do Windows 95 e/ou NT neste drive.
- Criar a particao de programas. Sera' o drive D. Pressionar ENTER sobre a linha de espaco livre, pedir para criar uma particao logica estendida ocupando todo o espaco restante. Ou entao, se quiser criar uma outra particao para instalar o OS/2, crie no inicio do espaco livre e desconte o tamanho ocupado pelo OS/2.
- Criar a particao do OS/2 (se for o caso). Sera' o drive E, aparecera' apenas no OS/2 e no NT 3.51 se for formatada com HPFS. Pressionar ENTER sobre a linha de espaco livre, pedir para criar uma particao logica estendida ocupando todo o espaco restante.
- Incluir as particoes de boot no menu. Pressionar ENTER sobre cada particao primaria e pedir para incluir ela no gerenciador de inicializacao (boot manager). Vai abrir uma janela para digitar o nome que ira' aparecer no menu. Caso va' instalar o OS/2, fazer o mesmo com a particao onde ele sera' instalado.
- Indicar a particao onde sera' instalado o OS/2 (se for o caso). Pressionar ENTER sobre a particao onde sera' instalado o OS/2. Escolher a opcao para marcar a particao como instalavel.
- Acertar a forma como o menu sera' apresentado. Pressionar ENTER em qualquer particao. Escolher a opcao de definir os valores de inicializacao. No menu que vai aparecer, pressionar ENTER na opcao de modo para passar ao modo normal. Na opcao de tempo de espera, recomendo 10 segundos. Esse e' o tempo que o menu vai ficar esperando voce escolher um outro sistema. Se voce nao fizer nada, depois desse tempo a ultima opcao escolhida e' usada. Pressionar F3 para confirmar os novos valores.
- Salvar as novas particoes. Pressionar F3. Se voce nao vai instalar o OS/2:
- vai aparecer um aviso que nenhuma particao foi definida como instalavel e pode ser ignorada. Escolher "salvar e sair".
- quando pedir para inserir o disco do OS/2, pode retirar os discos do drive e apertar o botao de reset. Continue no passo 15. Se voce vai instalar o OS/2, ponha o disco pedido no drive e...
- Instalar o OS/2 (se for o caso) Ele vai avisar que a particao do OS/2 sera' formatada e vai perguntar se usa a estrutura FAT (do DOS) ou a HPFS (do OS/2). Se vai usar uma particao em separado so' para o OS/2, eu recomendo usar HPFS.
- Instalar o DOS.
- Rebootar a maquina sem o disquete no drive. Quando aparecer o menu, ir para a opcao do DOS e pressionar ENTER. Ele vai mostrar uma mensagem de erro, porque o DOS nao esta' instalado, mas vai ativar a particao primaria que sera' o drive C.
- Colocar o primeiro dos discos de instalacao do DOS no drive A e pressionar CTRL-ALT-DEL.
- Instalar o DOS normalmente. Ele vai formatar todos os drives que encontrar, e com a estrutura FAT (voce nao tem escolha, e e' por isso que o OS/2 deve ser instalado primeiro).
- Reativar o menu de boot.
- Reiniciar a maquina (reset, CTRL-ALT-DEL) sem disquete no drive. Vai entrar o DOS direto, sem o menu.
- Chamar o FDISK. Pedir para definir a particao ativa. Marcar a menor particao, provavelmente nao-DOS, como a particao ativa. Salvar a alteracao.
- Instalar o Windows 95 (se for o caso).
- Rebootar a maquina sem o disquete no drive. Quando aparecer o menu, ir para a opcao do Windows 95 e pressionar ENTER. Ele vai mostrar de novo a mensagem de erro, ativando a particao primaria que sera' o drive C. Esta outra particao ainda nao esta' forma- tada.
- Fazer o boot antes da instalacao.
- Se for o Windows 95 para maquinas sem sistema, vira' um dis- quete a mais de boot. Colocar este disquete no drive e pressionar CTRL-ALT-DEL. Ele deve iniciar a instalacao.
- Se for um Windows 95 para maquinas com sistema (versao de atualizacao/upgrade) nao existe um disco de boot. Colocar o disco de boot do DOS no drive A e pressionar CTRL-ALT-DEL. No prompt do DOS, digitar "format c:", trocar o disquete pelo primeiro disco do Windows 95, e digitar "instalar" (se for a versao em portugues) ou provavelmente "install" se for a versao em ingles.
- Continuar a instalacao. Se o drive C foi criado apenas para o boot, instalar o Win 95 para um diretorio do drive D.
- O Windows 95 vai avisar que existe o Boot Manager/Gerenciador de Inicializacao na maquina, que ele nao vai poder funcionar com o Windows 95, etc. Nao se impressione, isso e' mentira. O menu sera' reativado depois.
- Reativar o menu de boot.
- Reiniciar a maquina (reset, CTRL-ALT-DEL) sem disquete no drive. Vai entrar o Windows 95 direto, sem o menu.
- Abrir uma janela DOS. Clicar no botao Iniciar no canto inferior esquerdo da tela (ou Start). Escolher a opcao "Programas" e depois a opcao "Prompt do MS-DOS".
- Chamar o FDISK. Pedir para definir a particao ativa. Marcar a menor particao, provavelmente nao-DOS, como a particao ativa. Salvar a alteracao.
- Instalar o Windows NT (se for o caso). Se, ao instalar o Windows NT, ele perceber que o Windows 95 ja' esta' instalado, ele inclui um outro menu para escolher entre os dois sistemas. Assim, passaremos por dois menus para carregar o Windows 95 ou o Windows NT.
- Reiniciar a maquina e escolher a opcao do Windows 95. Isso vai ativar o drive C que carrega ele.
- Reiniciar a maquina novamente com os discos de boot no NT. Eles podem ser gerados a partir do proprio CD com o winnt.exe. Eu tive problemas com o suporte ao drive A durante a instalacao, entao eu tive que instalar sem disquetes (acho que usei "winnt /b")
- Instalar normalmente.
- Instalar o Linux (se for o caso). O Linux pode ser instalado em uma particao separada, com a estru- tura de arquivos dele proprio, ou em uma particao FAT. No meu caso, instalei em uma particao FAT junto com o DOS, e tambem porque nao era possivel ter uma outra particao primaria para ele (estava usando um disco rigido apenas). Esta particao tambem fica invisivel para o Windows 95, entao ela nao tera' os nomes longos do 95.
Eu usei o Linux Slackware 2.3 em CD (kernel 1.2.8). Eu nao conse- gui instalar a partir do CD, entao copiei o subdiretorio de instalacao para o disco rigido. Os dois disquetes de instalacao que gerei foram o Rootdisk para instalar o Linux em um subdiretorio de uma particao DOS e o Bootdisk IDE-CD (IDE/ATAPI). Eu usei o lodlin15.zip, Loadlin v. 1.5 que veio com o CD e serve para carregar o Linux a partir do DOS. O DOS nao sera' usado para o funcionamento do Linux. Descompacte ele e use o seguinte
Linux.bat :
rem Habilite a linha abaixo se o smartdrv estiver sendo usado REM smartdrv /C REM Retirei o vga=3 depois do rw mas nao sei para que serve c:linuxrootloadlin c:linuxvmlinuz root=/dev/hda3 rw
O CD vem tambem com o Lilo, que inclui o Linux no menu de boot do OS/2, mas nao tentei usar.
Fonte: http://www.dicas-l.com.br/print/19970702.html
Driblando servidores de hora (NTP) fora do ar
Driblando servidores de hora (NTP) fora do ar
Colaboração: Ivan de Gusmão Apolonio <<ivan (a) dimensional-brasil com>>
Estou enviando esta dica para ajudar aqueles usuários que às vezes passam por um problema com servidores de hora que estão fora do ar, como eu tenho passado. Essa dica ensina como utilizar os serviços de vários servidores em apenas uma linha de comando.
Usando o bash ou o sh como shell, existe a possibilidade de, caso um comando retorne um erro, executar um outro comando. Por exemplo:
ntpdate ntp.pop-df.rnp.br || ntpdate ntp.nml.csiro.au
No exemplo acima, caso o servidor ntp.pop-df.rnp.br esteja fora do ar naquele momento, ele retornará um erro e automaticamente executará o comando seguinte, ou seja, verificará a hora no servidor ntp.nml.csiro.au.
Existe ainda a possibilidade de se fazer o contrário, ou seja, caso o comando execute sem nenhum erro, ele executa o próximo comando. Por exemplo:
ntpdate ntp.pop-df.rnp.br && echo "Hora atualizada com sucesso"
Obviamente esse macete não se aplica somente a servidores de hora, mas sim a qualquer comando do bash. Mas, aproveitando-se dele, eu coloquei a seguinte linha no meu /etc/rc.d/rc.local
ntpdate ntp.pop-pr.rnp.br || ntpdate ntp.pop-df.rnp.br || ntpdate ntp.nml.csiro.au || ntpdate clock.uregina.ca || ntpdate swisstime.ethz.ch || ntpdate ntp.pop-rs.rnp.br
Assim sendo, eu tenho 6 comandos para acertar a hora do micro em 6 servidores de hora espalhados pelo mundo. É muito pouco provável que todos estejam com problema. Caso você ache que 6 é pouco, fique à vontade para colocar quantos quiser. Existe uma relação em http://www.eecis.udel.edu/~mills/ntp/clock1.htm e = outra no Brasil em http://www.rnp.br/cais/ntp/
Fonte: http://www.dicas-l.com.br/print/20010817.html
Fazendo backup e recuperando a MBR e tabela de partições
Fazendo backup e recuperando a MBR e tabela de partições
Ao comprar um novo HD, você precisa primeiro formatá-lo antes de poder instalar qualquer sistema operacional. Existem vários programas de particionamento, como o qtparted, gparted, cfdisk, e outros.
Os programas de particionamento salvam o particionamento na tabela de partição, gravada no início do HD. Esta tabela contém informações sobre o início e final de cada partição. Depois do particionamento, vem a formatação de cada partição, onde você pode escolher o sistema de arquivos que será usado em cada uma (reiserfs,ext3, ntfs, etc.).
Ao instalar o sistema operacional é gravado mais um componente, o gerenciador de boot, responsável por carregar o sistema operacional ao ligar o micro.
Tanto o gerenciador de boot quanto a tabela de particionamento do HD são salvos no primeiro setor do HD, a famosa trilha MBR, que contém apenas 512 bytes. Destes, 446 bytes são reservados para o setor de boot, enquanto os outros 66 bytes guardam a tabela de partição.
Ao trocar de sistema operacional, você geralmente subscreve a MBR com um novo gerenciador de boot, mas a tabela de particionamento só é modificada ao criar ou deletar partições. Caso por qualquer os 66 bytes da tabela de particionamento sejam subscritos ou danificados, você perde acesso a todas as partições do HD. O HD fica parecendo vazio, como se tivesse sido completamente apagado.
Para evitar isso, você pode fazer um backup da trilha MBR do HD. Assim você vai poder recuperar tudo caso ocorra qualquer eventualidade. Para isso, use o comando:
# dd if=/dev/hda of=backup.mbr bs=512 count=1
O comando vai fazer uma cópia dos primeiros 512 bytes do "/dev/hda" no arquivo "backup.mbr". Se o seu HD estivesse instalado na IDE secundária (como master), ele seria visto pelo sistema como "/dev/hdc". Basta indicar a localização correta no comando.
Você pode salvar o arquivo num disquete ou pendrive, mandar para a sua conta do gmail, etc. Caso no futuro, depois da enésima reinstalação do Windows XP, vírus, falha de hardware ou de um comando errado a tabela de particionamento for pro espaço, você pode dar boot com o CD do Kurumin e regravar o backup com o comando:
# dd if=backup.mbr of=/dev/hda
Lembre-se que o backup vai armazenar a tabela de particionamento atual. Sempre que você reparticionar o HD, não se esqueça de atualizar o backup.
Caso o pior aconteça, a tabela de particionamento seja perdida e você não tenha backup, ainda existe uma esperança. O gpart é capaz de recuperar a tabela de partição e salvá-la de volta no HD na maioria dos casos. Você pode executá-lo dando boot pelo CD do Kurumin.
Você pode baixá-lo no: http://www.stud.uni-hannover.de/user/76201/gpart/#download
Baixe o "gpart.linux" que é o programa já compilado. Basta marcar a permissão de execução para ele:
# chmod +x gpart.linux
No Kurumin você pode instala-lo pelo apt-get: apt-get install gpart
Execute o programa indicando o HD que deve ser analisado:
# ./gpart.linux /dev/hda
(ou simplesmente "gpart /dev/hda" se você tiver instalado pelo apt-get)
O teste demora um pouco, pois ele precisará ler o HD inteiro para determinar onde começa e termina cada partição. No final ele exibe um relatório com o que encontrou:
Primary partition(1) type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX) size: 3145mb #s(6442000) s(63-6442062) chs: (0/1/1)-(1023/15/63)d (0/1/1)-(6390/14/61)r Primary partition(2) type: 131(0x83)(Linux ext2 filesystem) size: 478mb #s(979964) s(16739730-17719693) chs: (1023/15/63)-(1023/15/63)d (16606/14/1)-(17579/0/62)r Primary partition(3) type: 130(0x82)(Linux swap or Solaris/x86) size: 478mb #s(979896) s(17719758-18699653) chs: (1023/15/63)-(1023/15/63)d (17579/2/1)-(18551/3/57)r
Se as informações estiverem corretas você pode salvar a tabela no HD usando o parâmetro "-W":
# gpart -W /dev/hda /dev/hda
Veja que é preciso indicar o HD duas vezes. Na primeira você indica o HD que será vasculhado e em seguida em qual HD o resultado será salvo. Em caso especiais, onde você tenha dois HDs iguais por exemplo, você pode gravar num segundo HD, com em: "gpart -W /dev/hda /dev/hdc"
O gpart não é muito eficiente em localizar partições extendidas (hda5, hda6, etc.) em boa parte dos casos ele só vai conseguir identificar as partições primárias (hda1, hda2, hda3 e hda4). Nestes casos, você pode usar o cfdisk ou outro programa de particionamento para criar manualmente as demais partições (apenas crie as partições e salve, não formate!). Se você souber indicar os tamanhos aproximados, principalmente onde cada uma começa, você conseguirá acessar os dados depois.
Gostou da dica? Conheça outros trabalhos do autor
- Livro Impresso: Linux Ferramentas Técnicas Carlos E. Morimoto. 256 páginas, R$ 27.
- Agenda de cursos presenciais em SP e RS
Fonte: http://www.dicas-l.com.br/print/20050620.html
Driblando servidores de hora (NTP) fora do ar
Driblando servidores de hora (NTP) fora do ar
Colaboração: Ivan de Gusmão Apolonio <<ivan (a) dimensional-brasil com>>
Estou enviando esta dica para ajudar aqueles usuários que às vezes passam por um problema com servidores de hora que estão fora do ar, como eu tenho passado. Essa dica ensina como utilizar os serviços de vários servidores em apenas uma linha de comando.
Usando o bash ou o sh como shell, existe a possibilidade de, caso um comando retorne um erro, executar um outro comando. Por exemplo:
ntpdate ntp.pop-df.rnp.br || ntpdate ntp.nml.csiro.au
No exemplo acima, caso o servidor ntp.pop-df.rnp.br esteja fora do ar naquele momento, ele retornará um erro e automaticamente executará o comando seguinte, ou seja, verificará a hora no servidor ntp.nml.csiro.au.
Existe ainda a possibilidade de se fazer o contrário, ou seja, caso o comando execute sem nenhum erro, ele executa o próximo comando. Por exemplo:
ntpdate ntp.pop-df.rnp.br && echo "Hora atualizada com sucesso"
Obviamente esse macete não se aplica somente a servidores de hora, mas sim a qualquer comando do bash. Mas, aproveitando-se dele, eu coloquei a seguinte linha no meu /etc/rc.d/rc.local
ntpdate ntp.pop-pr.rnp.br || ntpdate ntp.pop-df.rnp.br || ntpdate ntp.nml.csiro.au || ntpdate clock.uregina.ca || ntpdate swisstime.ethz.ch || ntpdate ntp.pop-rs.rnp.br
Assim sendo, eu tenho 6 comandos para acertar a hora do micro em 6 servidores de hora espalhados pelo mundo. É muito pouco provável que todos estejam com problema. Caso você ache que 6 é pouco, fique à vontade para colocar quantos quiser. Existe uma relação em http://www.eecis.udel.edu/~mills/ntp/clock1.htm e = outra no Brasil em http://www.rnp.br/cais/ntp/
Fonte: http://www.dicas-l.com.br/print/20010817.html
Clonando sistemas com o OCS open-source clone system - clonezilla
Clonando sistemas com o OCS open-source clone system - clonezilla
Colaboração: Sérgio Luiz Araújo Silva
A ferramenta "Open-source Clone System" ou clonezilla para os intimos traz uma série de melhorias frente outras ferramentas que usamos no dia-a-dia. Creio que a mais significativa é o fato de clonar apenas os blocos usados. Clonei 3 sistemas windows+kurumin+ubuntu em menos de 15 minutos.
Obtenha a imagem do cd em: http://gparted.sourceforge.net/livecd.php Cuidado, há uma imagem somente do gparted e uma contendo o gparted e o open-source clone system, no caso esta:
http://gparted.free.fr/GParted-Clonezilla/gparted-clonezilla-1.8.iso
O tamanho é de 125 MB Grave no cd e configure a Bios para dar boot pelo CD
Instale na máquina que vai guardar as imagens o "ssh" e o "sshfs" (o ideal é que esta máquina tenha IP fixo para facilitar o envio de imagens e a clonagem propriamente dita)
No caso do Debian ou Ubuntu faça como root:
apt-get install ssh sshfs
Crie na máquina SERVIDOR-DE-IMAGENS a pasta "images"
mkdir -p /root/images/
Configure calma e perfeitamente o computador que será clonado, em seguida dê um boot com o cd do "OCS"
- escolha a opção "clonezilla live"
- escolha o idioma inglês já que só há duas opções Inglês e Chinês
- escolha o teclado ABNT2
Ao final do boot ele mostra um texto com explicações, dicas de como montar um servidor sshfs, smb etc. Pressione Enter
sudo su - "para se tornar root"
sshfs root@IP-SERVIDOR-DE-IMAGENS:/root/images/ /home/partimag/
coloque a senha do servidor...
ocs-sr -x "inicia o programa de clonagem"
Dica: Deixe as opções DEFAULT como estão. Se tiver partições ntfs desfragmente antes para evitar erros e agilizar o processo. No caso de ntfs o sistema tem que estar dando boot sem erros
Após algumas perguntas o processo é iniciado, ao final aparece um menu com números. no caso da clonagem eu necessitei restaurar o grub que no meu caso estava em /dev/hda6/boot/grub/menu.lst
Para um sistema recem clonado (ainda não reiniciado) escolha a opção 2 no último menu (aquele que permite o reinício do sistema) a opção 2 dá acesso à linha de comando.
Considerando que meu grub original estava em "/dev/hda6" fiz
| 2 | acesso á linha de comando |
| mount /dev/hda6 /media | montando o local do meu grub |
| chroot /media | mudando a raiz |
| grub-install hd0 | reinstalando o grub em hda1 |
| exit | saindo do chroot |
| shutdown -r 0 | reiniciando meu sistema clonado |
Para os hackers de plantão eu pediria um manual de como clonar com este sistema em multicast. Há um relato no site: http://clonezilla.sourceforge.net/ de uma clonagem de 40 computadores em 10 minutos
Frameworks para Desenvolvimento em PHP.
Os frameworks facilitam o desenvolvimento de software, permitindo que os programadores se ocupem mais com os requerimentos do software do que com os detalhes tediosos, de baixo nível do sistema. Com o uso de frameworks, os programadores voltam a ter o controle de seu tempo e de seus códigos-fonte, as tarefas repetitivas são minimizadas, os projetos são concluídos em menos tempo, os padrões são seguidos, e a programação volta a ser uma arte.
Frameworks para desenvolvimento em PHP mostra aos leitores diversos frameworks de desenvolvimento que agilizam o processo de criação e manutenção de aplicativos web. Cada framework é apresentado na prática por meio do desenvolvimento de um aplicativo, de modo que o leitor pode ver sua serventia em um caso real. Neste livro, são apresentados os frameworks mais utilizados: CakePHP, Symfony, Zend Framework, CodeIgniter e Prado.
O livro pode ser adquirido no site da editora: http://www.novateceditora.com.br/livros/frameworks/
Fonte: http://www.dicas-l.com.br/print/20070513.html
MRTG - Instalação e Configuração
MRTG - Instalação e Configuração
Colaboração: Alexandre Takahashi
O MRTG (Multi Router Traffic Grapher) é, inicialmente, uma ferramenta desenvolvida para monitorar o tráfego em links de rede. Escrito em PERL, utiliza o SNMP para ler os dados dos roteadores e um programa em C para criar os gráficos, que são mostrados em páginas HTML. O MRTG para *nix é distríbuido em Código Fonte, assim, você dever ter um compilador C e o PERL instalado em sua máquina, na maioria das distribuições *nix, ambos já estão disponíveis na instalação padrão, se não estiverem, leia o item Pré-Requisitos
Pré-Requisitos *nix
GCC
O compilador GCC (GNU C Compiler) esta disponível na instalação padrão da maioria dos sistemas *nix, é necessário para compilar o MRTG.
Para procurar o gcc
whereis gcc
Em distribuições baseadas em RPM é possivel procurar pelo comando
rpm -qa | grep gcc
Caso você não tenha o gcc instalado, faça o download em
Perl
Grande parte do MRTG esta escrita em PERL, verifique se você tem o Perl instalado e qual a versão
Para procurar o perl
whereis perl
Em distribuições baseadas em RPM é possivel procurar pelo comando
rpm -qa | grep perl
Caso o perl não esteja instalado faça o download em
Para ver a versão do Perl
perl -v
A versão mínima requerida é a 5.005
gd
GD é uma biblioteca para gerar gráficos, no formato PNG
Para procurar o gd
whereis gd
Em distribuições baseadas em RPM é possivel procurar pelo comando
rpm -qa | grep gd
Caso o gd não esteja instalado, faça o download em
libpng
Requerido pelo gd para gerar arquivos PNG
Para procurar o libpng
whereis libpng
Em distribuições baseadas em RPM é possivel procurar pelo comando
rpm -qa | grep libpng
Caso o libpng não esteja instalado, faça o download em
http://www.libpng.org/pub/png/
zlib
Requerido para compactar os gráficos criados
Para procurar o zlib
whereis zlib
Em distribuições baseadas em RPM é possivel procurar pelo comando
rpm -qa | grep zlib
Caso o libpng não esteja instalado, faça o download em
http://www.info-zip.org/pub/infozip/zlib/
MRTG
Não esquecendo do principal, baixe o MRTG
Compilacação/Instalação
Para descompactar os arquivos execute o seguinte comando
tar -xvzf <<arquivo>>
Dentro de cada diretório , execute os seguintes comandos (Deixe o MRTG por último)
./configure
./make
./make install
Isto irá instalar todos os pacotes e o MRTG.
Configuração
A configuração é relativamente simples, não há a necessidade de criar um arquivo de configuração manualmente, utilize o comando cfgmaker(usualmente no diretorio /usr/local/mrtg-2/bin), como mostrado abaixo
```./cfgmaker --global 'WorkDir: /var/www/mrtg' --global 'Options[_]: bits,growright' --global 'RunAsDaemon:Yes' --output /home/usuario/mrtg/mrtg.cfg <comunidadesnmp (a) xxx xxx xxx xxx>
WorkDir: /var/www/mrtg
Define o local onde sera gerada a pagina html com os graficos
Options[_]: bits,growright
A opção bits define que o gráfico trará as informações em bits e a opção growright fará com que o gráfico caminhe da direita para a esquerda, sendo que o horário atual fique a direita do gráfico
output /home/usuario/mrtg/mrtg.cfg
Define onde será armazenado o arquivo de configuracao (aqui chamado de mrtg.cfg)
RunAsDaemon:Yes
Define que o MRTG rode como daemon(processo), ou seja, o MRTG ficará carregado e vai buscar dados do equipamento conforme o parametro interval (--global 'Interval:10') se este parametro não for definido, então o intervalo padrão será adotado (5 minutos)
comunidadesnmp
Comunidade snmp do equipamento a ser monitorado (roteador, switch, etc) com permissão de leitura
xxx.xxx.xxx.xxx
Endereco IP do equipamento a ser monitorado.
Para mais opções do cfgmaker consulte
```./cfgmaker --man
ou
http://mrtg.hdl.com/cfgmaker.html
Executando o MRTG
Para executar o MRTG
/usr/local/mrtg-2/bin/mrtg /home/usuario/mrtg/mrtg.cfg
Simples, não?? ;-)
Se a opção RunAsDaemon:Yes estiver definida, então ele irá rodar como daemon e os dados serão atualizados automaticamente, conforme o intervalo definido ou a cada 5 minutos.
Considerações Finais
O MRTG é uma excelente ferramente de monitoramento, mas não se restringe apenas a ativos de rede, ele pode ser usado para monitorar qualquer equipamento com suporte a SNMP, além de poder receber variáveis de scripts e em conjunto com outras ferramentas, o limite é a criatividade de quem o usa ;-). Existem diversos artigos de utilização do MRTG combinado com outras ferramentas e para outros fins(um deles postado aqui no Dicas-L sobre como monitorar performance em um servidor *nix. O MRTG roda também na plataforma MS. Espero que este pequeno tutorial ajude aqueles que ainda não conhecem o MRTG.
Fonte: http://www.dicas-l.com.br/print/20050627.html
GrayList no servdir de emails (EXIM/MYSQL) - Mini tutorial
GrayList no servdir de emails (EXIM/MYSQL) - Mini tutorial
Colaboração: Silmar A. Marca
Graylist é uma lista "cinza", onde o servidor rejeita a mensagem por um determinado tempo. Tal atitude forca a mensagem a ser re-enviada, o que geralmente não acontece caso a mesma seja enviada por um servidor de SPAM ou por inúmeros tipos de VIRUS. Uma vez a mensagem conseguir ser enviada, o servidor que a enviou poderá postar sucessivas mensagens sem atraso.
Funciona bem na versão 4.50 ou superior do EXIM. É pré-requisito compilar o exim com suporte a mysql.
Vale a pena ressaltar que o GrayList apresentado é modificado do padrão original. O mesmo valida apenas o dominio de quem envia e a rede do mesmo. Valida também mensagens de erro (Bounce). Tal modificação tem apresentado os efeitos positivos de diminuir atrasos na entrega da mensagem em caso de round-robing nos ips de entrega, isto sem causar impacto na eficiencia da ferramenta.
Observa se que é importante adicionar o graylist no final das clausulas rcpt e data e não no inicio! Adicionar antes do aceite final para qualquer hosts! A mesma não impede usuarios autenticados, relay Hosts e SPF validados (caso habilitado).
Partes do código foram baseados em diversos tutorias na internet.
Criar tabela no mysql:
# # Estrutura da tabela ``greylist`` # CREATE TABLE ``greylist`` ( ``id`` bigint(20) NOT NULL auto_increment, ``relay_ip`` varchar(20) default NULL, ``sender_type`` enum('NORMAL','BOUNCE') NOT NULL default 'NORMAL', ``sender`` varchar(150) default NULL, ``recipient`` varchar(150) default NULL, ``block_expires`` datetime NOT NULL default '0000-00-00 00:00:00', ``record_expires`` datetime NOT NULL default '9999-12-31 23:59:59', ``create_time`` datetime NOT NULL default '0000-00-00 00:00:00', ``TYPE`` enum('AUTO','MANUAL') NOT NULL default 'MANUAL', ``passcount`` bigint(20) NOT NULL default '0', ``last_pass`` datetime NOT NULL default '0000-00-00 00:00:00', ``blockcount`` bigint(20) NOT NULL default '0', ``last_block`` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (``id``), UNIQUE KEY ``relay_ip`` (``relay_ip``,``sender``,``recipient``,``sender_type``) ) TYPE=MyISAM COMMENT='GrayList '; # -------------------------------------------------------- # # Estrutura da tabela ``greylist_log`` # CREATE TABLE ``greylist_log`` ( ``id`` bigint(20) NOT NULL auto_increment, ``listid`` bigint(20) NOT NULL default '0', ``timestamp`` datetime NOT NULL default '0000-00-00 00:00:00', ``kind`` enum('deferred','accepted') NOT NULL default 'deferred', PRIMARY KEY (``id``) ) TYPE=MyISAM COMMENT='GrayList Log';
Arquivo exim.conf:
<..Outras configuracoes iniciais...>
#Comentar caso nao haja base Mysql MYSQL_SERVER = "localhost/baseexim/usuarioeximbd/senhaeximbd" #-DEF: Lista GreyList (Defer Temporario) .ifdef MYSQL_SERVER GREYLIST_ENABLED_GREY = yes # GREYLIST_ENABLED_LOG = yes GREYLIST_INITIAL_DELAY = 12 MINUTE GREYLIST_INITIAL_LIFETIME = 4 HOUR GREYLIST_WHITE_LIFETIME = 36 DAY GREYLIST_BOUNCE_LIFETIME = 7 DAY GREYLIST_RECORD_LIFETIME = 90 DAY GREYLIST_TABLE = greylist GREYLIST_LOG_TABLE = greylist_log # GREYLIST_SKPSPF = yes .endif
<..Outras configuracoes iniciais...>
.ifdef MYSQL_SERVER .ifdef GREYLIST_ENABLED_GREY GREYLIST_TEST = SELECT CASE WHEN now() > block_expires THEN "accepted" ELSE "deferred" END AS result, id FROM GREYLIST_TABLE WHERE (now() < record_expires) AND (sender_type = $) AND (sender = '$
<..Outras configuracoes iniciais...>
#-Definicao da ACL. Clausula GreyList (ocorre antes do rcpt e do data): .ifdef GREYLIST_ENABLED_GREY greylist_acl: # Limpar tabela automaticamente 09:3xBRST 10:3xBRDT (horario normal) warn condition = $set acl_m4 = $ warn set acl_m8 = $ set acl_m9 = $
<..Outras configuracoes de ACL...>
acl_check_rcpt: <... Outras configuracoes deste rcpt. Como verificações de sender, aceitar relay_hosts e autenticados...> <... Geralmente coloca se esta clausula antes do accept final para quem não é ralay_host e autenticado...> .ifdef GREYLIST_ENABLED_GREY defer hosts = !+relay_from_hosts !authenticated = * .ifdef GREYLIST_SKPSPF !spf = pass .endif acl = greylist_acl message = GreyListed: please try again later delay = 15s .endif .endif <..Outras configuracoes. Outros ACLs...> acl_check_data: <... Outras configuracoes deste rcpt. Como verificações de sender, aceitar relay_hosts e autenticados...> <... Geralmente coloca se esta clausula antes do accept final para quem não é ralay_host e autenticado...> .ifdef GREYLIST_ENABLED_GREY defer .ifdef GREYLIST_SKPSPF !spf = pass .endif acl = greylist_acl message = GreyListed: please try again later delay = 15s .endif
Silmar A. Marca, GrupoGSN - Desenvolvimento, Implantação e Verificação de Servidores Profissionais baseados em Linux/Novell
Fonte: http://www.dicas-l.com.br/print/20050530.html
bash: Argument list too long
bash - Argument list too long
Colaboração: Daniel Duclos
Pode ser que você já tenha tentado dar um comando usando o asterisco * na bash e tenha obtido este erro:
bash: comando: Argument list too long
Aonde comando pode ser um rm, ou um cp, ou qualquer outro. Por exemplo:
daniduc@nicholas:~/teste$ rm -f * bash: /bin/rm: Argument list too long daniduc@nicholas:~/teste$
Quem imprimiu esse erro não foi o comando (o rm, no exemplo), mas a bash, que é responsável por expandir o wildcard *, substituindo-o pela lista de arquivos no diretório. Em sistemas UNIX, há um limite fixo de memória reservado para o ambiente e lista de parâmetros de um comando. No caso do meu servidor Linux, esse limite é 128K, mas isso varia de sistema para sistema. Você pode descobrir no seu sistema usando o comando getconf. Veja:
daniduc@nicholas:~/teste$ getconf ARG_MAX 131072 daniduc@nicholas:~/teste$
Agora, ao que interessa. Como fazer para remover os arquivos do meu exemplo acima? Existem diversas saídas, variando a eficiência dependendo de qual é o seu comando, na verdade. Mas vamos ver o rm, pois o exemplo dele pode ser aplicado a outros, como por exemplo o cp, ou o mv.
Se você puder eliminar o diretório inteiro no qual estão os arquivos, não há problemas:
daniduc@nicholas:~$ rm -rf teste/ daniduc@nicholas:~$
Se você só pode eliminar os arquivos, uma saída é usar o comando find.
daniduc@nicholas:~/teste$ find . -type f -exec rm -f <> ; daniduc@nicholas:~/teste$
Nesse caso, eu pedi para o find encontrar no diretório em que estou (.) todos os arquivos (-type f) e para cada um deles executar (-exec) o comando rm. As chaves <> são substituídas por cada arquivo encontrado pelo find. Dessa forma o rm é executado uma vez para cada arquivo, tendo assim apenas aquele arquivo como parâmetro, o que evita ultrapassar o limite de memória imposto. O final ; é para fechar o comando do -exec com um ponto e vírgula, que precisa ser precedido da contra barra () para que a bash não o interprete (uma vez que ; é um caractere com sentido especial para a bash) e apenas o passe para o find.
Caso, por exemplo, você precise remover somente os arquivos html e não os arquivos .php em um diretório, basta usar o find novamente:
daniduc@nicholas:~/teste$ ls *.php 1.php 2.php daniduc@nicholas:~/teste$ ls (saida resumida:) 23497.html 36998.html 50498.html 6399.html 774.html 9.html 23498.html 36999.html 50499.html 639.html 77500.html 23499.html 3699.html 5049.html 63.html 77501.html 2349.html 369.html 504.html 64000.html 77502.html 234.html 36.html 50500.html 64001.html 77503.html
daniduc@nicholas:~/teste$ find . -name *.html -exec rm -f <> ; daniduc@nicholas:~/teste$ ls 1.php 2.php daniduc@nicholas:~/lixo
Aqui o asterisco funciona porque está precedido pela contrabarra o que faz com que a bash não o interprete, apenas o find. E o find não expande o asterisco em todos os arquivos do diretório, como a bash. Para o find, o asterisco é parte de uma expressão regular, que quer dizer encontre arquivos cujo nome seja qualquer coisa seguida de um .html .
Eu uso a versão da GNU do find, presente na maioria dos sistemas Linux. Caso o seu find não entenda o parâmetro -exec, use-o em conjunto com comando xargs:
daniduc@nicholas:~/teste$ find . -name *.html | xargs rm -f daniduc@nicholas:~/teste$ ls 1.php 2.php daniduc@nicholas:~/teste$
Referências:
http://www.gnu.org/software/coreutils/faq/coreutils-faq.html#Argument-list-too-long
Essa dica foi publicada também no Blog UNIX Notes, que mantenho em conjunto com minha esposa.
Fonte: http://www.dicas-l.com.br/print/20070615.html





Últimos comentários