149
Administração e Segurança em Sistemas GNU/Linux www.clubedohacker.com.br 1 - Instalação e Atualização de Sistemas GNU/Linux -> Debian Debian é a distribuição com a maior comunidade de mantenedores/desenvolvedores voltada exclusivamente para software livre. Aspectos gerais da plataforma GNU/Linux Conceitos fundamentais sobre o Linux Tipos e características de shells Tipos de sistema de arquivos do Linux Instalação do Debian GNU/Linux Customizando, compilando e instalando um novo kernel em seu servidor Configurando e instalando um Boot Manager - Uso do Shell Reúne os principais e mais usados comandos de qualquer Sistema Operacional Linux Comandos para buscar e visualizar documentação no Linux Informações sobre o Sistema Comandos administrativos Trabalhando com o ambiente de trabalho do usuário no shell (alias e variáveis) Introdução a programação em Shell Script Trabalhando com modos de inicialização – processo init e runlevels - Configurando e gerenciando hardware Identificação de discos e partições em sistemas GNU/Linux Recomendações para configuração e armazenamento de dados Gerenciando hardware (disquete, cd-rom, pendrive e partições) Configuração de partições Conhecendo os módulos de componentes da CPU Configuração de dispositivo Wireless LAN Configurando uma rede Wireless no Linux - Criando e manipulando texto com o Editor VI É um editor de textos muito poderoso, ele pode: abrir vários arquivos ao mesmo tempo, possui sistema de auto-correção, auto-identificação, seleção visual, macros, seleção vertical de texto, uso de expressões regulares, sintaxe colorida, e muito mais... Modo de inserção e de comandos Copiando e colando textos no vi (utilizando o mouse) Usando o modo visual do vi Subcomandos para localização de texto Opções para substituição de textos - Criando e gerenciando contas de usuário e grupos Conhecimentos para um bom gerenciamento de contas de usuário. Administração de usuários Administração de grupos Trabalhando com a senha em grupos Criando quotas para usuários e grupos - Permissões de acesso a recursos, arquivos, pastas e dispositivos do Sistema Nesta etapa o participante irá compreender e manipular as permissões de acesso a recursos,arquivos, pastas e dispositivos do Sistema. Tipos de permissões Definindo permissões para dono, grupo, outros usuários e todos os usuários

Administracao e Seguranca Em Sistemas Linux

Embed Size (px)

Citation preview

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 1

- Instalação e Atualização de Sistemas GNU/Linux -> Debian Debian é a distribuição com a maior comunidade de mantenedores/desenvolvedores voltada exclusivamente para software livre. Aspectos gerais da plataforma GNU/Linux Conceitos fundamentais sobre o Linux Tipos e características de shells Tipos de sistema de arquivos do Linux Instalação do Debian GNU/Linux Customizando, compilando e instalando um novo kernel em seu servidor Configurando e instalando um Boot Manager - Uso do Shell Reúne os principais e mais usados comandos de qualquer Sistema Operacional Linux Comandos para buscar e visualizar documentação no Linux Informações sobre o Sistema Comandos administrativos Trabalhando com o ambiente de trabalho do usuário no shell (alias e variáveis) Introdução a programação em Shell Script Trabalhando com modos de inicialização – processo init e runlevels - Configurando e gerenciando hardware Identificação de discos e partições em sistemas GNU/Linux Recomendações para configuração e armazenamento de dados Gerenciando hardware (disquete, cd-rom, pendrive e partições) Configuração de partições Conhecendo os módulos de componentes da CPU Configuração de dispositivo Wireless LAN Configurando uma rede Wireless no Linux - Criando e manipulando texto com o Editor VI É um editor de textos muito poderoso, ele pode: abrir vários arquivos ao mesmo tempo, possui sistema de auto-correção, auto-identificação, seleção visual, macros, seleção vertical de texto, uso de expressões regulares, sintaxe colorida, e muito mais... Modo de inserção e de comandos Copiando e colando textos no vi (utilizando o mouse) Usando o modo visual do vi Subcomandos para localização de texto Opções para substituição de textos - Criando e gerenciando contas de usuário e grupos Conhecimentos para um bom gerenciamento de contas de usuário. Administração de usuários Administração de grupos Trabalhando com a senha em grupos Criando quotas para usuários e grupos - Permissões de acesso a recursos, arquivos, pastas e dispositivos do Sistema Nesta etapa o participante irá compreender e manipular as permissões de acesso a recursos,arquivos, pastas e dispositivos do Sistema. Tipos de permissões Definindo permissões para dono, grupo, outros usuários e todos os usuários

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 2

SUIDBIT SGIDBIT STICKYBIT - Manipulação de pacotes Instalação de pacotes (programas) Remoção de pacotes (programas) Correção de pacotes Procedimentos de backup Empacotamento e Compressão de arquivos Descompactação e Desempacotamento de pacotes Compilação de programas a partir do código fonte - Servidor X – Configurando o Ambiente Gráfico Instalação do X Window Configurando o X Informações sobre os módulos que devem ser carregados Servidor remoto: Xnest Gerenciadores de login Instalação de Ambientes Gráficos Instalando e Configurando o Ambiente Gráfico KDE Instalando e Configurando o Ambiente Gráfico GNOME - Serviços básicos de rede Configurando a rede Procedimento de check-list dos serviços de rede Telnet x SSH Aplicando regra de acesso a servidores no sistema: TCPWrappers Agendando tarefas Trabalhando com servidor de sincronização de horário – NTP Gerenciando impressão no sistema - Clientes / Estações de trabalho GNU/Linux Fornece habilidades e o conhecimento necessário para fazer a integração entre Windows e Linux.. Compartilhamento de arquivos em rede Linux Compartilhamento de arquivos em rede mista (Windows x Linux) Configuração do Servidor NFS Redes Windows x Redes Linux Instalação do Samba Configurando o Samba Compartilhando uma estação GNU/Linux com uma estação Windows Configurando um PDC com Samba Informações importantes O curso tem foco na distribuição Debian, considerada a mais estável e muito tradicional, possibilitando um ambiente que permite ao aluno capacitar-se não somente para o Linux mais também para outros sistemas Like Unix; Na sala de aula o curso é ministrado em Debian, distribuição com a maior comunidade de mantenedores/desenvolvedores voltada exclusivamente para software livre.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 3

Instalação

e atualização do

Sistema Operacional

Debian GNU/Linux

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 4

Aspectos gerais da plataforma GNU/Linux

Projeto Debian O Projeto Debian é um grupo mundial de voluntários que se esforçam para

produzir um sistema operacional livre que é composto inteiramente por software livre. O produto principal do projeto é a distribuição Debian GNU/Linux, que inclui o kernel do sistema operacional Linux e centenas de aplicações pré-empacotadas. Vários tipos de processadores são suportados, incluindo o Intel i386 e superior, Alpha, ARM, Motorola 68k, MIPS, PowerPC, Sparc, e UltraSparc, HP PA-RISC, IBM S/390 e Hitachi SuperH.

O Projeto Debian foi oficialmente fundado por Ian Murdock em 16 de Agosto de 1993, com a pretensão de que o Debian fosse uma distribuição criada abertamente, no mesmo espírito do Linux e do GNU. Naquele tempo, o conceito de uma "distribuição" de Linux era novo. A criação do Debian teve o apoio do projeto GNU da FSF (Free Software Foundation ou Fundação para o Software Livre) durante um ano (Novembro de 1994 a Novembro de 1995).

A distribuição Debian pretendia ser cuidadosamente e conscientemente criada em conjunto e ser mantida e suportada com similar cuidado. Isso começou com um pequeno e forte grupo de hackers do Software Livre e gradualmente cresceu se tornando uma grande e bem organizada comunidade de desenvolvedores e usuários.

A pronúncia oficial de Debian é 'débian'. O nome vem do nome do criador do Debian, Ian Murdock, e sua esposa, Debra.

Debra + Ian = Debian

Ian Murdock

Detalhes da distribuição Debian:

É a única distribuição que é aberta para que todo desenvolvedor e usuário possam contribuir com seu trabalho;

É o único distribuidor significativo de Linux que não é uma entidade comercial; É o único grande projeto com uma constituição, um contrato social e

documentos com políticas para organizar o projeto; A Debian também é a única distribuição que é micro-empacotada, usando

informações detalhadas de dependência de pacotes para garantir a consistência do sistema em atualizações.

Para alcançar e manter um alto padrão de qualidade, o Debian adotou um rico conjunto de políticas e procedimentos para empacotamento e distribuição de software.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 5

Backups são automatizados através de ferramentas e a documentação detalha todos os elementos chaves do Debian de uma forma aberta e visível.

O Projeto de Documentação do Debian pode ser encontrado neste endereço:

http://www.debian.org/doc/index.pt.html .

Projeto GNU

O Projeto GNU foi iniciado em 1984 para desenvolver um sistema operacional completo, compatível com o Unix, que fosse software livre: o sistema GNU. (GNU é um acrônimo recursivo para “GNU Não é Unix” e é pronunciado como “guh-noo.”) Variantes do sistema operacional GNU, que incluem o kernel Linux, são hoje amplamente utilizadas; embora estes sistemas sejam frequentemente chamados de “Linux”, eles seriam mais corretamente chamados de sistemas GNU/Linux.

Se necessário obter mais informações, este é o endereço:

http://www.gnu.org/home.pt.html

Quem é quem no GNU?

Este endereço está reservado para o nome de quem escreve e escreveu software livre para o Projeto GNU:

http://www.gnu.org/people/people.pt.html

Richard M. Stallman, criador e líder do projeto GNU.

O Linux

O que é o Linux?

Linux é um sistema operacional Unix-like, isso quer dizer que o Linux foi desenvolvido de acordo com a filosofia Unix. Esse trabalho de desenvolvimento foi

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 6

feito por Linus Torvalds, do Departamento de Ciência da Computação da Universidade de Helsinki, Finlândia, junto com um grupo de hackers pela Internet. O Linux segue o padrão POSIX, que é usado em estações UNIX.

Linus Torvalds iniciou cortando (hacking) o kernel como um projeto particular, inspirado em seu interesse no Minix, um pequeno sistema UNIX desenvolvido por Andrew Tannenbaum. Ele se limitou a criar, em suas próprias palavras, "um Minix melhor que o Minix". E depois de algum tempo de trabalho em seu projeto, sozinho, ele enviou a seguinte mensagem para comp.os.minix:

Você suspira por melhores dias do Minix-1.1, quando homens serão homens e escreverão seus próprios "device drivers" ? Você está sem um bom projeto e esta morrendo por colocar as mãos em um S.O. no qual você possa modificar de acordo com suas necessidades ? Você está achando frustrante quando tudo trabalha em Minix ? Chega de atravessar noites para obter programas que trabalhem correto ? Então esta mensagem pode ser exatamente para você.

Como eu mencionei a um mês atrás, estou trabalhando em uma versão independente de um S.O. similar ao Minix para computadores AT-386. Ele está, finalmente, próximo do estágio em que poderá ser utilizado (embora possa não ser o que você esteja esperando), e eu estou disposto a colocar os fontes para ampla distribuição. Ele está na versão 0.02... contudo eu tive sucesso rodando bash, gcc, gnu-make, gnu-sed, compressão, etc. nele.

Linus Benedictus Torvalds

No dia 5 de outubro de 1991 Linus Torvalds anunciou a primeira versão "oficial" do Linux, versão 0.02. Desde então muitos programadores têm respondido ao seu chamado, e têm ajudado a fazer do Linux o Sistema Operacional que é hoje, uma grande maravilha.

Ele inclui proteção entre processos, carregamento por demanda, redes TCP/IP, alem de nomes de arquivos com até 255 caracteres, multitarefa real, suporte a UNICODE, bibliotecas compartilhadas, memória virtual, etc.

Conceitos fundamentais sobre o Linux

O Linux como qualquer sistema baseado em Unix apresenta uma lógica de

utilização que preserva a segurança do sistema. Esse é um dos aspectos fundamentais

que o tem tornado o sistema operativo com maior crescimento no mundo.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 7

Assim, na lógica nativa do Linux existe uma divisão entre o administrador da

máquina (ou superusuário) e o usuário sem privilégios.

No Linux um usuário pode ser identificado de três formas diferentes:

Login do usuário - é o nome que o usuário tem no sistema e que lhe serve para

a ele ter acesso quando introduzido corretamente com uma password.

Nome do usuário - é o nome de batismo que o usuário tem. Por exemplo,

“Linus Torvalds”. Este nome é raramente utilizado, serve somente para acompanhar a

leitura do nome completo do usuário.

ID do usuário - (User ID) é um número atribuído ao utilizador no momento da

criação da sua conta de sistema. É utilizado geralmente pelas aplicações para se

referirem a um usuário. Por norma, o root tem o ID 0 (zero) e um usuário pode ter, por

exemplo, o número 1001 como ID.

O superusuário ou root é o administrador do sistema. Apenas ele poderá executar

alguns comandos e tarefas a que o usuário normal não tem acesso.

Assim foi definido com o objetivo de um usuário não poder comprometer a

estabilidade do sistema realizando operações que o coloque em perigo.

O superusuário tem uma área de trabalho definida a partir da raiz do sistema:

/root.

O usuário é tipicamente uma pessoa que trabalhará regularmente no sistema,

tendo uma área própria que se encontra no diretório /home/[nome do usuário].

Um usuário normal não consegue alterar, apagar, sobrescrever,...

arquivos de sistema. Nenhum programa executado pelo mesmo consegue.

Assim sendo, ninguém se preocupa em fazer vírus para o Linux, pois o vírus não poderá

propagar-se devido às permissões sobre os arquivos lhe ser negado.

Todos os arquivos criados pelo usuário serão guardados na sua própria área e

outros usuários não têm acesso, a não ser que o superusuário o defina.

A estrutura de diretórios no Linux

A raiz do Linux fica no diretório / e dentro deste diretório existem vários outros, cada um tem uma descrição.

A estrutura de diretórios no Linux é basicamente dividida assim:

Diretório Descrição

/bin Arquivos executáveis que são usados pelo sistema freqüentemente. Aqui encontramos por exemplo os interpretadores de comandos (bash, ash,

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 8

Diretório Descrição

etc), o df, chmod, date, kill, dmesg, pwd, ls e muito mais. São os comandos essenciais :)

/boot Neste diretório ficam os arquivos de boot, como os mapas de boot e as imagens do kernel.

/dev Este é um diretório que carrega consigo todos os arquivos-dispositivos.

/etc

Arquivos de configuração do Linux. Este é o diretório que carrega todas as configurações dos principais (senão todos) os programas do Linux. Ele contém por exemplo os arquivos de usuários e senhas, arquivos de inicialização, configurações de rede e mais uma bolada de configuração pra deixar qualquer um doido.

/home Diretório dos usuários. Cada usuário tem um diretório dentro deste diretório :)

/lib Algumas bibliotecas essenciais para o funcionamento do Linux e também os módulos do kernel.

/proc Este é um diretório especial, ele contém informações que o kernel gera e algumas configurações também.

/root É um diretório HOME. Só que aqui é o do usuário administrador (root).

/sbin

Executáveis que têm funções administrativas, geralmente usados pelo root. Aqui se encontram programas para verificar e criar sistemas de arquivos, optimizar o uso do HD, configurar dispositivos, gerenciar módulos do kernel, etc.

/tmp Diretório temporário. Neste diretório, vários utlitários criam arquivos que só serão usados por um tempinho e depois descartados. Não há nenhuma informação importante aqui, pois pode ser acessado por qualquer usuário.

/usr Um dos maiores diretórios, este contém as bibliotecas e arquivos gerais dos vários programas instalados no sistema. Sua estrutura é bem parecida com a raiz em sí. Ele também tem um lib, bin, sbin e por aí vai.

/var Informações variáveis que estão sempre em constante mudança, como arquivos de logs, de travas, informações, e-mails do sistema, etc.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 9

Tipos e características de shells

O shell é o programa que permite a interação do usuário com o sistema, em

modo texto. Em UNIX/Linux existem vários tipos de shell, com funcionalidades

diversas. Os principais são:

• Bourne shell (sh) - o mais antigo, está presente em todos os sistemas, pois é

necessário para diversas operações administrativas.

• C shell (csh) - de sintaxe mais simples, é mais fácil de usar e por isso preferido

pelos usuários iniciantes.

• Korn shell (ksh) - mistura características de ambos os anteriores.

• BASH Shell (bash) - Bourne-Again Shell, é uma extensão do sh e utilizado

como padrão nas máquinas linux.

Algumas características do shell no Linux:

No prompt do Linux, quando existe com o símbolo $, isto quer dizer que o login

foi feito com um usuário normal. Se estiver logado com o root, ao invés do

símbolo $, no final do prompt existirá o símbolo #.

Nos nomes dos arquivos, os caracteres MAIÚSCULOS e minúsculos fazem a

diferença. Isso quer dizer que os arquivos: PROGRAMA.tar.gz e

programa.tar.gz, são dois arquivos completamente diferentes. Assim como: ls é

o comando na escrita certa e LS é um comando que não existe.

No Linux, não existem extensões .EXE, .COM especial para programas

executáveis. Ao invés disso, os arquivos têm permissão de executável ou não.

Além de arquivos comuns, no Linux existem os chamados links simbólicos, que

são nada mais nada menos que uma espécie de atalhos.

O Linux é um sistema multitarefa, podendo ser acessado por vários consoles ao

mesmo tempo, assim como pode ser rodado vários programas ao mesmo tempo.

Para mudar o console do 1 a 6, utilize Alt-N, onde o N corresponde ao número

do console. Exemplo: Alt-F1, Alt-F2, Alt-F3, Alt-F4, Alt-F5 e Alt-F6.

Depois de logado, se quiser sair, utilize o comando exit, ou o comando

logout ou ainda a combinação de teclas Ctrl-D.

Se algum programa estiver rodando no seu console, aperte as teclas Ctrl-Z para

suspender esse programa e voltar para o prompt. Para voltar ao programa, utilize

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 10

o comando fg. Para listar os programas suspendidos na sessão atual, utilize o

comando jobs.

Um recurso muito interessante nas shells do Linux, é o tab completion. Com ele

você pode completar comandos ou nomes de arquivos mais rapidamente sem

precisar digitar tudo. Para utilizar esse recurso, basta apenas digitar as primeiras

letras do comando ou arquivo e apertar a tecla Tab. O Linux irá completar o

comando ou arquivo. Caso haja mais de um arquivo começando com as letras

digitadas, apertando Tab mais uma vez irão ser exibidas todas as opções.

Referência:

The Linux Manual

Tipos de sistema de arquivos do Linux

Um sistema de arquivos é um conjunto de estruturas lógicas e de rotinas, que

permitem ao sistema operacional controlar o acesso ao disco rígido. Diferentes sistemas

operacionais usam diferentes sistemas de arquivos. Os sistemas de arquivos do

GNU/Linux evoluem de forma constante, juntamente com o kernel e outros

subsistemas. Muitas melhorias são introduzidas em todos os formatos de sistemas

suportados pelo GNU/Linux, tornando os mesmos: mais seguros, rápidos e estáveis.

O sistema de arquivos é independente do hardware e da BIOS. É por meio de um

sistema de arquivos que ocorre a gravação e a recuperação dos dados em um dispositivo

de armazenamento em um computador. O sistema de arquivos é que define o modo

como os arquivos são estruturados, nomeados, acessados, utilizados, protegidos e

manipulados pelo sistema operacional.

Os arquivos são armazenados, no sistema de arquivos, em diretórios que são

uma subdivisão lógica e que funcionam como repositórios de arquivos ou de outros

diretórios.

O conjunto de diretórios e arquivos forma um sistema de arquivos raiz, ou

"árvore" de diretórios, a mesma deve seguir um padrão estabelecido. O sistema de

arquivos é hierárquico e admite que diversos dispositivos sejam mapeados e utilizados a

partir do diretório raiz. Para o usuário toda essa estrutura é vista de forma única.

A característica de recuperação implementada em sistemas de arquivos é

chamada de "journaling" (registro de ações). Sistemas que não possuem "journal" são

mais suscetíveis às falhas e perdas de dados. Além disso, em caso de parada do sistema

ou falta de energia, o tempo necessário para retomar as operações é elevado, já que uma

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 11

verificação de integridade é realizada em cada arquivo do sistema. Nas partições que

possuem milhares de arquivos essa verificação pode levar horas.

Os sistemas de arquivos com suporte a "journal" são recomendados por

aumentarem a disponibilidade (High Availability - HA) em servidores GNU/Linux. A

alta disponibilidade é medida pelo tempo em que o servidor se encontra fora de serviço

por falhas no sistema operacional ou no hardware.

Quanto menor o tempo em que o sistema estiver indisponível, maior é o índice

de disponibilidade, medido em uma escala de casas decimais que tende a se aproximar

de 100%.

Características de alguns sistemas de arquivos:

EXT3

⇒ O sistema de arquivos EXT3 é uma versão do EXT2;

⇒ O ext3 tem as mesmas características do EXT2, mas com suporte journaling;

⇒ A evolução tornou o EXT3 um sistema de arquivos muito estável e robusto;

⇒ Podemos converter um sistema de arquivos EXT2 para EXT3, adicionado

suporte a journaling, e também podemos converter um sistema de arquivos

EXT3 para EXT2, removendo o suporte a journaling.

ReiserFS

⇒ O sistema de arquivos ReiserFS foi criado recentemente;

⇒ Atualmente quase todas as distribuições Linux o suportam;

⇒ Sua performance é muito boa, principalmente para um número muito grande de

arquivos pequenos;

⇒ ReiserFS também possui suporte a journaling.

JFS

⇒ O JFS (Journaling FileSystem) é um sistema de arquivos desenvolvido pela

IBM, disponível em licença open-source, com o intuito de rodar nos "UNIXes"

que a IBM vendia;

⇒ No início o JFS sofreu uma perda de credibilidade devido a constantes

instabilidades e bugs, caso este que atualmente encontra-se resolvido e assim

muito estável.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 12

⇒ Extremamente rápido e permite trabalhar com uma quantia de dados muito

superior aos demais sistemas de arquivos;

⇒ O sistema de arquivos JFS também usa a estrutura inode para armazenar a

localização dos blocos de cada arquivo nas estruturas físicas do disco, a versão

JFS2 armazena esses inodes em uma árvore binária para acelerar o acesso a

essas informações, esses blocos podem variar de 512 a 4096 bytes, a alocação

dos inodes é feita conforme vai sendo necessário.

⇒ Além de possuir journal ele permite que as partições do sistema sejam

redimensionadas sem que seja necessário desligar o computador;

XFS

⇒ XFS é um sistema de arquivos muito rápido na gravação;

⇒ Desenvolvido originalmente pela Silicon Graphics e posteriormente

disponibilizado o código fonte;

⇒ Considerado um dos melhores sistemas de arquivos para banco de dados;

⇒ Possui journaling de metadados que vem com um robusto conjunto de funções e

é otimizado para escalabilidade;

⇒ É recomendado usar este sistema de arquivos em sistemas rodando Linux com

equipamento SCSI de ponta e/ou armazenamento em canais de fibra e fonte de

energia sem interrupção;

⇒ Pelo fato de o XFS criar muitos caches de dados em uso na memória RAM,

programas mal desenhados podem perder uma grande quantidade de dados se o

sistema for desligado sem aviso.

LVM

⇒ LVM é um acrônimo para a expressão inglesa Logical Volume Management

para especificar um padrão de gerenciamento de partições em disco

IDE/SCSI/FC;

⇒ Foi desenvolvido inicialmente pela IBM, e outras empresa e instituições, como:

HP e a Open Group;

⇒ A implementação LVM cria um grande disco virtual, que pode inclusive ter

mais de um dispositivo de armazenamento , e divide em partições virtuais;

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 13

⇒ A vantagem é permitir o redimensionamento das áreas de modo dinâmico, ou

seja, com o sistema operacional sendo utilizado;

⇒ A desvantagem é que por ser um único disco virtual, a recuperação de dados em

uma eventual pane no sistema de armazenamento é bastante prejudicada.

Inode

Um inode é um identificador único que um arquivo recebe, nele contém uma

lista com 12 blocos diretos de dados que o arquivo deve ter, se ele possui mais de 12

blocos, ele segue uma regra para gravar esses blocos no disco e poder achar mais tarde.

Os dados do arquivo são armazenados em unidades chamadas 'blocos'. Estes

blocos podem ser numerados seqüencialmente. Um arquivo também tem um inode.

Como os blocos, os inodes são numerados seqüencialmente, embora tenham uma

seqüência diferente. Uma entrada de diretório consiste do nome do arquivo e um

número de inode. O inode também armazena o local dos blocos de dados.

* Os números dos blocos dos primeiros 12 blocos de dados estão armazenados

diretamente no inode. Estes às vezes são chamados de blocos diretos.

* O inode contém o número do bloco de um bloco indireto. Um bloco indireto

contém os números de blocos de 256 blocos de dados adicionais.

* O inode contém o número do bloco de um bloco duplamente indireto. Um bloco

duplamente indireto contém os números de blocos de 256 blocos indiretos adicionais.

* O inode contém o número do bloco de um bloco três vezes indireto. Um bloco três

vezes indireto contém os números de blocos de 256 blocos duplamente indiretos

adicionais.

Referências: Guia Foca GNU/Linux – Discos e Partições

http://focalinux.cipsga.org.br/guia/inic_interm/ch-disc.htm

Wikipédia

http://pt.wikipedia.org/wiki/Sistema_de_arquivos

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 14

Instalação do Debian Sarge

Antes de iniciar o processo de instalação é necessário configurar a BIOS para

que a inicialização do computador ocorra pelo drive de CD-ROM; Leia sempre e atentamente todas as telas do processo de instalação. Elas trazem

informações importantes para a compreensão do processo; Insira o CD;

Logo na primeira tela do processo deverá ser feita a opção do tipo de instalação

a ser realizada. Como estamos em um curso básico, você deve digitar: linux26, o mesmo é o modo de instalação automática.

Obs: também é possível entrar com a palavra: expert26, que é o processo manual mas a orientação deste tipo de instalação não será repassada neste momento.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 15

Após digitar linux26, pressione a tecla ENTER:

Obs: A tecla ENTER deverá ser pressionada sempre que desejar prosseguir.

O próximo passo é selecionar o idioma a ser usado, em seguida, pressione

ENTER:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 16

Selecione o layout do teclado:

Pressione ENTER:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 17

Continuação da tela:

Continuação da tela:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 18

Configuração automática da rede:

Quando não houver um servidor DHCP, será exibida a tela abaixo:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 19

Selecione a opção continuar, pressione ENTER.

Confirme a opção: Configurar a rede manualmente. Pode ocorrer de você não precisar ajustar esta máquina a uma rede de computadores, neste caso você seleciona Não configurara rede agora e logo em seguida será dado início ao particionamento.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 20

Digite o IP e prossiga a instalação:

Você digita a máscara da rede e prossiga a instalação:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 21

Digite o gateway e prossiga a instalação:

Digite o nome de máquina e prossiga a instalação:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 22

Para terminar de configurar a rede, digite o nome de domínio e prossiga a

instalação. Será exibida a tela para inicial do particionador:

Tela para particionamento:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 23

Selecione a opção: Apagar todo o disco.

Marque ESPAÇO LIVRE e prossiga:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 24

Selecione Criar uma nova partição:

Digite o tamanho da partição 250MB:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 25

Selecione como tipo de partição Primária:

Esta partição será criada no Início do espaço disponível:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 26

Selecione ponto de montagem, pressione ENTER e em seguida selecione

/boot.

Obs: Tendo como referência a imagem abaixo, no kernel anterior era necessário criar uma partição chamada /boot. Hoje em dia, com o kernel 2.6 não é mais necessário, o sistema já o cria automaticamente. O mesmo passará a existir dentro do diretório /.

Para esta aula, por favor selecione no ponto de montagem a opção /boot:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 27

A seguir confirme a opção Finalizar a configuração da partição:

Temos uma partição criada, a partição: /boot. Neste momento realize os mesmos

passos e crie uma partição chamada / (Raiz). A mesma terá o tamanho de 400 MB.

Teremos uma imagem semelhante à imagem abaixo:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 28

No Espaço Livre, teremos de criar algumas partições lógicas, sempre ao início

do espaço disponível. As partições lógicas a serem criadas são:

/usr 3.0 GB /home 3.1 GB

Após o término do particionamento, selecione Finalizar o particionamento e

gravar as mudanças no disco:

Selecione a opção Sim, assim você estará permitindo que as mudanças na lista

sejam gravadas nos discos.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 29

Após a confirmação, será dado o início da Instalação do Sistema básico Debian.

O próximo passo é confirmar a instalação do carregador de inicialização GRUB.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 30

Continuação da instalação do GRUB:

Continuação da instalação do GRUB:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 31

Instalação finalizada remova a mídia de instalação e confirme a opção

Continuar.

Abaixo, a tela de reinicialização da máquina, após isso o sistema passará a ser iniciado a partir do disco rígido.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 32

Após a reinicialização do sistema, será exibida a seguinte tela:

Confirme a opção OK.

Em seguida, selecione a opção Sim para iniciar a configuração do fuso horário:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 33

Selecione seu fuso horário:

Selecione a área de seu fuso horário:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 34

Selecione a cidade ou fuso horário:

A seguir, digite uma senha, a mesma será a senha de root (administrador):

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 35

Digite um nome para a conta de usuário a ser usada para atividades não

administrativas:

Informe uma senha para o usuário que está sendo criado:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 36

Após digitar a senha, será necessário inserir o CD 2 e confirmar OK.

Logo a seguir, o sistema irá ler as informações do CD2, como mostra a imagem

abaixo:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 37

Após o término da leitura do CD2, será o momento de retira-lo e inserir o CD3. Após inserir o CD3, confirme a opção SIM.

Também será feita a leitura das informações do CD3, logo a seguir teremos a seguinte tela:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 38

Neste momento, o sistema já possui as informações até o CD3. Os três cds são

necessários para a instalação do sistema. Na tela acima, que será exibida, você confirma a opção NÃO.

Se houver a necessidade de adicionar a leitura de outro(s) cd(s), selecione a opção SIM. Ao término da leitura da mídia, selecione NÃO.

Será exibida a tela de login. Você terá de entrar com o usuário e a senha:

----------------------------------------------------------------------------------------------------------

Customizando, compilando e instalando um kernel Linux em seu servidor

O Kernel representa a camada mais baixa de interface com o Hardware, sendo

responsável por gerenciar os recursos do sistema computacional como um todo. É no

kernel que estão definidas funções para operação com periféricos (mouse, discos,

impressoras, interface serial/interface paralela), gerenciamento de memória, entre

outros. O kernel é um conjunto de programas que fornece para os programas de usuário

uma interface para utilizar os recursos do sistema.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 39

Antes de tudo:

Quais são os requerimentos mínimos de hardware?

Varia de acordo com a arquitetura e a versão do kernel. Mas tenha em mente o

seguinte para ter um sistema mínimo funcional: 16 MB de RAM (memória física), 100

MHz de clock de processamento e 100 MB de espaço em disco (memória virtual).

Qual é o processador? Qual é o clock? Qual é a arquitetura?

# cat /proc/cpuinfo

# arch

Qual a quantidade de memória?

# cat /proc/meminfo

Baixando o pacote

Baixe o pacote que contém o código fonte mais atualizado do kernel Linux da

série 2.6 em http://www.kernel.org.

Fazendo o download com o comando wget: # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.x.tar.bz2

Como superusuário (faça o login no sistema com o usuário root), descompacte e desempacote o arquivo assim:

# tar xvjf linux-2.6.x.tar.bz2 -C /usr/src

Crie o link simbólico /usr/src/linux apontando para /usr/src/linux-2.6.x assim:

# ln -sf /usr/src/linux-2.6.x /usr/src/linux

Acesse /usr/src/linux assim:

# cd /usr/src/linux

Este será o diretório raiz de compilação, ou seja, o diretório base para os passos

seguintes.

Caso já exista uma compilação anterior, execute o comando 'make mrproper'

para retornar ao padrão os arquivos de configuração do kernel.

# make mrproper

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 40

Edite o arquivo Makefile para personalizar a versão de sua compilação. Altere a

variável EXTRAVERSION na quarta linha para um valor que deseje como por exemplo

-i386-mwsf-1. Salve este arquivo.

VERSION = 2

PATCHLEVEL = 6

SUBLEVEL = x

EXTRAVERSION = -i386-mwsf-1

Quais são os Softwares que preciso para iniciar a compilação?

O arquivo /usr/src/linux/Documentation/Changes contém uma lista do software

mínimo que deve estar corretamente instalado na máquina antes de iniciar a compilação.

Não inicie a compilação do kernel sem antes obtiver a certeza de que o mínimo de

software está instalado. Existe um script que pode auxiliar nisto. O script

/usr/src/linux/scripts/ver_linux imprime na tela uma lista do software mínimo e suas

respectivas versões que estão instalados na máquina. Compare esta lista com a lista

oferecida pelo documento /usr/src/linux/Documentation/Changes. Para executar este

script, faça assim:

# sh scripts/ver_linux

Será obrigatório ter os itens da lista instalados, apenas aqueles que o kernel que

você está configurando suportar.

O arquivo /usr/src/linux/.config armazena a configuração do kernel.

Basicamente, este arquivo descreve o que deverá ser incorporado ao kernel (y) e o que

deverá ser criado como módulo (m). Incorpore ao kernel apenas o necessário. O restante

necessário, configure como módulo. O que não for necessário, retire. Por exemplo, se

você não tem um determinado dispositivo em sua máquina, retire da configuração o

suporte. Isto possibilita uma maior performance por parte do sistema.

O kernel Linux pode ser modular, ou seja, o suporte básico fica incorporado ao

kernel constantemente e o suporte a outros dispositivos, como por exemplo, uma placa

de som, pode ser configurado como módulo. Assim sendo, este módulo da placa de som

é carregado na memória e plugado ao kernel apenas quando for necessário, ou seja,

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 41

apenas quando o usuário estiver utilizando som no sistema. Isto otimiza o sistema,

utilizando seus recursos sabiamente.

Existe uma configuração padrão para cada tipo de arquitetura de hardware no

diretório /usr/src/linux/arch. O nome do arquivo é defconfig. Supondo que sua

arquitetura de hardware seja i386, faça uma cópia do arquivo defconfig para o diretório

raiz de compilação com o nome .config:

# cp -f /usr/src/linux/arch/i386/defconfig /usr/src/linux/.config

Em alguns casos de arquitetura, pode existir um diretório configs contendo configurações específicas e testadas para cada modelo de máquina.

Sendo isso ocorrer, ao iniciar a ferramenta de configuração, já existirá alguns itens marcados. Não será necessário iniciar do zero uma configuração.

Execute a ferramenta de configuração assim:

# make menuconfig

ou

# make xconfig (modo gráfico)

Observe a existência de uma configuração já pré-definida, se deve ao fato de

você ter copiado o arquivo defconfig para o diretório raiz de compilação com o nome de

.config. Algumas dicas:

Marque com * itens que serão incorporados ao arquivo do kernel como por

exemplo, sistemas de arquivos que você utiliza ou vai utilizar em suas partições.

Marque com m itens que serão criados como módulo, ou seja, serão plugados ao

kernel apenas quando houver necessidade de uso.

Esta é uma etapa demorada e deve ser feito com atenção. Acompanhe o help de cada

item para saber o que está incluindo ou não.

Após a configuração do kernel, vamos compilá-lo realmente. Para isto, execute o comando:

# make

Este passo pode levar minutos ou de um dia para o outro. Depende do poder da máquina aonde você vai compilar.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 42

Após a compilação do kernel, vamos instalar os módulos com o seguinte comando:

# make modules_install

Vamos copiar o kernel (bzImage) para o diretório /boot. O arquivo está no diretório de acordo com a arquitetura que você estiver utilizando. Se você compilou o kernel em um PC, o que é mais comum, então execute o comando para copiar:

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.x-i386-mwsf-1

Nomeie os arquivos de acordo com a versão do kernel que está compilando e de acordo com a arquitetura de hardware.

Agora vamos copiar o arquivo System.map para /boot:

# cp /usr/src/linux/System.map /boot/System.map-2.6.x-i386-mwsf-1

Criando um link simbólico para System.map:

# ln -sf /boot/System.map-2.6.x-i386-mwsf-1 /boot/System.map

Agora vamos copiar o .config para /boot:

# cp /usr/src/linux/.config /boot/config-2.6.x-i386-mwsf-1

Vamos criar um arquivo initrd assim:

# mkinitrd -o /boot/initrd-2.6.x-i386-mwsf-1.img 2.6.x

A opção (-o arquivo) diz onde salvar o arquivo initrd gerado. A próxima opção

de parâmetro é a versão do kernel que você compilou.

O initrd é utilizado mais para kernel's genéricos que acompanham as

distribuições Linux. As distribuições são lançadas com kernel's genéricos para suportar

o maior número de hardware possível.

Como o kernel novo foi instalado como um pacote Debian, é uma boa hora pra

usar mais uma facilidade da Debian: update-grub (se você ainda usa lilo, é uma boa

hora pra mudar :).

Instale o grub com:

# grub-install /dev/hda

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 43

Se for instalá-lo na MBR, isso cria um diretório /boot/grub. Depois disso, é só

rodar "update-grub" que ele gera um /boot/grub/menu.lst pra você. Se você já possui um

menu.lst, faça o backup e remova-o, a não ser que você tenha muitas modificações nele.

Edite o menu.lst, altere configurações como:

# kopt=root=/dev/hda3 ro

# groot=(hd0,0)

De acordo com seu sistema está configurado. Note que as linhas devem

permanecer comentadas ("#" no começo da linha), essas são meta-configurações.

Depois de acertar isso, rode update-grub de novo e... Ele gera as entradas no menu do

grub automaticamente, a partir das imagens de kernel instaladas e das meta-

configurações que você fez.

Reinicie o Sistema

Configurando e instalando um Boot Manager

É um programa que gerencia as partições que serão inicializadas em um sistema

computacional. As versões atuais deste programa são instaladas no Setor de Boot

Mestre (MBR - Master Boot Record) do disco rígido, fazendo com que um menu

interativo seja apresentado toda a vez em que você inicializa o micro, perguntando ao

usuário que partição ele deseja para boot. Se existir sistemas operacionais diferentes

instalados em partições separadas, conseqüentemente terá de escolher qual sistema

operacional o micro carregará em memória.

Iremos, portanto, configurar o nosso boot loader (responsável por carregar o

sistema) para que o kernel seja chamado na inicialização, juntamente com o atual.

LILO (Linux Loader)

É um aplicativo responsável pela carga (boot) do sistema operacional na

máquina, sendo que você pode trabalhar com ele tanto para discos IDE ou SCSI. Ele é

considerado o gerenciador de boot padrão dos sistemas Linux.

Instalando o LILO:

# apt-get install lilo

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 44

Editando seu arquivo de configuração:

# nano /etc/lilo.conf

Após terminar de instalar, execute o liloconfig.

Editando o seu arquivo de configuração:

# nano /etc/lilo.conf

Adicione as seguintes linhas ao final do arquivo:

--------------------------------------------------------------------------------------------------------

image=/boot/[caminho da imagem gerada]

label=”Novo Kernel”

initrd=/boot/initrd-2.6.x-i386-mwsf-1.img

read-only

--------------------------------------------------------------------------------------------------------

Para que as alterações sejam lidas pelo sistema, precisamos dar o comando lilo:

# lilo

GRUB

GRUB (GRant Unified Bootloader) é um outro gerenciador de boot,

desenvolvido pelo projeto GNU, também muito utilizado pelos sistemas Linux.

Assim como o Lilo, o Grub possui um arquivo centralizado para configurar o

menu utilizado por ele. Vamos editar este no arquivo:

# nano /boot/grub/menu.lst

Adicione as seguintes linhas ao final do arquivo:

--------------------------------------------------------------------------------------------------------

Title “Novo Kernel”

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 45

root (hd0,0)

kernel /boot/vmlinuz-2.6.x-i386-mwsf-1

initrd /boot//initrd-2.6.x-i386-mwsf-1.img

root=/dev/hdx1 ro

savedefault

boot

--------------------------------------------------------------------------------------------------------

Depois de alterar o arquivo, precisamos atualizar o GRUB na MBR:

# grub-install /dev/hdx

Após a atualização, reinicie o sistema.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 46

Uso do

Shell

Sistema Operacional GNU/Linux

SHELL

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 47

Usando o Shell

Qual é seu shell?

# echo $SHELL

Abrindo uma nova sessão para um usuário. Esta nova sessão assume o perfil do

usuário, com todas as características associadas a ele:

# login

Tem como função desconectar um usuário de uma determina sessão:

# logout

O objetivo é encerrar uma sessão de trabalho:

# exit

Desligar:

# halt

# shutdown -h now

# shutdown 18:00

# shutdown -h 10

# init 0

# shutdown <opções> <hora> <mensagem>

Reiniciar:

# reboot

# shutdown -r now

# shutdown -r 15 now

# init 6

Exibe a quantidade de tempo desde a última reinicialização do sistema:

# uptime

Página de manual e de informações sobre os comandos:

# man shutdown

ou

# info shutdown

Processos em tempo real:

# top

Processos em execução no sistema:

# ps aux

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 48

Matando um processo:

# kill -15 pid

Modificar data e hora do sistema:

# date MMDDHHMMYY

Atualizar a hora da bios de acordo com a hora do S.O: # hwclock -w

Arquitetura de máquina:

# arch

Mostra o diretório corrente:

# pwd

Comando que muda um subdiretório corrente a partir do diretório atual:

# cd [diretório]

# cd /root

# cd - (volta ao último diretório acessado)

# cd .. (acessa o diretório anterior na árvore de diretórios)

Este comando acima mudará o diretório atual de onde o usuário está. Há também

algumas abreviações de diretórios no Linux para facilitar a identificação, estes são:

Abreviação Significado . (ponto) Diretório atual .. (dois pontos) Diretório anterior ~ (til) Diretório HOME do usuário / (barra) Diretório Raiz - (hífen) Último diretório

Listar diretório:

/# ls

/# ls --color

Parâmetro Significado -l Lista os arquivos em formato detalhado. -a Lista os arquivos ocultos (que começam com um .) -h Exibe o tamanho num formato legível (combine com -l) -R Lista também os subdiretórios encontrados

Mostra o conteúdo detalhado do diretório:

# ls -lah

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 49

# ls –lah [diretório]

Mostra os arquivos no formato longo em ordem inversa de data:

#ls –ltr

#ls –ltr [diretório]

l = longo

t = date

r = inversa

Criar novo diretório:

# mkdir [diretório]

# mkdir free

Remover diretório vazio:

# rmdir [diretório]

Remover um diretório e todo o seu conteúdo (cuidado com este comando):

# rm –rf [diretório]

# rm –rf / ( Não faça isso! )

Mostra o tamanho do diretório em Megabytes

# du -msh

# du –msh [diretório]

du = É a abreviação de se referir a disk usage (uso do disco). Indica o espaço usado em

disco pelos arquivos ou diretórios dados. Sintaxe: du [diretório].

Indica onde estão os binários, fontes e páginas de manual de um comando dado:

# whereis ls

Indica o caminho completo para o comando dado:

# which ls

É geralmente utilizado para atualizar a hora e a data de um determinado arquivo.

Caso este arquivo não exista, ele será criado pelo touch, porém sem conteúdo algum. A

sua sintaxe do comando touch é:

Sintaxe: touch [opções] [arquivos]

# touch arquivo

Atualizando hora e data de um arquivo:

# touch -t YYYYMMDDhhmm arquivo

Listagem colorida:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 50

# ls - -color

# ls –color [diretório]

Criando um arquivo:

# : > [arquivo]

# : > linux

Criando vários arquivos:

# touch gnu linus unix hurd

Linkando arquivos:

ln -s [arquivo_origem] [link simbólico]

Este comando é usado para gerar links simbólicos, ou seja, que se comportam

como um arquivo ou diretório, mas são apenas redirecionadores que mandam seu

comando para outro arquivo ou diretório, por exemplo:

$ ln -s /etc /home/user/atalho

Este comando criará o link /home/user/atalho, se você digitar o comando ls -l

você verá que o diretório /home/user/atalho está apontando para /etc. Se você for para o

/home/user/atalho, você na verdade estará no /etc, mas como é um link, não há

diferença.

Movendo um arquivo:

# mv /root/debra /home/user/

Movendo um arquivo para o diretório local:

/home/user# mv /root/debra .

Copiando um arquivo:

# cp gnu /home/user/

# cp /root/gnu /home/user

Copiando um arquivo para o diretório local:

/home/user# cp /root/gnu .

Listando em detalhes todos os arquivos de um diretório:

# ls -lah

Listando em detalhes todos os arquivos de um diretório e exibe em cores

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 51

: # ls -lah --color

Simulação de resultado do comando:

-rw-r--r-- 2 user user 100k 2007-02-24 11:00 gnu

Exibe um calendário:

# cal

Mostra o conteúdo de um arquivo binário ou texto:

# cat gnu

Mostra o arquivo na ordem invertida de leitura:

# tac ian

Exibe as primeiras linhas de um determinado arquivo:

# head [arquivo]

# head –n [arquivo]

# head -3 gnu

Exibe as ultimas linhas de um determinado arquivo:

# tail [arquivo]

# tail –n [arquivo]

# tail -3 gnu

Localiza um determinado arquivo especificado:

# locate linus

Atualiza a base de dados do locate:

# updatedb

O comando cat possibilita exibir o texto de um arquivo. Com o more existirá

uma pausa a cada tela cheia, possibilitando a leitura do arquivo. Exemplo:

# cat [arquivo] | more

# more [arquivo]

Possibilita exibir o arquivo de maneira paginada, com opção de rolagem para

trás e para frente:

# cat /proc/cpuinfo | less

Para redirecionar a saída de um comando para o less use o pipe.

Exibindo um arquivo em linhas numeradas:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 52

# nl gnu

Contador de linhas, palavras e bytes:

# wc [opções] [arquivo]

# wc gnu

# wc -l gnu

# wc -w gnu

# wc -c gnu

Visualiza de forma crescente as informações do arquivo:

# sort gnu

Visualiza de forma decrescente as informações do arquivo:

# sort -r gnu

Mostra informações de um arquivo:

# file [arquivo]

# file gnu

Indica o tipo de arquivo:

# type [arquivo]

# type gnu

Mostra inode com atributos MAC (Modify, Access, Changes):

# stat [arquivo]

# stat gnu

Exibe a árvore de diretórios:

/# tree

Para exibir informações do sistema, tais como: o sistema operacional, versão do

kernel, arquitetura da máquina e muitos outros:

# uname [opções]

Versão de kernel: # uname -r

Arquitetura de máquina: # uname -m

Mostra o hostname: # uname -n

Mostra o tipo de processador: # uname -p

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 53

Mostra a data da versão do kernel: # uname -v

Mostra o nome do Sistema Operacional: # uname -o

Mostra o nome do Kernel: # uname -s

Mostra uma listagem de entrada e saída de usuários no sistema:

# last

Exibe o histórico:

# history

Logins mal sucedidos:

# lastb

Alias e Variáveis

Alias O que é alias?

Alias significa atalho, “nome falso” ou “pseudônimo” e pode ajudar em muito

sua vida no Linux.

Um alias para todos os usuários você edita em: # vi /etc/bash.bashrc

Um alias para root você edita em: # vi /root/.bashrc

Atualize o arquivo toda vez que você adicionar conteúdo ao arquivo: source /etc/bash.bashrc

ou source /root/.bashrc

Exemplos: alias opencd=”eject; sleep 5s; eject -t”

alias ls=”ls --color -lah”

OBS: sempre editar ao final do arquivo. Variáveis

O shell é executado no sistema controlado por variáveis de ambiente (espaços de

memória que armazenam valores), as mesmas podem ser:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 54

Variáveis locais - são as variáveis disponíveis somente pelo shell corrente e que

não está sendo acessado por subprocessos do sistema.

Variáveis globais - estão disponíveis tanto para o shell corrente como para os

subprocessos que fazem uso delas.

Descrição de algumas variáveis de ambiente, que são importantes para facilitar o

entendimento:

HOME - Esta variável identifica o diretório do usuário doméstico, use o

comando echo $HOME para saber qual é o seu diretório HOME.

PATH - Esta é a variável de ambiente que define quais diretórios pesquisar e a

ordem na qual eles são pesquisados para encontrar um determinado comando,

para saber como o sistema faz esta pesquisa e quais diretórios ele procura um

comando use o comando echo $PATH.

OSTYPE - Essa variável define o tipo de sistema operacional em uso. Para

saber qual é o sistema operacional em uso use o comando echo $OSTYPE.

SHELL - Esta variável identifica qual shell está sendo usado, use o comando

echo $SHELL para saber qual é o shell que o seu sistema está usando.

TERM - Esta variável define o tipo de terminal que está sendo usado, use o

comando echo $TERM para saber qual o tipo de terminal está sendo usado pelo

sistema.

USER - Pré-define o nome de conta como variável de ambiente, ou seja, ao se

logar ao sistema a ID do usuário é combinada com um nome de conta, para

saber qual é o usuário corrente use o comando echo USER.

MAIL - Esta é a variável de correio eletrônico. Para saber como seu mail está

definido use o comando echo $MAIL.

LOGNAME - Esta variável é um sinônimo para USER. Para saber qual é o seu

logname use o comando echo $LOGNAME.

Existem vários tipos de shell, entre os quais podemos visualizá-los no arquivo

/etc/shells com os seguintes comandos:

# cat /etc/shells

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 55

Para visualizar as variáveis de ambiente no sistema podemos utilizar os

comandos a seguir:

Variáveis locais:

$ set

Variáveis globais:

$ env

ou

$ printenv

Para atribuir um valor a uma variável local. Exemplo:

$ LINUX=free

$ echo $LINUX

free

O comando echo exibe o valor de uma variável de ambiente.

Vamos verificar se a variável aparece na relação de variáveis locais. Exemplo:

$ set | grep LINUX

LINUX=free

Agora vamos transformar esta variável local uma variável global. Para isso

devemos usar o comando export:

# export LINUX

# env | grep LINUX

LINUX=free

Para deletar uma variável de ambiente, usamos o comando unset e para

verificarmos se a variável foi excluída usaremos o comando echo. Exemplo:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 56

# unset LINUX

# echo $LINUX

Agora vamos editar o nosso prompt de comando que é representado pela variável PS1. Podemos utilizar os seguintes argumentos para esta tarefa:

Argumento Descrição \h Host da máquina. \W Diretório corrente. \w Caminho completo do diretório corrente. \u Nome do usuário. \t Hora do sistema. \d Data. \\$ $ para usuário comum e # para root.

# export PS1="[\h@\w]\\$" [trabalho@~]#

Observe que o prompt mudará, ele deve mostrar o host (trabalho), o caminho completo do diretório corrente (~) e o tipo de caractere que faz referência ao prompt.

Podemos criar variáveis globais editando-as no arquivo /etc/profile:

# vi /etc/profile

Podemos criar variáveis que são executadas somente no ambiente do usuário editando o arquivo ~/.bash_profile, sendo executadas automaticamente no login:

# vi /home/user/.bash_profile

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 57

Introdução a programação em Shell Script

Passos para criar um Shell Script

Escolha um nome para o script

Use apenas letras minúsculas e evite acentos, símbolos e espaço em branco.

nome: sistema

Escolha o diretório onde colocar o script

Para que o script possa ser executado de qualquer parte do sistema, mova−o para

um diretório que esteja no seu PATH. Para ver quais são estes diretórios, use o

comando:

echo $PATH

Se não tiver permissão de mover para um diretório do PATH, deixe−o dentro de

seu HOME.

Crie o arquivo e coloque nele os comandos

Use o editor de textos de sua preferência para colocar todos os comandos dentro

do arquivo.

Coloque a chamada do Shell na primeira linha

A primeira linha do script deve conter: # !/bin/bash para que ao ser executado, o

sistema saiba que é o Shell quem irá interpretar estes comandos.

Torne o script um arquivo executável

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 58

Use o seguinte comando para que seu script seja reconhecido pelo sistema como um

comando executável:

chmod +x sistema

Problemas na execução do Script

"Comando não encontrado"

Descrição:

O Shell não encontrou o seu script. Verifique se o comando que você está chamando

tem exatamente o mesmo nome do seu script. Lembre−se que no Linux as letras

maiúsculas e minúsculas são diferentes, então o comando "SISTEMA" é diferente do

comando "sistema".

Caso o nome esteja correto, verifique se ele está no PATH do sistema. O

comando echo $PATH mostra quais são os diretórios conhecidos, mova seu script para

dentro de um deles, ou chame−o passando o caminho completo.

Se o script estiver no diretório corrente, chame−o com um ./ na frente. Exemplo:

$ ./sistema

Caso contrário especifique o caminho completo desde o diretório raiz:

$ /tmp/scripts/sistema

"Permissão Negada"

Descrição:

O Shell encontrou seu script, mas ele não é executável.

Use o comando chmod +x nome_escript para torná−lo um arquivo executável.

"Erro de Sintaxe"

Descrição:

O Shell encontrou e executou seu script, porém ele tem erros.

Um script só é executado quando sua sintaxe está 100% correta. Verifique os

seus comandos, o erro pode ser algum IF ou aspas que foram abertos e não foram

fechados. A própria mensagem informa o número da linha onde o erro foi encontrado.

Criando um Shell Script

Após ler e executar os passos para a criação de um Shell Script, você já sabe o

básico para fazer um script em Shell do zero e executá−lo.

O Shell Script que vamos criar serve para melhorar a saída de algumas ações.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 59

Executar vários comandos seguidos resulta num bolo de texto na tela,

misturando as informações e dificultando o entendimento. Vamos trabalhar um pouco,

fazendo a saída do script de uma forma legível.

O comando echo serve para mostrar mensagens na tela. Vamos criar uma

mensagem de cada comando antes de executá-lo:

Crie um diretório:

mkdir /tmp/shells

Acesse o diretório:

cd /tmp/shells

Escreva o arquivo:

nano msg.sh

Para usar o echo, basta colocar o texto entre "aspas". Se nenhum texto for

colocado, uma linha em branco será exibida.

Para o script ficar melhor, vamos colocar uma interação com o usuário,

solicitando uma confirmação antes de executar os comandos:

O comando "read" leu o que o usuário digitou e guardou na variável

RESPOSTA. Logo em seguida, o comando "test" checou se o conteúdo dessa variável

era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa

linha há vários detalhes importantes:

O conteúdo da variável é acessado colocando−se um cifrão "$" na frente;

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 60

O comando test é muito útil para fazer vários tipos de checagens em textos e arquivos;

O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||".

Com o tempo, os scripts crescem e quanto maior, mais difícil encontrar o ponto

certo onde fazer a alteração ou corrigir algum erro.

Para poupar horas de estresse e facilitar as manutenções futuras, é necessário

deixar o código visualmente mais agradável e espaçado, devemos colocar comentários

esclarecedores.

Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida.

Estas linhas são ignoradas pelo Shell durante a execução. O cabeçalho com informações

sobre o script e seu autor também é importante para se ter uma visão geral do que o

script faz, sem precisar decifrar seu código. Exemplo:

Alguns dos conceitos vistos no script anterior

Variáveis As variáveis são a base de qualquer script. É dentro delas que os dados obtidos

durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa−se o "echo":

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 61

Não podem haver espaços ao redor do igual "=" Ainda é possível armazenar a saída de um comando dentro de uma variável. Ao

invés de aspas, o comando deve ser colocado entre "$(...)", veja:

O comando "unset" apaga uma variável. Para ver quais as variáveis que o Shell já define por padrão, use o comando:

env

Trabalhando com modos de inicialização

Processo init

O init é o primeiro processo iniciado no Linux, logo após a carga do kernel do

sistema. Quando é disparado, o init continua a carga do sistema, geralmente executando

vários scripts que irão verificar e montar sistemas de arquivos, configurar teclado e

iniciar servidores, entre outras tarefas.

O init utilizado no Linux permite que existam diversos níveis de execução no

sistema. Um nível de execução é uma configuração de software do sistema que define

quais processos devem ser inicializados e quais não devem, e também de que modo são

inicializados.

O administrador do sistema é quem define qual será o nível de execução em que

o sistema e os processos serão executados.

Runlevels

Toda a inicialização do sistema é baseada em runlevels, ou seja, níveis de

execução. Os sistemas Linux possuem 6 runlevels:

Níveis de Execução Ação 0 desligar o sistema 1 modo monousuário, também chamado de modo single2 modo multiusuário, texto 3 modo multiusuário, texto, com serviços 4 não utilizado 5 modo gráfico (X11) 6 reinicializar o sistema

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 62

A descrição do sistema de runlevels normalmente pode ser encontrada no

arquivo /etc/inittab, onde você também poderá alterar o runlevel padrão do sistema.

Alguns runlevels que merecem destaque são o 1, 3 e 5.

O runlevel 1 nunca deve ser utilizado, a não ser para manutenção do sistema,

devido a falta total de segurança.

O runlevel 3 é o mais comum.

O runlevel 5 é o mais indicado para usuários novatos, que dependem

completamente do sistema gráfico para trabalhar. Com o uso do runlevel 5, gasta

recursos de máquina, se a sua placa de vídeo estiver configurada incorretamente, o

servidor X tentará forçar a inicialização gráfica e sua tela ocasionalmente ficará

piscando, tornando impossível qualquer comunicação com o sistema, o que também

dificultará a reconfiguração da placa de vídeo.

Editando o arquivo: nano /etc/inittab

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 63

Configurando

e gerenciando

Hardware

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 64

Identificação de discos e partições em sistemas GNU/Linux

No GNU/Linux, os dispositivos existentes em seu computador (como discos

rígidos, disquetes, tela, portas de impressora, modem, etc) são identificados por um

arquivo referente a este dispositivo no diretório /dev.

A identificação de discos rígidos no GNU/Linux é feita da seguinte forma:

/dev/hda1 | | | | | | | |_Número que identifica o número da partição no disco rígido. | | | | | |_Letra que identifica o disco rígido (a=primeiro, b=segundo, etc...). | | | |_Sigla que identifica o tipo do disco rígido (hd=ide, sd=SCSI, xt=XT). | |_Diretório onde são armazenados os dispositivos existentes no sistema.

Abaixo algumas identificações de discos e partições em sistemas Linux:

• /dev/fd0 - Primeira unidade de disquetes.

• /dev/fd1 - Segunda unidade de disquetes.

• /dev/hda - Primeiro disco rígido na primeira controladora IDE do micro (primary master).

• /dev/hda1 - Primeira partição do primeiro disco rígido IDE.

• /dev/hdb - Segundo disco rígido na primeira controladora IDE do micro (primary slave).

• /dev/hdb1 - Primeira partição do segundo disco rígido IDE.

• /dev/sda - Primeiro disco rígido na primeira controladora SCSI.

• /dev/sda1 - Primeira partição do primeiro disco rígido SCSI.

• /dev/sdb - Segundo disco rígido na primeira controladora SCSI.

• /dev/sdb1 - Primeira partição do segundo disco rígido SCSI.

• /dev/sr0 - Primeiro CD-ROM SCSI.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 65

• /dev/sr1 - Segundo CD-ROM SCSI.

• /dev/xda - Primeiro disco rígido XT.

• /dev/xdb - Segundo disco rígido XT.

As letras de identificação de discos rígidos podem ir além de hdb, em meu

micro, por exemplo, a unidade de CD-ROM está localizada em /dev/hdg (Primeiro

disco - quarta controladora IDE).

É importante entender como os discos e partições são identificados no sistema,

pois será necessário usar os parâmetros corretos para monta-los.

Referência sobre algumas identificações de discos e partições em Sistemas

Linux:

http://focalinux.cipsga.org.br/guia/intermediario/ch-disc.htm

Recomendações para configuração e armazenamento de dados

Há várias vantagens, e algumas poucas desvantagens, em se usar um esquema de

particionamento. Neste curso usaremos um aspecto do particionamento do disco rígido

de um servidor Linux, tendo em vista aspectos de segurança.

Observe o esquema de particionamento, as recomendações direcionam a um

esquema para particionar:

Partição Tamanho / 250 MB /var 2 ou 3 GB /usr 4 a 6 GB /tmp 100 MB /swap 2 x RAM /home 100 MB por usuário

/home swap /tmp /usr /var

/

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 66

Gerenciando Hardware

Partições montadas automaticamente no processo de boot:

# cat /etc/fstab

Mostra os sistemas de arquivos montados:

# df

# df -h

Gerenciador de partições no HD:

# cfdisk

# fdisk

Criando uma partição com o cfdisk:

Selecione o ESPAÇO LIVRE

New

Primary

Write

Quit

REBOOT

# mkfs.ext3 /dev/hda4

# mkdir /partition

# vi /etc/fstab

/dev/hda4 /partition ext3 defaults 0 2

Informações sobre o hardware de sua máquina:

# lspci

# scanpci

Informações de processamento /proc:

# cd /proc

Exemplo:

# cat /proc/bus/pci/devices

Verificando uma placa:

# lspci | grep audio

Verificando as irqs que estão sendo utilizadas:

# cat /proc/interrupts

Verificando endereços de I/O que estão sendo utilizados:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 67

# cat /proc/ioports

Verificando informações de processamento:

# cat /proc/cpuinfo

Sabendo qual é a sua partição swap:

# cat /proc/swaps

Verificando detalhes de memória:

# cat /proc/meminfo

Configurando o teclado:

# loadkeys -d br-abnt2

# loadkeys -d us

Configurando o mouse serial:

# apt-get install gpm

# gpm -m /dev/ttySO -t ms3

/dev/ttySO => corresponde a porta serial 1

ms3 => o mouse que tem a barra de rolamento no meio

Mouse PS/2: gpm -m /dev/psaux -t ms3

Montando um CDROM:

# mount /dev/cdrom /media/cdrom

Montando um pendrive:

# mkdir /media/pen

# mount /dev/sda /media/pen

Formatando uma partição que você criou:

# mkfs -t ext3 /dev/hda4

# mkfs.ext3 /dev/hda4

Montando a partição:

# mkdir /mnt/aula

# mount -t ext3 /dev/hda4 /mnt/aula

Desmontando uma partição:

# umount /dev/cdrom

# umount /mnt/aula

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 68

Conhecendo os módulos de componentes da CPU

Lista os módulos em memória:

# lsmod

# cat /etc/modules

Identifica um hardware:

# lspci | grep -i ethernet

Informações do módulo:

# modinfo sis900

Verifica se tem suporte ao módulo:

# modprobe -l | grep -i sis900

Subindo o módulo:

# modprobe sis900

Verifica todo o relatório se a placa subiu:

# dmesg | grep sis900

Consulta se o módulo está carregado:

# lsmod | grep sis900

Adiconando o módulo ao boot:

# echo “nomedomódulo” >> /etc/modules

módulos

Modprobe -r snd_intel8x0 Remove considerando

dependências

rmmod snd_intel8x0 Remove sem considerar

dependências

S.O

modprobe snd_intel8x0

Levanta considerando dependências

insmod snd_intel8x0 Levanta sem considerar

dependências

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 69

Configuração de dispositivo Wireless LAN Referência: www.guiadohardware.net

Depois dos modems, as placas wireless são provavelmente a categoria de

periféricos que mais causam dores de cabeça no Linux. Quase todas as placas

funcionam no Linux de uma forma ou de outra, mas muitas usam drivers ou firmwares

binários, que, assim como no caso dos softmodems, precisam ser instalados

manualmente.

Com relação aos drivers, as placas wireless podem ser divididas em dois grupos:

O primeiro é o das placas com drivers nativos, como as com chipset

Prism, Lucent Wavelan (usado, por exemplo, nas placas Oricono),

Atmel, Atheros, Intel IPW2100 e IPW2200, ACX100 e 111 e,

recentemente, também as Ralink e Realtek 8180.

O segundo grupo é o das placas que não possuem drivers nativos, mas

podem ser usadas através do Ndiswrapper, que permite ativar a placa

usando o driver do Windows.

Muitos dos drivers são parcialmente proprietários, outros são completamente

abertos, mas precisam do arquivo de firmware da placa, que por sua vez é proprietário.

Muitas distribuições incluem um conjunto bastante reduzido de drivers por padrão,

outras incluem os drivers, mas não incluem os firmwares, que são igualmente

necessários.

OBS: para usar qualquer placa wireless no Linux, você deve ter instalado o pacote

"wireless-tools", que contém os comandos necessários para configurar a placa, como o

iwconfig. Hoje em dia, quase todas as distribuições o instalam por padrão, mas não

custa verificar.

Ndiswrapper

O Ndiswrapper é uma espécie de Wine para drivers de placas de rede wireless.

Ele funciona como uma camada de abstração entre driver e o sistema operacional,

permitindo que placas originalmente não suportadas no Linux funcionem usando os

drivers do Windows.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 70

Você pode encontrar várias dicas sobre placas testadas por outros usuários do

Ndiswrapper no: http://ndiswrapper.sourceforge.net/wiki/index.php/List .

Cada placa é diferente; por isso, os drivers de uma não funcionam na outra. Mas,

todos os drivers conversam com o sistema operacional usando uma linguagem

específica de comandos. Ou seja, do ponto de vista do sistema operacional todos os

drivers são parecidos.

O Ndiswrapper consegue executar o driver e "conversar" com ele usando esta

linguagem. Ele trabalha como um intérprete, convertendo os comandos enviados pelo

Kernel do Linux em comandos que o driver entende e vice-versa.

O Ndiswrapper não funciona com todas as placas e, em outras, alguns recursos

como o WPA não funcionam. Apesar disso, na maior parte dos casos ele faz um bom

trabalho.

A versão mais recente pode ser baixada no:

SourceForge.net: ndiswrapper

Para compilar o pacote você precisa ter instalados os pacotes kernel-headers e/ou

kernel-source e os compiladores.

Descompacte o arquivo e acesse a pasta que será criada. Para compilar e instalar,

basta rodar o comando:

# make install

O Ndiswrapper é composto de basicamente dois componentes:

Um módulo, o ndiswrapper.ko (ou ndiswrapper.o se você estiver usando

uma distribuição com o Kernel 2.4), que vai na pasta

"/lib/modules/2.x.x/misc/".

Um executável, também chamado "ndiswrapper", que é usado para

configurar o driver, apontar a localização do driver Windows que será

usado, etc.

Se você estiver usando uma distribuição que já venha com uma versão antiga do

Ndiswrapper instalada, você deve primeiro remover o pacote antes de instalar uma

versão mais atual.

Caso a localização do módulo ou do executável no pacote da distribuição seja

diferente, pode acontecer de continuar sendo usado o driver antigo, mesmo depois que o

novo estiver instalado.

Depois de instalar o Ndiswrapper, o próximo passo é rodar o comando:

# depmod -a

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 71

O comando serve para que a lista de módulos do Kernel seja atualizada e o novo

módulo seja realmente instalado. Isto é normalmente feito automaticamente pelo script

de instalação, é apenas uma precaução.

Antes de ativar o Ndiswrapper você deve apontar a localização do arquivo ".inf"

dentro da pasta com os drivers para Windows para a sua placa. Em geral os drivers para

Windows XP são os que funcionam melhor, seguidos pelos drivers para Windows 2000.

Você pode usar os próprios drivers incluídos no CD de instalação da placa. Se eles não

funcionarem, experimente baixar o driver mais atual no site do fabricante, ou pesquisar

uma versão de driver testada no ndiswapper no:

http://ndiswrapper.sourceforge.net/wiki/index.php/List

Para carregar o arquivo do driver rode o comando, seguido do caminho completo

para o arquivo:

# ndiswrapper -i /mnt/hda6/Driver/WinXP/GPLUS.inf

Verificando se o drive foi mesmo ativado:

# ndiswrapper –l

Se o driver estiver carregado, carregue o módulo:

Antes de carregar o módulo da placa. Você deve carregar o módulo genérico

“wlan”.

# modprobe ndiswrapper

O led da placa irá acender se tudo estiver OK, indicando que ela está ativa.

Se a placa não for ativada, você ainda pode tentar uma versão diferente do

driver. Você precisa primeiro descarregar o primeiro driver. Rode o ndiswrapper -l para

ver o nome do driver e em seguida descarregue-o com o comando:

# ndiswrapper –e [nome_driver]

Para que a configuração seja salva e o Ndiswrapper seja carregado durante o

boot, você deve rodar o comando:

# ndiswrapper –m

Em seguida, adicione a linha “ndiswrapper” no final do arquivo

"/etc/modules", para que o módulo seja carregado no boot.

Você pode fazer a configuração utilizando o “ndisgtk”, um utilitário gráfico,

disponível nos repositórios do Debian, no Ubuntu e em outras distribuições.

---------------------------------------------------------------------------------------------------------

Configurando uma rede wireless no Linux

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 72

Numa rede wireless, o dispositivo central é o access point (ponto de acesso). Ele

é ligado no hub da rede, ou diretamente no modem ADSL ou cable, e se encarrega de

distribuir o sinal para os clientes.

Ao contrário de um hub, que é um dispositivo "burro", que trabalha apenas no

nível físico e dispensa de configuração, o access point possui sempre uma interface de

configuração, que pode ser acessada via navegador, a partir de qualquer um dos micros

da rede. Basta acessar o endereço IP do access point, veja no manual qual é o endereço

padrão do seu.

Se o endereço for 192.168.1.254 por exemplo, configure seu micro para usar um

endereço dentro da mesma faixa (192.168.1.50 por exemplo), de forma que ele faça

parte da mesma rede que ele. Depois de acessar da primeira vez, aproveite para definir

uma senha de acesso e alterar o endereço padrão por um dentro da faixa de endereços IP

usada na sua rede.

Para detectar os pontos de acesso disponíveis (a partir do cliente), use o

comando: # iwlist wlan0 scan Lembre-se que, dependendo do driver usado, o dispositivo de rede usado será diferente. Ao utilizar o driver para placas ADM8211 por exemplo, a placa wireless será vista pelo

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 73

sistema como "eth0", e não como "wlan0", que seria o mais comum. Para que o comando funcione, é preciso que a placa esteja ativada. se necessário, antes de executá-lo use o comando:

# ifconfig wlan0 up

Se você estiver dentro do alcance de algum ponto de acesso, o iwlist lhe retorna um relatório.

# iwlist wlan0 scan

Se houver algum ponto de acesso dentro da área de alcance. Faltará apenas configurar a placa para se conectar a ele.

Veja um exemplo, de ponto de acesso com a encriptação via Wep ativa (Encryption key:on) e não está divulgando seu ESSID (ESSID:""). Este é um exemplo de configuração de um ponto de acesso não público, onde é necessário saber ambas as informações para se conectar à rede.

Um exemplo de resultado ao escanear uma rede pública, onde o objetivo é permitir que os clientes conectem-se da forma mais simples possível.

Neste caso estão disponíveis dois pontos de acesso, ambos usam o ESSID "vex"

e ambos estão com a encriptação de dados desativada (Encryption key:off). Por usarem

o mesmo ESSID, eles fazem parte da mesma rede, por isso você não precisa especificar

em qual deles quer se conectar. Basta configurar a rede wireless e, em seguida, obter a

configuração da rede via DHCP.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 74

Em outra situação, pode haver mais de uma operadora oferecendo acesso no

mesmo local, ou mesmo outros pontos de acesso de particulares, que intencionalmente

ou não estejam com a encriptação desativada, oferecendo acesso público. Neste caso,

você escolhe em qual rede quer se conectar especificando o ESSID correto na

configuração da rede.

É comum também que os pontos de acesso sejam configurados para usar um

canal específico, neste caso, ao rodar o "iwlist wlan0 scan" você verá também uma

linha "channell=x", onde o x indica o número do canal, que também precisa ser

especificado na configuração da rede.

Tome cuidado ao se conectar a pontos de acesso público. Com a encriptação

desativada, todos os dados transmitidos através da rede podem ser capturados com

muita facilidade por qualquer um dentro da área de alcance. Lembre-se de que o alcance

de uma rede wireless cresce de acordo com a potência da antena usada no cliente. Com

uma antena de alto alcance, é possível se conectar a um ponto de acesso a 500 metros de

distância, ou até mais, caso não exista nenhum tipo de obstáculo pelo caminho.

Sempre que precisar transferir arquivos, use um protocolo que transmita os

dados de forma encriptada (como o SSH). Jamais dê upload de arquivos para o servidor

do seu site via FTP. Acesse e-mails apenas em servidores que oferecem suporte a pop3

com SSL. Não acesse páginas de bancos, pois a encriptação usada nos navegadores

pode ser quebrada com uma relativa facilidade, e obter senhas bancárias é o tipo de

situação onde o trabalho necessário vale a pena.

Existem sniffers bastante poderosos, como o kismet, que podem descobrir

muitas informações sobre a rede, incluindo o ESSID e a chave de encriptação em pouco

tempo, principalmente ao usar chaves de encriptação Wep de 64 bits. Você pode baixá-

lo no: http://www.kismetwireless.net/

Ele oferece um conjunto bastante completo de testes de segurança, que podem

tanto ser usados para verificar a segurança da sua própria rede, quanto invadir redes mal

configuradas. O principal obstáculo para usar o Kismet é que ele é compatível com um

número relativamente pequeno de placas, basicamente apenas modelos baseados nos

chips Orinoco, Prism, Intel IPW 2100, Atheros e Aironet. Ele não funciona, por

exemplo, em conjunto com as placas suportadas através do ndiswrapper.

ESSID

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 75

A primeira configuração necessária para se conectar à rede é o ESSID, o código

de identificação da rede (definido na configuração do ponto de acesso), que deve ser

fornecido pelo cliente ao se conectar no ponto de acesso.

Se o ESSID da sua rede fosse "aula", por exemplo, o comando seria:

# iwconfig wlan0 essid aula

Lembre-se sempre de verificar qual é o dispositivo usado pela sua placa de rede

wireless, ele varia de acordo com o driver usado (a placa pode ser vista pelo sistema

como wlan0, ath0 ou mesmo eth0). Você pode verificar isso rapidamente rodando o

comando ifconfig.

Canal

Caso você tenha configurado o ponto de acesso para utilizar um canal específico,

configure a placa para utilizá-lo com o comando:

# iwconfig wlan0 channel 10

A lista dos canais disponíveis varia de acordo com a configuração de país no

ponto de acesso. Em teoria, podem ser usados 17 canais, de 0 a 16. Porém, apenas 14

deles, de 1 a 14 são licenciados pelo FCC e a lista diminui mais um pouco de acordo

com o país escolhido. Nos EUA é permitido o uso dos canais de 1 a 11, na Europa de 1

a 13 e no Japão de 1 a 14. Até na data 07/03/2007, não existia legislação sobre isso no

Brasil, mas é provável que seja seguido o padrão dos EUA.

Usar canais diferentes é uma forma de minimizar interferências caso você esteja

colocando vários pontos de acesso dentro da mesma área, ou perceba que existem

pontos de acesso de vizinhos, muito próximos do seu.

Existe uma diferença de freqüência de apenas 5 MHz entre cada canal, porém o

sinal das placas 802.11b ocupa uma faixa de 30 MHz. Por isso, para que realmente não

exista possibilidade de interferência entre dois pontos de acesso próximos, é preciso

usar canais distantes, como por exemplo 1, 6 e 11 ou 1, 7 e 14.

De qualquer forma, a moral da história é que, independentemente do canal

usado, é preciso usar o mesmo tanto na configuração do ponto de acesso quanto na

configuração dos clientes para que a rede funcione.

Encriptação WEP

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 76

Caso você tenha ativado a encriptação via Wep no ponto de acesso, configure a

chave usada. Na configuração do ponto de acesso você tem a opção de criar uma chave

usando caracteres hexadecimais (onde temos 16 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,

C, D, E, F e cada dígito equivale a 4 bits) ou usar caracteres ASCII, onde é possível

misturar letras, números caracteres especiais.

Ao usar caracteres hexadecimais, a chave terá 10 dígitos (123456789A no

exemplo) e o comando será:

# iwconfig wlan0 key restricted 123456789A

Se a chave for em ASCII, onde cada caracter equivale a 8 bits, a chave terá

apenas 5 dígitos (qwert no exemplo) e o comando será:

# iwconfig wlan0 key restricted s:qwert

Ao usar uma chave em ASCII você precisa adicionar o "s:" antes da chave. Se

você tiver configurado o ponto de acesso para usar uma chave de 128 bits (a segurança

contra acessos não autorizados é muito maior), então a chave terá 26 dígitos em hexa ou

13 em ACSII.

10 caracteres hexadecimais formam uma chave de apenas 40 bits (4 por

caracter). Este é justamente o problema fundamental das chaves de 64 bits: na verdade,

são duas chaves separadas, uma de 40 bits e outra de 24 bits (chamada de vetor de

inicialização), muito fácil de quebrar depois que a primeira é descoberta. Uma chave de

64 bits sem problemas óbvios poderia oferecer uma segurança aceitável, mas uma chave

de 40 bits é fraca em todos os aspectos. No caso das chaves de 128 bits, a chave de

encriptação tem 104 bits, com mais os mesmos 24 bits do vetor.

Ativando a rede

Depois de terminar a configuração inicial, você pode ativar a interface com o

comando:

# ifconfig wlan0 up

O último passo é configurar os endereços da rede, da mesma forma que seria

feito em uma placa convencional.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 77

Configurando também a rede manualmente, use os comandos:

# ifconfig wlan0 192.168.0.2 netmask 255.255.255.0

# route del default

# route add default wlan0

# route add default gw 192.168.0.1 (remove qualquer configuração anterior, colocando a placa wireless como rota padrão do sistema e configurando o gateway da rede).

Se preferir configurar a rede via DHCP, rode o comando:

# dhcpcd wlan0

Não se esqueça de configurar também os endereços dos servidores DNS no

arquivo "/etc/resolv.conf". Um exemplo de configuração do arquivo é:

# cat /etc/resolv.conf

nameserver 200.199.252.68

nameserver 200.248.155.11

nameserver 200.199.201.23

Com a rede funcionando, você pode monitorar a qualidade do link, taxa de

transmissão de dados, tipo de encriptação, informações sobre o ponto de acesso, entre

outros detalhes da conexão usando o "wavemon", um pequeno utilitário incluído na

maioria das distribuições.

Ativando durante a inicialização

O próximo passo ao configurar manualmente é fazer com que a configuração

seja carregada durante o boot. Muitos utilitários de configuração (como o Kwifimanager

que veremos adiante) fazem isso para você.

Mas, se você preferir do jeito mais ortodoxo, crie o arquivo

"/etc/sysconfig/network-scripts/ifcfg-wlan0". Todos os arquivos dentro da pasta

/etc/sysconfig/network-scripts/ são lidos durante o boot. Você verá um arquivo separado

para cada placa de rede instalada no sistema. O arquivo ifcfg-eth0 configura a placa

eth0 e assim por diante.

Crie o arquivo de acordo com o nome com que sua placa é reconhecida pelo

sistema. Se a sua placa é reconhecida como "ath0", por exemplo, o arquivo será o

"ifcfg-ath0".

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 78

Dentro do arquivo vão os parâmetros da rede, como em:

DEVICE=wlan0

ONBOOT=yes

BOOTPROTO=dhcp

TYPE=Wireless

MODE=Managed

ESSID="casa"

CHANNEL=10

IPADDR=

DOMAIN=

NETMASK=255.255.255.0

GATEWAY=192.168.0.1

USERCTL=no

PEERDNS=no

IPV6INIT=no

RATE=Auto

Ou:

DEVICE=wlan0

ONBOOT=yes

TYPE=Wireless

MODE=Managed

ESSID="casa"

CHANNEL=10

IPADDR=192.168.0.2

NETMASK=255.255.255.0

NETWORK=192.168.1.0

BROADCAST=192.168.0.255

GATEWAY=192.168.0.1

USERCTL=no

PEERDNS=no

IPV6INIT=no

RATE=Auto

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 79

Você pode também criar um script com os comandos para fazer a configuração

manual e executá-lo manualmente quando quiser usar a rede wireless, como por

exemplo o caso de quem tem um notebook que fica a maior parte do tempo plugado na

rede de 100 megabits da empresa, mas que em casa usa uma rede wireless.

Neste caso, crie um arquivo de texto, como por exemplo /home/usuario/wireless.

Dentro dele vão os comandos, um por linha, como em:

#!/bin/sh

iwconfig wlan0 essid casa

iwconfig wlan0 channel 10

iwconfig wlan0 key restricted 1234567890

ifconfig wlan0 up

ifconfig wlan0 192.168.0.2 netmask 255.255.255.0

route del default

route add default wlan0

route add default gw 192.168.0.1

Transforme o arquivo num executável com o comando "chmod +x

/home/usuario/wireless" e execute-o (como root) sempre que quiser ativar a rede

wireless. Você pode ter vários arquivos diferentes caso precise se conectar a várias

redes com configurações diferentes.

Se você usar ao mesmo tempo uma placa de rede cabeada e uma placa wireless e

o acesso pela placa wireless fique intermitente, com a configuração caindo poucos

minutos depois de configurada a rede, experimente começar a desativar a placa cabeada

ao configurar a rede wireless.

Este é um problema freqüente, principalmente ao utilizar o ndiswrapper, mas

felizmente fácil de resolver. Antes de configurar a placa wireless, desative a placa

cabeada. Se a placa cabeada é a eth0 por exemplo, rode o comando:

# ifconfig eth0 down

Você pode adicionar o comando no seu script de configuração da rede, para que

ele seja executado sempre antes dos comandos que configuram a placa wireless.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 80

Criando e manipulando texto com o

Editor

Vi

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 81

"vi" é a sigla para "Visual Interface". A origem desse nome se deve ao seguinte

fato: quando o vi foi criado (começo da década de 80), não era comum existirem

editores de textos como nos dias de hoje. Naquela época, você digitava um texto mas

não podia vê-lo. Em 1992, foi criado o vim (Vi IMitator), um clone fiel ao vi, porém

com muitas outras funcionalidades, que só foram sendo adicionadas. Algum tempo

depois, o vim passou a ser chamado de `Vi IMproved' (vi melhorado).

O vim é um dos editores de textos mais utilizados no mundo Unix. Em alguns

sistemas, existe um link simbólico (/bin/vi) apontando para o /usr/vim. Em outros, o

/bin/vi é o executável, só que executa diretamente o vim. Muita gente acha que usa vi,

mas na verdade utiliza o vim, e eles têm algumas diferenças. O que você verá abaixo

fala sobre o vim.

O vim é um editor de textos muito poderoso, ele pode: abrir vários arquivos ao

mesmo tempo, possui sistema de autocorreção, autoidentação, seleção visual, macros,

seleção vertical de texto, uso de expressões regulares, sintaxe colorida, e muito mais.

Ele não é exclusivo do Unix, ou seja, pode ser executado em outras plataformas, como:

MacOS, Sun, Windows entre outras.

Existe também o gvim, que é o vim em modo gráfico, com todas as

funcionalidades do vim em pleno funcionamento, o que muda é apenas o modo gráfico

mesmo.

O vim possui vários modos, ou seja, estados em que ele se encontra. São eles:

modo de inserção, comandos, linha de comando, visual, busca e reposição.

Abordaremos alguns dos principais comandos:

Modo de inserção e de comandos

Para identificar o modo (estado) do vim, basta visualizar o rodapé da tela.

Vamos à prática. Para executar o vim, utilize:

$ vi

=> Abre o vim vazio, sem nenhum arquivo e exibe a tela de apresentação.

$ vi arquivo => Abre o arquivo de nome "arquivo".

$ vi arquivo + => Abre o arquivo de nome "arquivo", com o cursor no final do mesmo.

$ vi arquivo +10 => Abre o arquivo de nome "arquivo", com o cursor na linha 10.

$ vi arquivo +/Clube_do_Hacker => Abre o arquivo de nome "arquivo", na primeira ocorrência da palavra Clube_do_Hacker".

Ao executar o vim, ele inicia diretamente em modo de comando. Para

comprovar, é só olhar na última linha (rodapé) e não vai haver nada lá. Isso quer dizer

que você não conseguirá escrever nada, pode digitar a vontade que só vai ouvir beeps.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 82

Para começar a escrever, pressione "i" em seu teclado. O vim entra em modo de

inserção, que você comprova (como falado anteriormente) pelo rodapé da tela, onde fica

a seguinte marcação:

Suponha que você já digitou o bastante, e quer salvar, por segurança. Pressione a

tecla ESC para voltar em modo de comandos. E veja os comandos para salvar/sair:

:w => Salva o arquivo que está sendo editado no momento. :wq => Salva e sai. :x => Idem. ZZ => Idem. :w!. => Salva forçado :q!. => Sai forçado :wq! => Salva e sai forçado.

Lembre que utilizando o "i" para inserção, a mesma se inicia inserindo texto

antes do cursor. Veja agora outros subcomandos de inserção de texto:

A => Insere o texto no fim da linha onde se encontra o cursor o => Adiciona uma linha vazia abaixo da linha corrente O => Adiciona uma linha vazia acima da linha corrente Ctrl + h => Apaga último caracter à esquerda

Subcomandos para movimentação pelo texto:

Ctrl + f => Passa para a tela seguinte. Ctrl + b => Passa para a tela anterior. H => Move o cursor para a primeira linha da tela. M => Move o cursor para o meio da tela. L => Move o cursor para a última linha da tela. h => Move o cursor para caracter a esquerda. j => Move o cursor para linha abaixo. k => Move o cursor para linha acima. l => Move o cursor para caracter a direita. w => Move o cursor para o início da próxima palavra (não

ignorando a pontuação). W => Move o cursor para o início da próxima palavra

(ignorando a pontuação). b

=> Move o cursor para o início da palavra anterior (não ignorando a pontuação).

B => Move o cursor para o início da palavra anterior (ignorando a pontuação).

0 (zero) => Move o cursor para o início da linha corrente. ^ => Move o cursor para o primeiro caracter não branco da

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 83

linha. $ => Move o cursor para o fim da linha corrente. nG => Move o cursor para a linha de número "n" (susbstitua n

pelo número da linha).. G => Move o cursor para a última linha do arquivo.

Copiando e colando textos no vim (utilizando o mouse)

yy Copia o texto da linha corrente p Cola o texto na linha que está posicionado o marcador.

Usando o modo visual do vim:

Entre no modo visual: v

Agora, utilize as teclas direcionais (setas) do teclado, para selecionar o texto

desejado.

Pressione e cole, utilizando a tecla "p" (paste).

Veja agora como apagar um determinado texto:

Utilizando normalmente as teclas Backspace/Delete, ou entrando em modo

visual (v) e pressionando a tecla Delete.

Você pode remover até o final de uma palavra, utilizando: dw

Pode também remover até o final de uma frase: d$

Desfazendo uma ação

É claro que você pode desfazer uma ação que você considera errado, ou que

errou ao digitar o texto. É só utilizar: u

Se você precisar voltar o texto na tela, utilize as teclas Ctrl + r.

Subcomandos para localização de texto:

/palavra

=> Procura pela palavra ou caracter acima ou abaixo do

texto.

?palavra => Move para a ocorrência anterior da palavra (para repetir a

busca use "n").

n => Repete o último comando utilizando / ou ?.

N => Repete o último comando / ou ? ao contrário (baixo para

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 84

cima).

Ctrl+g => Mostra o nome do arquivo, o número da linha corrente e

o total de linhas.

Mais opções para remoção de caracteres

x => Apaga o caracter onde o cursor estiver.

dd => Apaga a linha inteira onde o cursor estiver

D => Apaga a linha a partir da posição do cursor até o fim.

J => Une a linha corrente à próxima.

7dd => Removeas próximas 7 linhas a partir da posição do atual

do cursor (qualquer número).

Opções para substituição de textos:

rCARACTER => Substitui o caracter onde o cursor se encontra

pelo caracter especificado em CARACTER.

RTEXTO => Substitui o texto corrente pelo texto digitado

(sobrepõe).

cw => Remove a palavra corrente para substituição.

cc => Remove a linha corrente para substituição.

C => Substitui o restante da linha corrente,

esperando o texto logo após o comando.

J => Une a linha corrente à próxima.

:s/velho/novo => Substitui a primeira ocorrência de "velho" por

"novo" na linha corrente.

:% s/velho/novo => Substitui em todo o arquivo (%) a primeira

ocorrência de "velho" por "novo" em cada linha.

:% s/velho/novo/g => Substitui em todo o arquivo (%), todas (g) as

ocorrências de "velho" por "novo".

:% s/velho/novo/gc => Igual ao anterior, mas pedindo confirmação

para cada substituição.

Alternando entre as janelas:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 85

:wn => Grava o atual e vai ao próximo.

:wN => Grava o atual e vai ao anterior.

:args => Mostra todos os arquivos atuais.

:qa => Sai de todas as janelas de uma vez.

:all => Abre todos os arquivos em janelas individuais.

Existe centenas de comandos no vim. A única maneira de conhecê-lo melhor, é

praticando bastante.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 86

Criando e

gerenciando contas de usuários e

grupos

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 87

Trabalhando com usuários

Todo usuário possui um número chamado user ID com o qual o sistema

Unix/Linux identifica-o no sistema. Além do user ID, os usuários possuem o group ID.

Toda vez que um processo for ativado será atribuído ao processo um User ID e um

Group ID. Estes ID's são chamados de identificação efetiva do processo.

id [ opções ] [ nome ]

Exemplos de utilização:

Sem parâmetros, pegando as informações do usuário atual.

# id

uid=1094(root) gid=500(root) grupos=500(root)

Pegando somente o user id do usuário atual.

# id –u

1094

Verificando o ID, GID e grupos:

# id [usuário]

Modificando informações pessoais do usuário

# chfn [usuário]

Tornando-se outro usuário

Permite o usuário mudar sua identidade para outro usuário sem fazer o logout.

Útil para executar um programa ou comando como superusuário sem ter que abandonar

a seção atual.

# su [usuário]

Usuário é o nome do usuário que deseja usar para acessar o sistema. Se não

digitado, é assumido o usuário root.

Será pedida a senha do superusuário para autenticação. Digite exit quando

desejar retornar a identificação de usuário anterior.

Comando useradd

Permite que se criem usuários conforme especificado em opções. Somente o

superusuário poderá utilizar este comando:

useradd [ opções ] usuário

Este comando irá alterar os arquivos:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 88

/etc/passwd – informações de contas de usuários e senhas criptografadas;

/etc/shadow – informações de contas de usuários e senhas criptografadas;

/etc/group – informações de grupos.

Exemplos de utilização

Cria o usuário:

# useradd [usuário]

Cria o usuário e designa o diretório /home/ como o diretório pessoal deste:

# useradd –d /home/usuário [usuário]

Cria o usuário com o shell sh:

# useradd –s /bin/sh [usuário]

Cria o usuário com o grupo root.

# useradd –g root [usuário]

Cria o usuário com várias informações:

# useradd –d /home/usuário –g users –c “ESTUDO LINUX” usuário

Utilize o manual para ver outras opções de utilização do comando useradd:

# man useradd

Comando adduser

Dependendo da distribuição, o comando "adduser" vai ser apenas um comando

igual ao "useradd", ou então um script interativo que irá lhe fazendo perguntas, as quais

você irá respondendo e então o script criará um usuário no sistema para você.

Criar um usuário padrão:

# adduser [usuário]

Habilitar uma senha ou modificar senha:

# passwd [usuário]

Você pode especificar outros parâmetros para o usuário, como no comando a

seguir:

# adduser [usuário] -d /var/usuarios/usuario -s /dev/null

Com estes parâmetros, foi especificado que o usuário terá como diretório home o

"/var/usuarios/usuario" e como shell o diretório "/dev/null" (ou seja, não terá shell). Sem

estes parâmetros, por padrão, o diretório home seria "/home/usuario" e o shell seria

"/bin/bash".

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 89

Cada um desses programas/comandos escreve o usuário no arquivo de

configuração do Linux referente aos usuários do sistema. Este arquivo é o

"/etc/passwd". Cada linha deste arquivo é um usuário cadastrado no sistema.

Você pode muito bem criar uma conta sem usar estes programas/scripts citados

acima. O "passwd" é formado por linhas onde cada uma é um usuário. Então vamos

aprender a montar tais linhas:

usuário:x:1001:100:Clube_do_Hacker:/home/usuario:/bin/bash

Acrescentando através da Shell:

# echo “usuário:x:1001:100:Clube_do_Hacker:/home/usuario:/bin/bash” >> /etc/passwd

Vamos dividir esta linha em "campos", onde cada um é separado por: (dois pontos):

Campo Significado

Usuário Login do Usuário, aqui você pode colocar o nome que quiser

com até 8 caracteres.

X

Aqui diz que o password está no arquivo /etc/shadow. Se

estivesse com *, a conta estaria desabilitada e se estivesse

sem nada (::), a conta não teria password.

1001 UID (User IDentification), o número de identificação do

usuário.

100 GID (Group IDentification), o número de identificação do

grupo do usuário.

Clube_do_Hacker Comentários do usuário, como nome, telefone, etc.

/home/usuário

O diretório HOME do usuário, ou seja, o diretório

pertencente a ele. Geralmente estes diretórios estão sempre

em /home.

/bin/bash Shell do usuário, ou seja, o programa que irá enterpretar os

comandos que o usuário executar.

Obs: O /etc/shadow é um arquivo que contém a senha do usuário criptografada, se

alguém tiver posse dela, esta pessoa pode comparar as senhas com uma lista de palavras

e descobrir as senhas dos usuários. Felizmente, este arquivo está muito bem protegido

pelo sistema.

Modificando o nome de um usuário

# usermod –l novo_nome usuário

Removendo um usuário:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 90

Você pode apagar a linha referente a ele no /etc/passwd e os seus arquivos, ou

simplesmente digitar:

# userdel –r usuário

Combine com a opção -r para deletar junto o diretório HOME do usuário.

Configurando um usuário com poderes de root

O root possui o UID e o GID igual a 0 (zero) e um usuário comum não. Se

fizermos a mudança do UID e GID de um usuário para 0, ele ficará como o root. Vamos

testar, modificando no arquivo /etc/passwd:

usuário:x:1001:100:Clube_do_Hacker:/home/usuario:/bin/bash

usuário:x:0:0:Clube_do_Hacker:/home/usuario:/bin/bash

Pronto, o usuário vai ser também o root do sistema, o administrador do sistema,

o deus do sistema, etc.

Dica: Não é recomendável ficar usando o usuário root, pois este é aplicável somente à

administração do sistema. Sendo assim, recomendo a você a usar sempre um usuário

normal. Se for precisar usar o root, registre a entrada como root ou utilize o comando

para se tornar o próprio root.

# su -

Trabalhando com grupos

Criando um grupo (este comando escreve uma linha no arquivo /etc/group):

# groupadd [grupo]

Adicionando uma senha para o grupo:

# gpasswd [grupo]

Mudando a propriedade de um arquivo:

# chown novo-dono.novo-grupo arquivo

O comando acima altera o proprietário e o grupo do arquivo. Pode-se usar a

opção -R para alterar recursivamente propriedades dentro de um diretório.

Um arquivo que também tem muito haver com os usuários no Linux é o

/etc/group, que contém as definições de cada grupo, como por exemplo seus nomes,

GIDs, e usuários adicionais que pertencem à ele. Se você adicionar uma linha neste

arquivo estará criando um novo grupo. Vamos criar um novo grupo no /etc/group:

Clube_do_Hacker:x:666:user1,user2,user3

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 91

Adicionando esta linha no arquivo /etc/group, um novo grupo é criado com o

nome 'Clube_do_Hacker', GID '666' e com usuários adicionais pertencentes à ele:

'user1,user2,user3'.

Removendo um grupo:

# groupdel [nome_grupo]

Renomeando um grupo:

# groupmod [novo_nome] [nome_antigo]

Adicionando um usuário a um grupo:

# adduser [usuário] [grupo]

# gpasswd –a [usuário] [grupo]

Combinando este conhecimento com algo sobre permissões dos arquivos,

conteúdo a ser visto no próximo módulo, você pode controlar muito bem quem usa o

seu sistema ou servidor, sabendo quem pertence aos grupo, quais seus diretórios, que

arquivos podem acessar, entre outros.

Comando passwd

O comando passwd permite que se troque a senha de determinado usuário. O

superusuário pode trocar a senha de qualquer outro. O usuário comum, porém, pode

trocar somente a sua senha. As senhas são armazenadas no arquivo /etc/passwd ou

/etc/shadow. No arquivo /etc/passwd também é armazenado as informações relativas

aos usuários.

Após a criação do usuário será necessário criar uma senha para este, caso

contrário, não será permitido que este usuário faça login no sistema.

passwd [ usuário ]

Exemplos de utilização:

Alterando a senha de outro usuário (é preciso ser o superusuário):

# passwd [usuário]

Alterando a própria senha (usuário comum pode utilizar este comando):

# passwd

Para sua segurança, deve-se configurar o sistema para que:

⇒ A senha deva ter no mínimo 6 caracteres;

⇒ A senha deva ter no mínimo duas letras maiúsculas e/ou duas letras minúsculas e

pelo menos um dígito ou caractere especial;

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 92

⇒ São aceitos somente os caracteres ASCII padrão de códigos 0 a 127;

⇒ A senha deve diferenciar do nome da conta (obrigatório);

⇒ A nova senha deve diferenciar da senha velha em pelo menos três caracteres.

⇒ As regras acima não se aplicam ao superusuário.

Os utilitários para manutenção de senhas criptografadas são:

⇒ pwconv: utiliza os valores definidos em /etc/login.defs para adicionar entradas

no arquivo /etc/shadow e remove qualquer entrada do /etc/shadow que não tenha

correspondente no arquivo /etc/passwd.

⇒ pwunconv: compara os arquivos /etc/passwd e /etc/shadow, colocando as

entradas do campo de senhas do arquivo /etc/shadow nas linhas correspondentes

do arquivo /etc/passwd. O arquivo /etc/shadow é removido.

Este utilitário é usado para se migrar usuários de outro sistema: após executar o

pwunconv copiam-se as linhas dos novos usuários no /etc/passwd, e a seguir

gera-se o /etc/shadow novamente com o pwconv.

⇒ grpconv: faz a mesma função do pwconv, porém com os grupos do /etc/group.

Arquivo sobra de senhas de grupos é o /etc/gshadow.

⇒ grpunconv: faz a mesma função do pwunconv, porém com os grupos.

Criando quota para usuários

O sistema de quotas é um serviço que deve ser habilitado e configurado em

máquinas que estão em rede e possuem vários usuários, pois, é por meio deste recurso

que iremos controlar a utilização dos sistemas de arquivos entre todos os usuários,

impedindo que um único usuário com o poder de escrita em seu diretório pessoal,

exceda os limites físicos de espaço em um sistema de arquivos e comprometa a

utilização deste pelos outros usuários.

Verificar como está montado o /home:

# mount

Instalar o pacote quota:

# apt-get install quota

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 93

As quotas são especificadas em partições e não em diretórios. Deve-se editar o

arquivo /etc/fstab e configurar a partição que deve ter suporte,da seguinte maneira:

Devemos entrar no ponto de montagem da partição especificada (/home) e criar dois arquivos:

Gerencia quotas para os usuários:

/home# : > quota.user

Gerencia quotas para os grupos:

/home# : > quota.group

OBS: No Debian o padrão é QUOTA 1 (quota.user e quota.group), em outras distribuições pode ser do tipo QUOTA 2 (aquota.user e aquota.group).

É necessário mudar as permissões dos arquivos que foram criados, de maneira

que só o root tenha permissão de leitura e gravação sobre eles, entramos então com os

seguintes comandos:

/home# chmod 600 quota.user

/home# chmod 600 quota.group

Deve-se remontar o sistema de arquivos para que as configurações de quota para

a partição entrem em vigor, como na maioria das vezes o sistema de arquivos estará

ocupado, recomenda-se que salve suas aplicações e reinicie o sistema. Entre com o

comando:

# shutdown -r now

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 94

OBS: É possível ativar o sistema de quota apenas desmontando e montando novamente

a partição. Porém, esta tarefa envolve a identificação e o cancelamento de todos os

processos associados para a partição que estava em uso.

Para ativar o sistema de quotas de disco, então entramos com o seguinte

comando:

# quotaon -v /home

Para verificar se o sistema de quotas está ativo, consulte o status de quota para a

partição que está sendo trabalhada:

# mount -a

# repquota -v -a

Criando o usuário para o qual será definida a quota:

# adduser user1

Definindo quanto do sistema de arquivos cada usuário poderá utilizar. O

comando para configurar quotas é o:

# edquota -u [usuario]

Especificando espaço em disco para o usuário user1.

● 500 MB de espaço em disco (soft limit)

● O espaço em disco pode ser ultrapassado e chegar a no máximo 600 MB (hard

limit)

● 366 arquivos já foram gravados (inodes). Possuirá um limite de 400 arquivos

(soft limit)

● Poderá gravar no máximo 405 arquivos (hard limit). O valor nunca é

ultrapassado.

# edquota user1

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 95

Identificando as características do arquivo:

blocks Número de blocos utilizados pelo usuário Soft limit Limite em blocos que o usuário poderá utilizar Hard limit Prevendo que o usuário precise ultrapassar seu limite de

blocos, é especificado o valor máximo de blocos. Valor que nunca é ultrapassado.

Inodes Número de inodes (arquivos utilizados pelo usuário) Soft limit Número de inodes (arquivos) que o usuário poderá criar Hard limit Prevendo que o usuário precise ultrapassar seu número de

inodes, é especificado o número máximo de inodes que o usuário poderá criar

OBS: 1 MB equivale a mais ou menos 1000 blocos.

Definindo quotas para grupos:

# edquota -g [grupo]

Para consultar informações sobre quotas na partição, use:

quota -u [usuario]

quota -g [grupo]

# quota -u user1

Exibindo um sumário de quotas ativas na partição:

# repquota -v /home

Para saber mais detalhes avançados sobre o uso de quotas nas partições:

# quotastats

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 96

Permissões de acesso a recursos, arquivos, pastas e

dispositivos do Sistema

Administração e Segurança em Sistemas GNU/Linux

A permissão de acesso protege o sistema de arquivos Linux do acesso indevido de pessoas ou programas não autorizado.

Donos, grupos e outros usuários:

Dono

=> É a pessoa que criou o arquivo ou o diretório. O nome do dono do arquivo/diretório é o mesmo do usuário usado para entrar no sistema GNU/Linux. Somente o dono pode modificar as permissões de acesso do arquivo.

Outros Usuários

=> É a categoria de usuários que não são donos ou não pertencem ao grupo do arquivo.

Grupo

=> Para permitir que vários usuários diferentes tivessem acesso a um mesmo arquivo (já que somente o dono poderia ter acesso ao arquivo), este recurso foi criado. Cada usuário pode fazer parte de um ou mais grupos e então acessar arquivos que pertençam ao mesmo grupo que o seu (mesmo que estes arquivos tenham outro dono).

Controle de acesso básico:

r => Permissão de leitura para arquivos. Caso for um diretório, permite listar seu conteúdo

w

=> Permissão de gravação para arquivos. Caso for um diretório, permite a gravação de arquivos ou outros diretórios dentro dele. Para que um arquivo/diretório possa ser apagado, é necessário o acesso a gravação.

x => Permite executar um arquivo (caso seja um programa executável). Caso seja um diretório, permite que seja acessado através do comando cd.

Os três modos de permissões: Comum n

Obs: X - somente execução.de execuç

read

www.clubedo

T

Se você usar X ao iné afetada se o a Em diretórios ela tão x.

Write

Octal

4

Especial

T T

SUIDBI

h

vérqem

2

SGIDBI

acker.com.br

s de x, a permissuivo já tiver o mesmo efeito q

Executio

ão perue

1

STICKYBI

s=S≠x s=S≠x t=T ≠x

97

de execução missões de a permissão

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 98

Crie o arquivo hoje e liste suas propriedades:

-rw-r--r-- 1 root root 0 2006-12-05 10:09 hoje

Modificando as permissões do arquivo: chmod u-rwx,g+w,o+x hoje

----rw-r-x 1 root root 0 2006-12-05 10:09 hoje chmod g-w,o-x,u+r hoje

-rw-r--r-- 1 root root 0 2006-12-05 10:09 hoje chmod a-rwx hoje

---------- 1 root root 0 2006-12-05 10:09 hoje Modo Octal: chmod 421 hoje

-r---w---x 1 root root 0 2006-12-05 10:09 hoje chmod 000 hoje

---------- 1 root root 0 2006-12-05 10:09 hoje chmod 777 hoje

-rwxrwxrwx 1 root root 0 2006-12-05 10:09 hoje

Crie o diretório aula e liste suas propriedades:

drwxr-xr-x 2 root root 1024 2006-12-05 10:22 aula

Modificando as permissões do arquivo: chmod u-rwx,g-rwx,o-rwx aula

d--------- 2 root root 1024 2016-07-04 10:22 aula chmod a-rwx aula

d--------- 2 root root 1024 2016-07-04 10:22 aula chmod a+rwx aula

drwxrwxrwx 2 root root 1024 2016-07-04 10:22 aula Modo Octal:

chmod 754 hoje

drwxr-xr-- 2 root root 1024 2016-07-04 10:22 aula chmod 000 hoje

d--------- 2 root root 1024 2016-07-04 10:22 aula chmod 777 hoje

drwxrwxrwx 2 root root 1024 2016-07-04 10:22 aula

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 99

OBS: Mas somente as três permissões básicas (rwx) não dão toda flexibilidade para controlar acesso aos arquivos e diretórios.

Permissões de acesso Especiais

Em adição as três permissões básicas (rwx), existem permissões de acesso

especiais que afetam arquivos executáveis e diretórios:

r w s r w s r w t

SUIDBIT (set user id) = setuid

SGIDBIT (set group id) = setgid

STICKBIT (Stick bit)

O controle de acesso em arquivos e diretórios é a segurança fundamental para

qualquer sistema multiusuários. Os sistemas de arquivos nativos do Linux programam

controle de acesso utilizando algumas propriedades dos arquivos/diretórios.

SUIDBIT (set user id) = setuid

=> A propriedade SUID é somente para arquivos executáveis e não tem efeito

em diretórios.

=> Nas permissões básicas, o usuário que executou o programa é dono do

processo. Mas em arquivo executável com a propriedade SUID aplicada, o programa

rodará com o ID do dono do arquivo, não com o ID do usuário que executou o

programa.

=> Normalmente o usuário dono do programa executável é também dono do

processo sendo executado. Quando um arquivo/programa executável tem o controle de

acesso SUID, ele é executado como se ele estivesse iniciado pelo dono do

arquivo/programa.

=> A permissão de acesso especial SUID pode aparecer somente no campo

Dono.

Trabalhando com o SUID:

Exemplo: ifconfig

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 100

# ls -lah /sbin/ifconfig

-rwxr-xr-x 1 root root 57K 2004-04-22 18:27 /sbin/ifconfig

No terminal root

#ifconfig

#ifconfig eth0 up

obs: ls -lah tamanhos da cópia no formato readable humano (por exemplo, 1K 234M

2G)

Como usuário:

lammer@debian:/sbin$ ./ifconfig

bash: ifconfig: command not found

lammer@debian:/sbin$ ./ifconfig eth0 up

SIOCSIFFLAGS: Permissão negada

lammer@debian:/sbin$ ./ifconfig eth0 down

SIOCSIFFLAGS: Permissão negada

Como root:

chmod 4755 /sbin/ifconfig

Aplicando a propriedade SUID em um arquivo executável utilizando formato simbólico

(s):

# chmod u+s arquivo.x

# ls -lah arquivo.x

-rwsr-xr-x 1 root sala 0 2006-12-05 22:57 arquivo.x

Aplicando a propriedade SUID em um arquivo executável utilizando formato octal (4):

# chmod 4750 arquivo.x

# ls -lah arquivo.x

-rwsr-x--- 1 root sala 0 2006-12-05 22:57 arquivo.x

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 101

Retirando SUID:

# chmod u-s arquivo.x

# ls -lah arquivo.x

-rwxr-x--- 1 root sala 0 2006-12-05 22:57 arquivo.x

SGIDBIT (set group id) = setgid

=> A propriedade SGID tem a mesma função que o SUID para arquivos

executáveis. Mas a propriedade SGID tem um efeito especial para os diretórios.

=> SGID é aplicado em um diretório, os novos arquivos que são criados dentro

do diretório assumem o mesmo ID de Grupo do diretório com a propriedade SGID

aplicado.

=> A permissão de acesso especial SGID pode aparecer somente no campo

Grupo.

Exemplo: Se no diretório /home/user1 tem o grupo sala e tem o SGID habilitado, então

todos os arquivos dentro do diretório /home/user1 serão criados com o grupo sala.

drwxr-xr-x 2 user1 sala 4096 2006-12-05 08:52 user1

Este é um importante atributo para uma equipe, assumindo que todos os arquivos

compartilhados devem ter o mesmo grupo.

Aplicando a propriedade SGID em um diretório executável utilizando formato

simbólico (s):

# chmod g+s /home/user1

# ls --color -lah /home/user1 | more

drwxr-sr-x 2 root sala 4096 2006-12-05 17:54 .

Aplicando a propriedade SGID em um diretório executável utilizando formato octal (2):

# chmod 2750 /home/user1

# ls -lah /home/user1

drwxr-s--- 2 root sala 4096 2006-12-05 17:54 .

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 102

Retirando SGID:

# chmod g-s /home/user1

# ls -lah /home/equipe

drwxr-xr-x 2 root sala 4096 2006-12-05 17:54 .

Um outro exemplo:

# chmod g+s /home

# ls -ld /home

drwxrwsr-x 6 root staff 4096 2016-07-04 08:56 /home

# touch /home/arquivo

# ls -l /home/arquivo

-rw-r--r-- 1 root staff 0 2016-07-04 14:18 /home/arquivo

STICKBIT (Stick bit)

Aplicando STICK

=> Em arquivos executáveis, a propriedade STICK faz com que o sistema

mantenha uma imagem do programa em memória depois que o programa finalizar. De

fato, essa capacidade aumenta o desempenho, pois será feito um cache do programa

para a memória e da próxima vez que ele for executado, será carregado mais rápido.

=> Em diretórios, a propriedade STICK impede que outros usuários deletem ou

renomeam arquivos dos quais não são donos.

=> Com o STICK, o diretório estará em modo append-only (somente

incremente).

=> Sendo assim, somente o usuário que é Dono do arquivo, poderá deletar ou

renomear os arquivos dentro de um diretório com a propriedade STICK aplicada.

=> A permissão especial Stick pode ser especificada somente no campo outros

usuários das permissões de acesso.

Exemplo bem prático:

# ls -l

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 103

# chmod 0777 /tmp

# ls -ld /tmp

drwx root 1024 2016-07-04 14:40 /tmp rwxrwx 14 root

# touch /tmp/arq_novo

No teminal como usuário tente remover o arquivo:

$ rm /tmp/arq_novo -f ou rm -rf /tmp/arq_novo

oltando o STICKV :

chmod 1777 /tmp

drwx t 1024 2016-07-04 14:40 /tmp

Crie novamente o arquivo e tente remover:

rwxrwt 14 root roo

# touch /tmp/arq_novo

$ rm /tmp/arq_novo -f ou rm -rf /tmp/arq_novo

xemplo:E No diretório /tmp, todos os usuários devem ter acesso para que seus

programas possam criar os arquivos temporários, mas nenhum pode apagar arquivos

dos outros. Então. é necessário que a propriedade STICK seja feita no diretório /tmp.

drwxrwxrwt 14 root root 1,0K 2016-07-04 13:15 tmp

Aplicando a propriedade Stick em um arquivo executável utilizando formato

octal (1):

# chmod 1750 programa.x

# ls -lah programa.x

-rwx 6-09-26 23:51 programa.x

tável utilizando formato

simból

r-x--T 1 root root 2,9M 200

Aplicando a propriedade Stick em um arquivo execu

ico (t):

# chmod o+t programa.x

# ls -lah programa.x

-rwx 6-09-26 23:51 programa.x r-x--T 1 root root 2,9M 200

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 104

Aplicando a propriedade Stick em um diretório utilizando formato simbólico

(t):

# chmod o+t /tmp

# ls -lah /tmp

drwxrwxrwt 8 root root 264 2006-09-26 23:22 .

Apicando a propriedade Stick em um diretório utilizando formato octal (1):

# chmod 1777 /tmp

# ls -lah /tmp

drwxrwxrwt 8 root root 264 2006-09-26 23:22 .

Retirando Stick:

# chmod o-t /tmp

# ls -lah /tmp

drwxrwxrwx 8 root root 264 2006-09-26 23:22 .

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 105

Manipulação de

pacotes

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 106

Manipulação de pacotes (programas)

Gerenciadores de pacotes:

dselect

dpkg

apt-get

tasksel

aptitude Gerenciando pacotes com o dpkg:

dpkg Fazer uma instalação a partir do CD-ROM:

# cd /cdrom/pool/main ; ls --color

# dpkg -i nome_do_pacote ou caminho_do_pacote

Listar todos os pacotes que estão instalados no formato .deb:

# dpkg -l | more

Onde serão instalados todos os arquivos de um determinado programa:

# dpkg -c /cdrom/pool/main/m/mozilla/nome_do_pacote.deb | more

Para obter a listagem de arquivos de pacotes já instalados no sistema, use o

comando:

# dpkg -L arquivo

Remover um programa e todos os arquivos:

# dpkg - -purge nome_do_programa

O dpkg (Debian Package) é o programa responsável pelo gerenciamento de

pacotes nos sistemas Debian. Sua operação é feita em modo texto e funciona através de

comandos, assim caso deseje uma ferramenta mais amigável para a seleção e instalação

de pacotes, prefira o dselect (que é um front-end para o dpkg) ou o apt.

Pacotes estão desconfigurados quando, por algum motivo, a instalação do

mesmo não foi concluída com sucesso. Pode ter faltado alguma dependência,

acontecido algum erro de leitura do arquivo de pacote, etc. Quando um erro deste tipo

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 107

acontece, os arquivos necessários pelo pacote podem ter sido instalados, mas os scripts

de configuração pós-instalação não são executados.

# dpkg --configure [NomedoPacote]

Mostrando a lista de pacotes do sistema:

# dpkg --get-selections

Gerenciando pacotes com o apt:

apt Instalar um programa:

# apt-get install mozilla

Enquanto o apt faz um download de um pacote, ou seja, uma instalação, ele gera

um arquivo chamado lock. O mesmo serve para que não seja executado outros apt ao

mesmo tempo.

Arquivo onde ficam armazenados todos os mirros (sources) de busca de pacotes:

/etc/apt/souces.list

Para usar outro tipo de source, você pode inserir o caminho de pesquisa no

arquivo. O mesmo pode ter uma ou mais sources:

# apt-setup

Ao inserir uma nova linha no arquivo, pode-se atualizar a busca de pacotes no

apt:

# apt-update

Para saber se um determinado que você quer instalar está disponível no cache do

apt:

# apt-cache search gaim

OBS: Todo pacote instalado via apt-get install, armazena um cache no seguinte

caminho: /var/cache/apt/archives. Vamos limpar esse cache:

# apt-get clean

Fazer uma atualização de pacotes usando um único comando:

# apt-get upgrade

Removendo um programa com:

# apt-get remove - -purge gimp

O comando que adiciona automaticamente uma linha para cada CD no arquivo

/etc/apt/sources.list e atualizará a lista de pacotes em /var/state/apt/lists:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 108

# apt-cdrom add

Verificando pacotes corrompidos

A correção é feita automaticamente. A lista de pacotes também é atualizada quando

utiliza este comando.

# apt-get check

Corrigindo problemas de dependências e outros problemas:

# apt-get install -f pacote

# apt-get -f install pacote

# dpkg -i - -force-all *.deb

Tasksel

# tasksel

Este comando irá carregar o tasksel, que nada mais é que uma simples interface

para a instalação dos componentes principais do Debian.

Neste programa você habilitará a instalação somente do X Window System.

Com isso será instalado o suporte para o ambiente gráfico KDE e caso queira outro

ambiente gráfico. Você pode fazer o mesmo com o comando:

Baixa o pacote, mas não instala:

# apt-get install -d pacote

Para fazer pesquisa de pacotes disponíveis para a distribuição, utilize:

www.apt-get.org

Aptitude

Ele é um novo gerenciador de pacotes amigável para o apt.

# aptitude

Procedimentos de backup

Alguns comandos vão ajudar você a ler melhor o arquivo:

# stat arquivo

# file arquivo

# type arquivo

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 109

# ls -lh arquivo

------------------------------------------------------------------------------------------------------------------- 1ª parte

------------------------------------------------------------------------------------------------------------------- Pacotes GZIP

Empacotando, compactando e descompactando.

Criando um diretório e acessando este diretório:

# mkdir /tmp/backup

# cd /tmp/backup

Empacotando o conteúdo do diretório /home/user:

/tmp/backup# tar cvf backup1.tar /home/user

/tmp/backup# file backup1.tar

Compactar usando o GZIP:

/tmp/backup# time gzip backup1.tar

/tmp/backup# ls -lh

saída: backup1.tar.gz

Descompactando o arquivo:

/tmp/backup# time gunzip backup1.tar.gz

/tmp/backup# ls -lh

saída: backup1.tar

TAR

Ele é um aplicativo capaz de armazenar vários arquivos em um só. Porém, não é capaz

de compactar os arquivos armazenados. Como é possível notar, o TAR serve de complemento

para o GZIP e vice-versa. Por isso, foi criado um parâmetro no TAR para que ambos os

programas possam trabalhar juntos. Assim, o TAR "junta" os arquivos em um só. Este arquivo,

por sua vez, é então compactado pela GZIP. Quando ocorre o trabalho conjunto entre TAR e

GZIP, o arquivo formado tem a extensão tar.gz.

A maioria das versões do tar não suportam backups através da rede. A versão GNU do

tar, que é a versão utilizada pelo FreeBSD, suporta dispositivos remotos utilizando a mesma

sintaxe do rdump.

Pacotes BZIP2

Empacotando, compactando e descompactando.

Criando um diretório:

# mkdir /tmp/backup

# cd /tmp/backup

Empacotando o conteúdo do diretório /home/user:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 110

/tmp/backup# tar cvf backup1.tar /home/user

/tmp/backup# file backup1.tar

Compactar usando o BZIP2:

/tmp/backup# time bzip2 backup1.tar

/tmp/backup# ls -lh

saída: backup1.tar.bz2

Descompactando o arquivo:

/tmp/backup# time bunzip2 backup1.tar.bz2

/tmp/backup# ls -lh

saída: backup1.tar

------------------------------------------------------------------------------------------------------------------- 2ª parte

------------------------------------------------------------------------------------------------------------------- Pacotes GZIP Empacotando / Compactando Descompactando / Desempacotando Criando um diretório:

# mkdir /tmp/backup

# cd /tmp/backup

EMPACOTANDO e COMPACTANDO o conteúdo do diretório /etc:

/tmp/backup# tar cvzf backup2.tar.gz /etc

/tmp/backup# file backup2.tar.gz

Crie um diretório com o nome gzip:

/tmp/backup# mkdir gzip

DESCOMPACTANDO E DESEMPACOTANDO o conteúdo:

/tmp/backup/gzip# tar xvzf /tmp/backup/backup2.tar.gz

DESCOMPACTANDO E DESEMPACOTANDO o conteúdo, direcionando a um diretório:

# tar xvzf /tmp/backup/backup2.tar.gz -C /tmp/backup/gzip

Verificando o arquivo:

/tmp/backup/gzip# ls -lh

Verificando o tamanho:

/tmp/backup/gzip# du -hs caminho

Verificando o tamanho do diretório original:

/tmp/backup/gzip# du -hs /etc

Pacotes BZIP2 Empacotando / Compactando Descompactando / Desempacotando

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 111

Criando um diretório:

# mkdir /tmp/backup

# cd /tmp/backup

EMPACOTANDO e COMPACTANDO o conteúdo do diretório /etc:

/tmp/backup# tar cvjf backup3.tar.bz2 /etc

/tmp/backup# file backup3.tar.bz2

/tmp/backup# ls -lh

Crie um diretório com o nome bzip2:

/tmp/backup# mkdir bzip2

DESCOMPACTANDO E DESEMPACOTANDO o conteúdo:

/tmp/backup/bzip2# tar xvjf /tmp/backup/backup3.tar.bz2

DESCOMPACTANDO E DESEMPACOTANDO o conteúdo, direcionando a um diretório:

# tar xvjf /tmp/backup/backup3.tar.bz2 –C /tmp/backup/bzip2

Verificando o arquivo:

/tmp/backup/bzip2# ls -lh

Verificando o tamanho:

/tmp/backup/bzip2# du -hs caminho

Verificando o tamanho do diretório original:

/tmp/backup/bzip2# du -hs /etc

-------------------------------------------------------------------------------------------------------------------

Compactador compatível com o Windows:

# gzip backup1.tar

Descompactador de pacotes .zip:

# unzip backup.zip

Criando uma compactação zip:

# find /etc -name *.conf -print | xargs zip backup4 -@

find /etc -name *.conf -print => Procura no diretório /etc e sub-diretórios um arquivo/diretório,

no caso arquivos chamado .conf e otimiza a procura.

xargs zip backup4 -@ => o xargs resolve se ocorrer algum problema, e o zip é o compactador.

Outra maneira:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 112

# find /etc | cpio -pdv backup

Outra maneira:

# find | xargs zip backup

Trabalhando com o dump

Fazendo um backup de /tmp, com o comando dump:

# dump -0 -f backupdump /etc

Restaurando este backup:

# restore rf backupdump

Trabalhando com o comando cpio Fazer um backup de todas as bibliotecas em /lib que terminam com 0, para dentro de

/tmp/backup/bacana (o diretório é gerado na execução do comando), usando o cpio:

# find /lib -name *.0 | cpio -pdv /tmp/backup/bacana

Cpio É o programa original do UNIX para a troca de arquivos entre máquinas por

meio de mídias magnéticas. O cpio tem opções (entre muitas outras) de realizar byte-

swapping, gravando um bom número de sistemas de arquivos de diferentes formatos, e

permitindo o redirecionamento dos dados para outros programas. Esta última

funcionalidade faz do cpio uma excelente escolha para criar mídias de instalações. O

cpio não sabe como andar nos diretórios da árvore de diretórios e uma lista dos arquivos

deve ser passada através da stdin.

O cpio não suporta a realização de backups através da rede. Você pode utilizar

um redirecionamento e o rsh para enviar os dados para uma controladora de fita remota.

# for f in directory_list; do find $f >> backup.list done

# cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"

Onde o directory_list é a lista de diretórios que você quer adicionar ao seu

backup, user@host é a combinação usuário/computador que irá realizar o backup, e

backup_device é onde os backups devem ser escritos (e.g., /dev/nsa0).

Dump e Restore

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 113

Os programas tradicionais de backup do UNIX® são o dump e o restore.Eles

operam a controladora como se esta fosse uma coleção de blocos de discos, abaixo da

abstração de arquivos, links e diretórios que são criadas pelos sistemas de arquivos.

O dump realiza o backup de todo um sistema de arquivos em um dispositivo. Ele

não tem habilidade de realizar backup somente de uma parte de um sistema de arquivos

ou uma árvore de diretórios que envolva mais de um sistema de arquivos. O dump não

grava os arquivos em diretórios numa fita, ele grava tudo de maneira direta (raw) em

blocos de dados que compõe os arquivos e diretórios.

O dump tem uma artimanha que vem desde primeiros dias na Versão 6 do

AT&T UNIX (aproximadamente 1975). Os parâmetros padrões são adequados para

fitas de 9 trilhas (6250 bpi), não para as mídias de alta-densidade disponíveis hoje em

dia (up to 62,182 ftpi). Estes padrões devem ser sobrescritos na linha de comando para

que seja utilizada a capacidade das atuais controladoras de fita.

Também é possível realizar backup dos dados através da rede para um

dispositivo de backup conectado em um outro computador com o rdump e o rrestore.

Ambos os programas tem sua confiança baseadas no rcmd e no ruserok para o acesso à

controladora de fita remota. Portanto, o usuário que irá realizar o backup deverá estar

listado no arquivo .rhosts no computador remoto.

Outros utilitários de backup

PAX

O pax é a resposta do IEEE/POSIX® para o tar e o cpio. Sobre os anos de várias

versões do tar e do cpio estão algumas incompatibilidades. Então para sair da briga pela

padronização completa deles, o POSIX criou um novo utilitário de arquivação. O pax

tenta ler e gravar nos mais mais variados formatos tanto do cpio quanto do tar,

adicionado novos formatos por si, inclusive. Sua maneira de comandar é mais

semelhante ao cpio que ao tar.

AMANDA

O Amanda (Advanced Maryland Network Disk Archiver) é um sistema de

backup cliente/servidor, melhor que um único programa. Um servidor Amanda irá

realizar numa única controladora de fita o backup de qualquer número de computadores

que tenham o cliente do Amanda e uma conexão de com o servidorAmanda. Um

problema comum em locais com um grande número de discos é que a quantidade de

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 114

tempo requerida para o backup dos dados diretamente na fita excede a quantidade de

tempo para a tarefa. O Amanda resolve este problema.

O arquivo de configurações provê um controle total da realização dos backups e

do tráfico de rede que o Amanda gera. O Amanda utilizará qualquer um dos programas

de backup citados para gravar os dados nas fitas. O Amanda está disponível também

como um port ou como pacote, porém ele não é instalado por padrão.

Não fazer nada

“Não fazer nada” não é um programa de computador mas sim a mais utilizada

estratégia de backup. Não há custos iniciais. Não há um agendamento de backup a ser

cumprido. Apenas diga não. Se alguma coisa acontecer aos seus dados dê um sorriso

malicioso e dê cria neles!

e seu tempo e seus dados são um pouquinho mais que nada, então ``Não fazer

nada'' é o mais adequado programa de backup para o seus computados. Mas cuidado, o

UNIX é uma ferramenta útil, você deve encontrar num intervalo de seis meses uma

coleção de arquivos que tenham valor para você.

“Não fazer nada'” é o método de backup correto para /usr/obj e outras árvores de

diretórios que podem ser criadas exatamente como eram no seu computador. Um

exemplo são os arquivos HTML ou PostScript® das versões deste Handbook. Estes

documentos foram criados de arquivos no formato SGML. Criar backups deles não é

necessário. Os arquivos SGML tem backups realizados regularmente.

Qual o melhor programa de backup?

A vez é do dump. A escolha limpa para preservar todos os seus dados e suas

peculiaridades do sistema de arquivos UNIX é o dump.

Observações de realizadores de backup:

As peculiaridades incluídas: arquivos com buracos, arquivos buracos e blocos

nulos, arquivos com caracteres engraçados e estranhos em seus nomes, arquivos que

não podem ser lidos ou gravados, arquivos de dispositivos, arquivos que mudam de

tamanho durante o backup, arquivos que são criados e apagados durante o backup entre

outros.

Compilação de programas

O procedimento de compilação de um programa parte do princípio que, através do código fonte do programa disponível para uso, qualquer um possa ter acesso ao código e gerar o binário final a partir dele. O procedimento de compilação sempre é

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 115

bem parecido para todas as aplicações, porém sempre que for compilar algum programa devemos consultar o arquivo “INSTALL” que sempre está presente junto com o código fonte. Durante este trabalho vamos precisar dos seguintes programas pré-instalados:

gcc g + + make libc6-dev glibc-devels (algumas outras distribuições usam)

Direcionamento de como trabalhar com compilação de programas:

Se tiver o ./configure, rode o configure.

Tem configure

./configure

Tem makefil

make Make install

sim

Não

FIM

documentação

Início

Todos os recursos de compilação estão no makefile.

Vamos baixar o nmap (utilitário de rede para verificação e análise de portas.

Baixe o código fonte, que está disponível em www.insecure.org.

Descompactando o pacote:

# tar xvjf nmap-versão.tar.bz2 –C /usr/local

Acessando o diretório dos fontes: # cd /usr/local/nmap-versão

Começando a compilação:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 116

Executar o script configure, este passa parâmetros de como deve ser compilado o

programa. Gera o arquivo Makefile, que serve como referência para o comando

make. Digite:

# ./configure

Comando para compilar o pacote:

# make

Comando opcional para testar a integridade dos binários compilados:

# make check

Instalar o programa, os arquivos de dados e a documentação:

# make install

Remover arquivos binários e de objeto do diretório fonte que não serão mais

necessários:

# make clean

O programa foi compilado. Agora é só testar:

# nmap localhost

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 117

Servidor

X Window ----------------------------------------------------------------------------------------

Configurando o

Ambiente

Gráfico

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 118

O que é X Window? É um sistema gráfico de janelas que roda em uma grande faixa de computadores,

máquinas gráficas e diferentes tipos de máquinas e plataformas. Pode tanto ser

executado em máquinas locais como remotas através de conexão em rede.

O servidor X controla o teclado, mouse e a exibição dos gráficos em sua tela.

Quem é o gerenciador de Janelas?

É o programa que controla a aparência da aplicação. Os gerenciadores de janelas

(window managers) são programas que atuam entre o servidor X e a aplicação. Você

pode alternar de um gerenciador para outro sem fechar seus aplicativos.

Existem vários tipos de gerenciadores de janelas disponíveis no mercado entre

os mais conhecidos estão o Window Maker, Gnome, KDE, twm (este vem por padrão

quando o servidor X é instalado), Enlightenment, IceWm, etc.

Quem é a aplicação cliente?

É o programa sendo executado.

Instalando o X Window

X Window System é a interface gráfica mais utilizada em ambientes UNIX.

O pacote necessário para uso desta interface gráfica pode ser encontrado

diretamente no site oficial http://www.xfree86.org.

Instalando o Xfree86 via apt-get:

# apt-get install x-window-system-core

Comando de instalação do X.org (projeto de continuação do Xfree):

# apt-get install xserver-xorg xlibs xlibs-data

Fazendo a configuração do Xfree86:

# xf86config

Ou

# XFree86 -configure

Fazendo a configuração no X.org:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 119

# Xorg -configure

O comando XFree86 –configure gera em /root, um arquivo com o nome

XF86Config.new. Vamos adicionar algumas configurações neste arquivo:

Configurando o arquivo /root/XF86Config.new:

OBS: As alterações estão em negrito.

---------------------------------------------------------------------------------------------------------- # Configuração geral do servidor, tela e dispositivos de entrada e saída: Section "ServerLayout" Identifier "XFree86 Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection # Localização dos módulos e das fontes que serão utilizadas pelo servidor gráfico: Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" ModulePath "/usr/X11R6/lib/modules" FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/Speedo/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/" FontPath "/usr/X11R6/lib/X11/fonts/CID/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/" EndSection # Informações dos módulos que serão carregados pelo servidor: Section "Module" Load "dbe" Load "dri" Load "extmod" Load "glx" Load "record" Load "xtrap" Load "speedo" Load "type1" EndSection # Configurações do teclado: Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" --------------------------------------- padrão ABNT2----------------------------------------------- Option “xkbmodel” “abnt2” Option “xkblayout” “PS/2”

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 120

-----------------------------------padrão internacional (Americano)------------------------------ Option “xkbmodel” “pc102” Option “xkblayout” “us_intl” EndSection # Configuração do mouse: Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/mouse" --------------------------------------- mouse PS/2 --------------------------------------------------- Option “Protocol” “PS/2” Option “Device” “/dev/psaux” ------- se for com rodinha, modifique a última linha: Option “Device” “/dev/input/nice” EndSection # Especificações do monitor, como taxa de atualização vertical e freqüência horizontal de sincronização: Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" Horizsync 31.5 – 48.5 Vertrefresh 50 - 90 EndSection # Informação do driver atualizado da placa de vídeo: Section "Device" ### Available Driver options are:- ### Values: <i>: integer, <f>: float, <bool>: "True"/"False", ### <string>: "String", <freq>: "<f> Hz/kHz/MHz" ### [arg]: arg optional #Option "HWcursor" # [<bool>] #Option "NoAccel" # [<bool>] Identifier "Card0" Driver "vmware" VendorName "VMWare Inc" BoardName "Unknown Board" BusID "PCI:0:15:0" EndSection # Seção de configuração da resolução e número de cores a ser utilizado: Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0"

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 121

DefaulDepth 24 SubSection "Display" Depth 1 EndSubSection SubSection "Display" Depth 4 EndSubSection SubSection "Display" Depth 8 EndSubSection SubSection "Display" Depth 15 EndSubSection SubSection "Display" Depth 16 EndSubSection SubSection "Display" Depth 24 Modes “1024x768” “800x600” EndSubSection EndSection ---------------------------------------------------------------------------------------------------------- OBS: No X.org o arquivo de configuração está localizado em /etc/X11/xorg.conf

Para verificar se o servidor gráfico foi configurado corretamente, digite: # X

Para configurarmos o servidor X precisamos editar o arquivo que controla quem irá acessar o servidor X:

# vi /etc/X11/xdm/Xacess

Inclua a seguinte linha no arquivo: 100.100.100.0

Isto permite que todas as máquinas desta rede podem acessar o servidor.

Reiniciando o serviço do xdm: # /etc/init.d/xdm restart

Fazendo os clientes se conectarem ao servidor X: # X –query [ip do servidor X] : 1

Xnest

É uma ferramenta que permite rodar aplicações gráficas em um servidor remoto.

Ele já vem incorporado no pacote do servidor X.

Iniciando o nosso cliente gráfico:

# startx

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 122

Em um shell dentro do ambiente gráfico vamos executar o Xnest, desabilitando

qualquer controle de acesso:

# Xnest : 1 -ac &

No servidor remoto é necessário fazer um login com o ssh e executar o seguinte

comando:

# export DISPLAY=[ ip da máquina ] : 1

Coloque o ip da máquina a qual deseja exportar o display, redirecionando a

aplicação a ser executada na máquina local, através do Xnest.

A partir da execução do procedimento anterior, já é possível testar uma

aplicação gráfica, onde irá rodar dentro da tela do Xnest. Ex:

# xcalc

Obs: O acesso da aplicação é feito remotamente e os processos da aplicação executada

estarão consumindo recursos do servidor e não da máquina local.

Instalando o gdm ou kdm:

# apt-get install gdm

# apt-get install kdm

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 123

Instalando o wmaker, gnome e kde:

# apt-get install wmaker

# apt-get install gnome

# apt-get install kde

OBS: Para alternar a configuração da tela do ambiente gráfico, use as teclas:

CTRL ALT + ou CTRL ALT -

Para traduzir o kde ou outro programa. Faça a pesquisa pelos pacotes disponíveis

do programa:

# apt-cache search kde

Tradução para português: # apt-get install kde-i18n-ptbr

Caso você queira deletar os gerenciadores de login: xdm, kdm e gdm. Digite o

comando:

# apt-get remove –purge [pacote]

U S U Á R I O S

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 124

Com este comando, você estará removendo os pacotes referentes aos

gerenciadores de login. Neste caso, o login será feito no modo texto.

Através do modo texto, é possível escolher o ambiente gráfico que será usado.

Para tal ação, digite o comando:

# echo “exec startgnomesession” > ~/.xinitrc

Ou # echo “exec startkde” > ~/.xinitrc

Ou # echo “exec startwmaker” > ~/.xinitrc

Para executar a interface gráfic adotada. Digite: # startx

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 125

Serviços básicos

de Rede

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 126

Configurando uma rede Descobrindo o modelo da placa de rede:

# lspci

Verificando se há o módulo para esta interface: # ls /lib/modules/`uname –r`/kernel/drivers/net

Caso precise levantar o módulo, digite o comando: # modprobe [módulo]

Para verificar se o módulo está carregado, digite: # lsmod | grep [módulo]

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 127

Informações de endereçamento IP:

# ifconfig

eth0 Encapsulamento do Link: Ethernet Endereço de HW 00:08:54:30:A9:9D inet end.: 100.100.100.50 Bcast:100.100.100.255 Masc:255.255.255.0 endereço inet6: fe80::208:54ff:fe30:a99d/64 Escopo:Link UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1 RX packets:403 errors:0 dropped:0 overruns:0 frame:0 TX packets:51 errors:0 dropped:0 overruns:0 carrier:0 colisões:0 txqueuelen:1000 RX bytes:36828 (35.9 KiB) TX bytes:7256 (7.0 KiB) IRQ:5 Endereço de E/S:0xa000 lo Encapsulamento do Link: Loopback Local inet end.: 127.0.0.1 Masc:255.0.0.0 endereço inet6: ::1/128 Escopo:Máquina UP LOOPBACKRUNNING MTU:16436 Métrica:1 RX packets:88 errors:0 dropped:0 overruns:0 frame:0 TX packets:88 errors:0 dropped:0 overruns:0 carrier:0 colisões:0 txqueuelen:0 RX bytes:5496 (5.3 KiB) TX bytes:5496 (5.3 KiB) Eliminando as configurações de rede:

# ifconfig eth0 down

Exibindo a configuração:

# ifconfig

Subindo o service de rede:

# ifconfig eth0 up

Configurando o IP, Máscara e Broadcast:

# ifconfig eth0 100.100.100.x netmask 255.0.0.0 broadcast 100.100.100.255

Verificando se há conectividade:

# ping 100.100.100.x

PING 100.100.100.50 (100.100.100.50) 56(84) bytes of data. 64 bytes from 100.100.100.50: icmp_seq=1 ttl=64 time=0.042 ms 64 bytes from 100.100.100.50: icmp_seq=2 ttl=64 time=0.027 ms 64 bytes from 100.100.100.50: icmp_seq=3 ttl=64 time=0.027 ms 64 bytes from 100.100.100.50: icmp_seq=4 ttl=64 time=0.026 ms --- 100.100.100.50 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.026/0.030/0.042/0.008 ms

O ifconfig é dinâmico, para que as configurações de endereçamento IP sejam carregadas durante o boot. O arquivo de configuração é:

# vi /etc/network/interfaces

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 128

# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 100.100.100.50 netmask 255.255.255.0 broadcast 100.100.100.255 Network 100.100.100.0 Gateway 100.100.100.1

Verificar daemon networking, para garantir boot do serviço:

# ls /etc/rcS.d

Configurando o nome da máquina:

# vi /etc/hostname

Configurando o nome da máquina e o nome de domínio:

# vi /etc/hosts

-------------------------------------------------------------------------------------------- 127.0.0.1 localhost.localdomain localhost instrutor # 127.0.0.1 localhost # 100.100.100.50 clubedohacker.com.br # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts --------------------------------------------------------------------------------------------

Verificar domínio que está sendo utilizado:

# hostname -f

Roteamento:

# route

Tabela de Roteamento IP do Kernel Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 129

100.100.100.0 * 255.255.255.0 U 0 0 0 eth0 Configurando o roteamento:

# route add default gw 100.100.100.1

Tabela de Roteamento IP do Kernel Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface 100.100.100.0 * 255.255.255.0 U 0 0 0 eth0 default 100.100.100.1 0.0.0.0 UG 0 0 0 eth0 Configurando Localidade

Mostrar como está configurado atualmente: # locale

Para configurar sua localidade corretamente:

# dpkg-reconfigure locale

Primeira tela: pt_BR ISO-8859-1 Segunda tela: pt_BR

Testando: ifconfig

# LANG=us (modificando a linguagem)

# ifconfig

Configurações relacionadas à localidade: # cat /etc/environment

Configurações relacionadas ao fuso horário:

# cat /etc/timezone

Configurar data: # date MMDDhhmmYY

Atualizar a hora da bios de acordo com a hora do S.O: # hwclock -w

Procedimento de check-list dos serviços de rede

Algumas perguntas necessárias para poder configurar um servidor de rede: Tenho o programa instalado?

# dpkg –l | grep [nome_do_serviço]

A porta está definida? # cat /etc/services | grep [nome_do_serviço]

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 130

Está configurado e inicializado?

# nano /etc/inetd.conf arquivo de configuração

# /etc/init.d/inetd start Inicializando o serviço de rede

Algumas vezes é necessário ler a documentação para saber se o serviço é um destes: padrão inet (/etc/inetd.conf), stand alone ou RPC Portmapper.

RPC

Chamada de Procedimento remota. São as rotinas de RPC que permitem os programas em C fazer chamadas a procedimento em outras máquinas pela network. Quando as pessoas falam sobre o RPC elas querem dizer freqüentemente sobre a variação do SUN da RPC.

RPC Potmapper É um servidor que converte programas de RPC em números de TCP/IP (ou

UDP/IP) números de protocolos para porta.

A porta está ativa? # netstat –nlt | grep :[nº_porta]

Que processo roda na porta? # fuser –v porta/tcp ; lsof –i ; netstat -nltd

A porta está disponível para conexões remotas? # nmap –sT –n –A [ip_da_máquina]

Atenção:

Não se esqueça de verificar os serviços de login. Digite: # last usuário. O arquivo onde é localizada as informações de usuários on-line, é o /var/log/utmp.

TELNET x SSH

TELNET

No Telnet as informações trafegam sem criptografia (clear text). Se rodar um

sniffer no mesmo seguimento de rede, será possível olhar todos os dados.

Verificando se o serviço está instalado:

# dpkg -l | grep telnet

Instalando o serviço:

# apt-get install telnet-server

Verificando se o serviço está instalado:

# dpkg -l | grep telnet

ii telnet 0.17-29 The telnet client

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 131

ii telnetd 0.17-29 The telnet server

Habilitando o telnet, o mesmo é controlado pelo super daemon de rede inetd.

# vi /etc/inetd.conf

#:OTHER: Other services #<off># netbios-ssn stream tcp nowait root /usr/sbin/tcpd /usr/sbin/smbd telnet stream tcp nowait telnetd.telnetd /usr/sbin/tcpd/usr/sbin/in.telnetd Analisando o que será inserido no arquivo /etc/inetd.conf:

telnet nome do servidor, como está registrado no arquivo /etc/services.

stream tipo de socket de rede usado pelo protocolo, possíveis valores são stream,

dgram, raw, rdm e seqpacket.

tcp tipo de protocolo utilizado, deve ser um protocolo que conste no arquivo

/etc/protocols.

nowait/wait (não aguardar/aguardar) é significativo para tipos de soquete de

datagrama (dgram), outros tipos de soquete usam o valor nowait.

telnetd.telnetd usuário e grupo que irão executar o processo de servidor.

/usr/sbin/tcpd tcpd é o arquivo de programa para o programa TCP Wrappers. A

maioria das distribuições Linux que usa inetd, também usa TCP Wrappers, e assim,

lança a maioria dos servidores mediados por inetd através de tcpd.

/usr/sbin/in.telnetd argumentos do programa servidor, no caso de servidores lançados

pelo TCP Wrappers, o argumento é o nome final do servidor de tcpd.

Subindo o serviço:

# cd /etc/init.d/

Stop no serviço:

/etc/init.d# ./inetd stop

Start no serviço:

/etc/init.d# ./inetd start

Agora é só fazer um teste no servidor telnet do colega.

# adduser telnetx

senha: XXXXXX

Por padrão o telnet não permite conexões como root. Vamos acessar o computador do colega:

# telnet ip_do_colega

Se for usar o telnet no Sistema. Garanta que o serviço está na inicialização:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 132

# ls /etc/rc2.d

SSH

É um outro tipo de servidor remoto de LOGIN. É responsável pela autenticação segura

e criptografia de dados, além de logins e execução de arquivos remotamente.

# dpkg -l | grep ssh

# apt-get install ssh

Detalhes do arquivo de configuração:

# vi /etc/ssh/sshd_config

Port 22 Protocol 2 KeyRegenerationInterval 3600 LoginGraceTime 600 PermitRootLogin yes RSAAuthentication yes PubkeyAuthentication yes PermitEmptyPasswords no Passwordauthentication yes

Start no serviço:

# /etc/init.d/ssh start

Conectando no servidor SSH:

# ssh <hostname>

# ssh usuario@hostname

# ssh -l usuario ip_do_servidor

Também se pode executar comandos remotamente:

# ssh -l usuario 100.100.100.x du -hs /etc

Fazendo cópia de dados:

Fazendo um download de arquivos do servidor:

# scp usuario@ip_do_servidor:/diretório_remoto/arquivo dir_local

Fazendo um upload do servidor:

# scp arquivo usuario@ip_do_servidor:/diretorio_remoto

# scp /tmp/teste [email protected]:/home/usuario

Fazendo um download do diretório remoto do SSH:

# scp -r usuario@ip_do_servidor:/diretorio_remoto diretorio_local

# scp -r [email protected] :/tmp /root

Fazendo um upload no diretório no servidor:

# scp -r diretorio_local usuario@ip_do_servidor:/diretorio_remoto

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 133

SSH com chaves

Gera chaves de autenticação RSA com o protocolo SSH:

# ssh-keygen -t rsa

Podemos deixar uma palavra para permitir acesso no servidor remoto.

Serão gerados dois arquivos no home do usuário, no subdiretório .ssh, são eles: id_rsa e id_rsa.pub.

O primeiro é chave privada. O segundo deve ser enviado via canal para o servidor de acesso, pois é o arquivo de

chave pública:

# scp ~/.ssh/id_rsa.pub usuario@ip:.ssh/

O usuário deve ser o mesmo no servidor do cliente. Acesse o servidor SSH com o usuário, e coloque sua chave pública no arquivo, onde o

servidor mantém o controle das chaves autorizadas:

# ssh usuario@ip

# cd .ssh/

# cat id_rsa.pub >> authorized_keys

Agora é só logar no servidor normalmente e ver se consegue logar sem senha:

# ssh usuario@ip

TCPWrappers

Os TCP Wrappers são utilizados para aplicar regra de acesso aos servidores

utilizados em seu sistema, podendo permitir ou negar as conexões à eles. Eles são

controlados por dois arquivos: /etc/hosts.allow (configuração de acessos permitidos para

determinados IPs) e /etc/hosts.deny (configuração de acessos negados para

determinados IPs).

---------------------------------------------------------------------------------------------------------- Para liberar o acesso de um determinado serviço para todos da rede, é necessário adicionar a seguinte linha no arquivo /etc/hosts.allow: in..telnetd:ALL ---------------------------------------------------------------------------------------------------------- Bloqueando o acesso a um serviço, para todos da rede 192.168.100.0 menos para o ip 192.168.100.100: Adicione a seguinte linha no arquivo /etc/hosts.deny: sshd: 192.168.100. EXCEPT 192.168.100.100 ----------------------------------------------------------------------------------------------------------

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 134

O arquivo /etc/hosts.allow tem preferência de leitura em relação ao /etc/hosts.deny. Insira nos dois arquivos, a seguinte linha:

in.sshd:ALL

O que vai acontecer?

Agendamento de tarefas (cron) O cron é um daemon que permite o agendamento da execução de um

comando/programa para um determinado dia/mês/ano/hora. É muito usado em tarefas

de arquivamento de logs, checagem da integridade do sistema e execução de

programas/comandos em horários determinados, mas isso não impede que ele possa ser

usado para tarefas simples.

Utilize o comando at para agendar a seguinte tarefa: listar todos os arquivos do

diretório /root e direcionar a saída para o arquivo /tmp/arquivo.txt, utilize o comando

date para saber a hora e data do sistema e coloque esta tarefa para que seja executada

daqui a 1 minuto.

#date

# at 21:30 03/05/2007

at> ls –l /root> /tmp/arquivo.txt

O atalho CTRL D salva o agendamento.

Visualizando as tarefas agendadas: # atq

Para remover uma tarefa agendada:

# atrm

Colocando o cron em uma rotina para fazer backup do diretório /etc/ de um em um minuto:

chama um arquivo temporário para edição do agendamento:

# crontab –e

* * * * * tar cvzf backup.tar.gz /etc

Trabalhando com servidor de sincronização de horário – NTP

Tem por função, estabelecer uma sincronia do relógio do sistema com a

referência mundial de tempo, o padrão UTC (Horário Universal Coordenado), através do protocolo NTP.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 135

Ele trabalha com uma associação de hierarquia de servidores, que são

denominadas stratum. O stratum 0 é a origem da hierarquia dos servidores de tempo,

onde estão os equipamentos de fonte de horários reais mais precisos (receptores GPS e

relógios atômicos). Logo abaixo, no stratum1 estão os servidores públicos diretamente

sincronizados com os equipamentos de precisão. No stratum 2, estão os servidores

públicos utilizados por padrão pelos demais servidores e clientes ntp do mundo, para

evitar sobrecarga no stratum1.

Qualquer servidor NTP que tenha como referência de tempo um servidor stratum

1 passa a ser um stratum 2, qualquer servidor NTP que tenha como referência de tempo

um servidor stratum 2 passa a ser um stratum 3, e assim por diante.

Feito o download da última versão do NTP a partir de:

http://www.ntp.org Descompactando o pacote:

tar -xvzf nome_do_pacote.tar.gz –C /usr/local/

ou tar -xvjf nome_do_pacote.tar.bz2 –C /usr/local/

A compilação e instalação do servidor NTP é trivial, normalmente basta seguir

os passos indicados no arquivo INSTALL contido na distribuição.

OBS: Em nosso caso será adicionado o parâmetro --prefix=/usr/local/ntps/ para que o servidor de NTP seja instalado em /usr/local/ntps.

Estes se resumem basicamente à execução dos seguintes comandos:

./configure --prefix=/usr/local/ntps

make

make check

su

make install

Os binários foram instalados no diretório /usr/local/ntps/bin:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 136

ntpd: Processo daemon. ntpdate: Utilitário que permite configurar o horário e data locais usando como referência um servidor NTP remoto. Similar ao conhecido comando ntpdate. ntpq e ntpdc: Programas de monitoramento e controle. Permitem realizar consultas a servidores NTP sobre o estado do mesmo e, eventualmente, requerer mudanças de tal estado. ntptrace: Determina de onde um determinado servidor NTP obtém a referência de tempo e raça o caminho seguido até o servidor master (comumente, servidor NTP stratum 1). Todos eles são criados com permissão 755 (isto é, rwxr-x-r-x), tendo como dono o usuário root.

A configuração do servidor NTP incluiu os seguintes passos:

Criação do arquivo de configuração. Este arquivo é o usr/local/ntps/etc/ntp.conf.

OBS: O conteúdo do arquivo de configuração /usr/local/ntps/etc/ntp.conf encontra-se no

final deste documento, no anexo.

Criação do arquivo "drift" com conteúdo vazio. A diretiva drift no arquivo de

configuração indicará a localização e nome deste arquivo. Este arquivo é o

/usr/local/ntps/etc/ntp.drift.

Inicialização do daemon ntpd. O daemon pode ser inicializado usando o seguinte

comando:

# /usr/local/ntps/bin/ntpd -c /usr/local/ntps/etc/ntp.conf

Ou através do script de inicialização ntpd contido em /etc/init.d/.

Existindo entre os respectivos relógios dos servidores local e remoto um offset

(diferença) maior do que 1000 seg (aprox. 20 minutos), o daemon não configurará o

relógio local, será gerada automaticamente uma mensagem de log e automaticamente

será desativará.

Para verificar se o daemon ntpd foi corretamente inicializado podem ser usados

os utilitários ntpq e ntpdc, executando qualquer um dos seguintes comandos.

Implementando o serviço NTP na sua rede local:

ntpq -p [ip_servidor_NTP_local]

ntpdc [ip_servidor_NTP_local]

Uma inicialização sem sucesso será reportou no arquivo de logs por uma mensagem

do tipo:

ntpq: read: Connection refused

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 137

Neste caso é preciso ajustar previamente o relógio local com algum servidor NTP

remoto, usando para tal o mecanismo de ajuste ntpdate:

ntpdate [ip_servidor_NTP_remoto]

Uma inicialização com sucesso é indicada por uma saída do tipo:

ntpq -p xxx.xxx.xxx.xxx

Quando o daemon do servidor local inicializa, leva em torno de 5 minutos para

sincronizar adequadamente com o servidor remoto. Em alguns casos é necessário

esperar horas para tal sincronização. Uma diferença de tempo menor que 128 ms é

requerida para sincronização.

Configuração dos clientes Linux

Configurando os clientes Linux para serem atualizados a cada 30 minutos. Para

isso usamos o ntpdate e o cron. O cron pode ser interpretado como um serviço do Linux

que é carregado durante o processo de boot do sistema. Trata-se de uma ferramenta que

permite programar a execução de comandos e processos de maneira repetitiva ou apenas

uma única vez.

É necessário um software cliente de NTP. No nosso caso usamos o ntpdate. A

instalação do ntpdate irá variar conforme a distribuição Linux usada.

Após instalados os softwares necessários, temos de fazer as configurações dos

mesmos. No arquivo /etc/crontab foram adicionadas as seguintes linhas:

#[minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando]

0,30 * * * * root /usr/sbin/ntpdate xxx.xxx.xxx.xxx

Onde xxx.xxx.xxx.xxx é o endereço IP do nosso servidor de NTP. Então reiniciamos o cron.

Identificação dos servidores fonte de horários:

# ntptrace 192.168.100.100

Para as máquinas de rede que forem os clientes NTP, é possível fazer a

sincronização do horário com o servidor através do comando ntpdate:

# ntpdate 192.168.100.100

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 138

Gerenciando impressão no sistema

O CUPS (Commom Unix Printing System) é uma das formas atualmente mais

utilizadas para trabalharmos com impressão no mundo Linux. Ele utiliza o protocolo

IPP (Internet Priting Protocol) para gerenciar as filas e trabalhos de impressão.

O CUPS fornece uma interface Web para gerenciamento, quotas para impressão

e suporte para a maioria das impressoras existentes.

Antes de instalar o CUPS é necessário instalar o gs, que é um interpretador de

arquivos Postscripts, pois o sistema de impressão se utiliza de arquivos no formato PPD,

que são responsáveis pela comunicação com o driver da impressora através do padrão

Postscript.

# apt-get install gs

Instalando os pacotes do CUPS:

# apt-get install cupsys cupsys-client

cupsys servidor de impressão CUPS cupsys-client cliente de impressão do CUPS Verificando se o sistema possui suporte ao driver da nossa impressora:

# gs -h

Para suporte a drivers da HP, instale o pacote hpijs: # apt-get install hpijs

Para suporte à impressora: # apt-get install foomatic-* -y

OBS: Caso sua impressora não possua suporte, você pode procurar pelo driver correspondente para ela em: www.linuxprinting.org. Acessando o arquivo de configuração do servidor de impressão, para visualizarmos algumas opções importantes de configuração:

# cat /etc/cups/cupsd.conf | less

Levantando o CUPS:

# /etc/init.d/cupsys start

Testando para verificar se o serviço está ok:

# lpstat -t

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 139

A gerencia das configurações relacionadas à fila de impressão, impressoras instaladas, e outros, ocorre através da interface gráfica de gerenciamento do CUPS via browser.

No browser digite:

localhost:631/admin

Definindo políticas de uso da impressora: Quantidade de páginas que podem ser impressas por usuário:

# lpadmin –p Imp01 –o job-page-limit=10

Tamanho limite de arquivos impressos pelos usuários (em KB):

# lpadmin –p Imp01 –o job-k-limit=1000

Tempo de validade da quota por usuário:

# lpadmin –p Imp01 –o job-quota-period=86400

Todas as informações foram geradas no arquivo de configuração da impressora no cups,

onde todos esses parâmetros estão no arquivo /etc/cups/printers.conf.

Verificando referência de impressoras conectadas:

# lpinfo -v

Arquivo no qual o sistema busca definições das impressoras existentes:

# nano /etc/printcap

Usando o modo mais básico para impressão de arquivos em Linux:

# echo teste > /dev/lp0

# cat arquivo.txt > /dev/lp0

Fazendo um teste de impressão com o comando “lp”:

# lp –dImp01 arquivo.txt

Na opção “–d” é necessário especificar o nome da impressora. Verificando a fila de impressão:

# lpq –Pimp01

ou

# lpstat -t

Removendo um trabalho da fila de impressão:

# lprm –Pimp01 5

O 5 é o número do job na fila de impressão.

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 140

Compartilhamento de arquivos em Redes

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 141

Servidor NFS O Servidor NFS é o servidor de compartilhamento de arquivos padrão em

sistemas Linux e/ou Unix. Ele se utiliza do protocolo NFS (Network File System). Suas

principais utilidades em uma rede são a centralização de informações públicas e de

intenso acesso, e o armazenamento de grandes arquivos em um único local (facilitando

o backup da rede).

Instalando o servidor NFS:

# apt-get install nfs-kernel-server

Configurando os diretórios a serem exportados através do servidor NFS,

editando o arquivo /etc/exports:

# nano /etc/exports

Indique o diretório a ser exportado:

/tmp *(ro) exportando o diretório /tmp do servidor, com a permissão somente

leitura para todos.

/home/share 100.100.100.0/24(rw) exportando o /home/share com permissão de

leitura e gravação somente para a minha rede.

No mesmo arquivo você pode acrescentar mais informações. Compartilhe o

diretório home de um usuário, aplique a permissão de escrita para uma máquina e

somente leitura para o resto da rede, mas ninguém acessa o diretório /home/tux/privado:

/home/usuário 100.100.100.100(rw,root_squash)

/home/usuario 100.100.100.0/24(ro,secure,no_root_squash)

A opção “secure” faz com que o servidor aceite somente conexões feitas por portas

abaixo de 1024;

A opção “no_root_squash” faz com que o root seja considerado um usuário

comum,

A opção “root_squash” permite uid=0 nas conexões

A opção “hide” especifica que todos têm o acesso negado ao diretório (por isso

essa linha é deixada no final)

O NFS não trabalha com uma porta padrão convencional, usa um utilitário

chamado portmapper, que utiliza a porta fixa (111), monitora a porta que o NFS usa e

direciona os clientes para portas certas (normalmente a porta 2049/UDP).

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 142

Inicializando o portmapper e o NFS:

# /etc/init.d/portmap start

# /etc/init.d/nfs-kernel-server start

Visualizando os arquivos que estão no servidor:

# showmount –e 100.100.100.100

Montando o compartilhamento ativo do servidor:

# mount –t nfs 100.100.100.100:/tmp /mnt/nfs

Removendo o compartilhamento do diretório /tmp do servidor sem reiniciar o serviço:

# exportfs –u *:/tmp

# showmount –e 100.100.100.100 visualizando compartilhamento do /tmp removido

Para reativa-lo sem reiniciar o serviço:

# exports –a -r

Servidor Samba O Samba é um servidor de compartilhamento de arquivos e/ou impressoras,

utilizando para isso o protocolo SMB (Server Message Block), que também é o

protocolo padrão utilizado para compartilhamento em redes Microsoft. Por este motivo,

ele é muito utilizado para inteoperabilidade entre redes Linux e Microsoft.

Instalando o Samba:

# apt-get install samba smbclient smbfs

samba servidor samba

samba-commom arquivos de configuração do samba

smbclient cliente samba para Linux

smbfs montagem de compartilhamentos através do Linux

Acessando o arquivo de configuração do samba:

# nano /etc/samba/smb.conf

O arquivo de configuração, parâmetros "avançados" Verifiquemos os seguintes parâmetros:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 143

Seção [global]

netbios name: Pode especificar o nome netbios do seu servidor samba. Pode ver o nome netbios na vizinhança da rede a partir das suas máquinas windows. Se não atribuir nenhum, o servidor linux obterá o seu nome de netbios a partir do seu nome de rede.

invalid users: Lista de utilizadores sem acesso ao samba. Por exemplo, o "root" não devia ser permitido.

interfaces: Se o seu servidor linux tiver mais do que uma placa de rede e quer restringir a sua atividade a uma só placa de rede.

security: Seleção do modo de segurança a ser utilizada. Usando security=user requer que cada utilizador tenha uma conta no servidor GNU/Linux. Se não quiser que o samba administre os utilizadores e compartilhe o mesmo recurso para todos, pode selecionar security=share.

workgroup: Nome do grupo de trabalho do qual o seu servidor Linux deve fazer parte.

server string: Uma descrição para a sua máquina Linux (uma string qualquer).

socket options: Uma lista de opções para "personalizar" o samba e torná-lo mais rápido.

encrypt passwords: Deve-se utilizar palavras-chave encriptadas. É importante saber que praticamente todos os sistemas Windows utilizam um esquema diferente.

wins support: Permite o seu servidor Linux a trabalhar como um servidor WINS.

os level: O Nível do SO para saber qual é que é "eleito" como master domain, local domain, etc.

domain master: Define o samba como domain master

local master: Define o samba como um servidor local master

preferred master: Deve ser o samba "preferido" entre outros servidores, se existirem

domain logons: Deve o Samba controlar as ligações para todo o domínio

logon script: Qual a script a correr quando um utilizador abre uma sessão

logon path: Onde estão as scripts de arranque

logon home: Onde se devem armazenar os perfis de usuário

name resolve order: Qual é a ordem de recursos a seguir para encontrar o nome de uma máquina na rede

dns proxy: Deve o servidor samba ser utilizado como um proxy de DNS

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 144

preserve case: Para manter o nome de arquivos em letra MAIÚSCULAS.

short preserve case: Para manter o nome de arquivos em letras MAIÚSCULAS.

unix password sync: As palavras-chave do Unix e Windows devem estar sincronizadas

passwd program: Qual o programa a utilizar na mudança de palavras-chave.

passwd chat: Qual é o protocolo a utilizar para alterar a palavra-chave

max log size: Tamanho máximo do arquivo de log.

Seção [netlogon]

Especificar onde se encontra o netlogon.

Seção [profiles]

Bloco dos perfis de usuários.

Seção [homes]

Diretório de trabalho dos usuários.

Variáveis Samba

Variável Definição Variáveis do Cliente %a Arquitectura do Cliente

Exemplo: Win95, WfWg, WinNT, Samba ... %I Endereço IP do cliente %m Nome de NetBios do cliente %M Nome de DNS do cliente Variáveis de usuário %g Grupo primário do utilizador %u %H Directório de trabalho do utilizador %u %u Nome Unix actual do utilizador Variáveis de partilha %P Raiz da partilha actual %S Nome da partilha actual Variáveis do servidor %h nome DNS do servidor Samba %L nome NetBios do servidor Samba %v Versão do Samba Variáveis variadas %T Data e tempo corrente

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 145

Se necessário criar um compartilhamento, adicione as linhas ao final do arquivo.

Exemplo de compartilhamentos:

[linux]

comment=testando o samba

path=/tmp/samba

valid users=user1 user2

writable=yes

creat mask=0600

directory mask=0700

[arquivos]

comment=mais uma vez testando o samba

path=/tmp/arquivos

writable=yes

write list= @aula

valid users= @aula

creat mask=0660

directory mask=0700

Verificando se o arquivo possui erros:

# testparm /etc/samba/smb.conf

Subindo o serviço do Samba:

# netstat –nlp | more

# /etc/init.d/samba start

# netstat –nlp | more

Consultando localmente o serviço:

# smbclient –L 127.0.0.1

Consultando se os compartilhamentos do servidor estão ativos:

# smbclient –L 100.100.100.100 -N

Adicionando usuários na base de dados SAMBA:

# smbpasswd –a [usuário]

Montando o compartilhamento linux com o usuário user1, e quando ele pedir a senha, coloque a que você definiu:

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 146

# smbmount //100.100.100.100/linux /mnt/samba -o username=user1

OBS: Se você tentar montar com qualquer usuário que não esteja definido com permissão de acesso ao compartilhamento, será retornado um erro.

Samba com PDC (Primary Domain Controler) O pdc é o responsável pela autenticação de usuários, caso ele se torne indisponível ( e

isso acontece muito ) pode-se promover um bdc a pdc e assim os usuários continuam a ser

autenticados. ################ P D C ################## Clube do Hacker ############ [global] workgroup = windows netbios name = eu server string = servidor pdc domain master = yes preferred master = yes local master = yes domain logons = yes logon script = netlogon.bat security = user encrypt passwords = yes os level = 100 logon home = \\%L\%U\.profiles logon path = \\%L\Profiles\%U= [netlogon] comment = Serviço de logon path = /var/samba/netlogon guest ok = yes browseable = no Executar um testparm:

# testparm /etc/samba/smb.conf

Subindo o serviço Samba:

# netstat -nlp | more

# /etc/init.d/samba start

# netstat -nlp | more

Cadastrar o root:

# smbpasswd -a root

Criando um diretório para configurar as permissões:

# mkdir -p /var/samba/netlogon

# chmod 775 /var/samba/netlogon

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 147

Cadastrando os logins dos usuários, com as senhas que eles utilizarão para fazer logon a

partir das máquinas Windows.

# adduser tux

# smbpasswd -a tux

É importante criar também o diretório “profile.pds” dentro do diretório home do

usuário, onde o cliente Windows armazena as informações da sessão cada vez que o usuário faz

logon no dimínio:

# mkdir /home/tux/profile.pds

Além das contas para cada usuário, é necessário cadastrar também uma conta (sem senha) para

cada máquina. Se a máquina se chama “linux” por exemplo, é preciso criar um login de

máquina com o mesmo nome:

# adduser linux1

# adduser linux2

# adduser linux3

# passwd -l linux1$

# passwd -l linux2$

# passwd -l linux3$

# smbpasswd -a -m linux1 ; smbpasswd -a -m linux1 ; smbpasswd -a -m linux1

# groupadd trust => “trust account” => nome de máquina

# useradd -g trust -s /dev/null -d /dev/null linux1$

# useradd -g trust -s /dev/null -d /dev/null linux2$

# useradd -g trust -s /dev/null -d /dev/null linux3$

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 148

Por último é necessário criar o arquivo “/var/samba/netlogon/netlogon.bat” um script

que é lido e executado pelo usuários ao fazer logon.

Para ativar o suporte no Samba, adicione no final da sessão [global] do smb.conf (abaixo da

linha “logonscript = netlogon.bat”)

logon home = \\%L\%U\.profiles

logon path = \\%L\profiles\%U

A variável “%L” neste caso indica o nome do servidor e o “%U” o nome do usuário que

está fazendo logon. Quando “tux” faz logon é montado o compartilhamento “\\gdh\profiles\tux”

Vamos adicionar também um novo compartilhamento, adicionando as linhas abaixo do final do

arquivo:

[profiles] path = /var/profiles writable = yes browsable = No crate mask = 0600 directory mask = 0700 É necessário criar um diretório “/var/profiles”, com permissão de escrita para todos os usuários:

# mkdir /var/profiles

# chmod 1777 /var/profiles

Cada usuário passa a ter uma pasta dentro da pasta (“/varprofiles/tux”) onde as

configurações são salvas. Vamos reinicializar o servidor SAMBA:

# /etc/init.d/samba restart

Fazendo um teste para saber se o meu master browser e o meu PDC estão respondendo

na minha rede:

# nmblookup -A -M 100.100.100.0

Agora é preciso configurar a máquina no Windows. É necessário trabalhar com o nome

da máquina e com o nome do domínio:

Depois reinicie o Windows e ingresse no domínio.

usuário: tux (criado anteriormente)

senha: a mesma do smbpasswd (agora /etc/samba/smbpasswd será base de dados dos usuários

do domínio)

domínio: windows

Administração e Segurança em Sistemas GNU/Linux

www.clubedohacker.com.br 149

--------------------Clube do Hacker ® ------------------------