Você está na página 1de 101

Linux Advanced Administrator

Especializa Treinamentos
Av. Engº Domingos Ferreira, 2391, salas 1202/1203/1204
Boa Viagem – Recife/PE
Tel.: (81) 3465-0032
Especializa Treinamentos <http:/ /www.especializa.com.br>

Índice

1 Por que Ubuntu?......................................................................................................................3


1.1 Ubuntu Desktop ou Server?...............................................................................................3
1.2 Versões do Ubuntu.............................................................................................................4
2 Servidor DHCP.........................................................................................................................5
2.1 Instalando o serviço DHCP.................................................................................................6
2.2 Configurando o serviço DHCP............................................................................................7
2.3 Iniciando o Servidor DHCP...............................................................................................12
3 Servidor de nomes (DNS)......................................................................................................14
3.1 Tipos de consultas...........................................................................................................15
3.2 Instalando o Servidor DNS...............................................................................................16
3.3 Configurando o Servidor DNS..........................................................................................17
3.4 Testando o serviço...........................................................................................................22
3.5 Configurando o Servidor DNS Secundário........................................................................24
3.6 Zona de Endereçamento Reverso....................................................................................25
4 Servidor SAMBA.....................................................................................................................27
4.1 Instalando o SAMBA.........................................................................................................28
4.2 Configurando uma Estação de Trabalho..........................................................................28
4.3 Compartilhando Diretórios...............................................................................................35
4.4 Compartilhando Impressoras...........................................................................................36
4.5 Configurando o SAMBA como PDC...................................................................................38
4.6 Configurando o Script de Logon.......................................................................................42
4.7 Utilizando Perfil Móvel......................................................................................................43
5 LDAP – Lightweight Directory Access Protocol.......................................................................45
5.1 Instalando o OpenLDAP....................................................................................................45
5.2 Configurando o Samba para autenticar estações Windows.............................................48
5.3 Configurando um cliente Linux........................................................................................53
5.4 Adicionando estações Windows ao domínio....................................................................54
5.5 Usando um catálogo de endereços no LDAP....................................................................55
6 Compartilhando recursos no Linux........................................................................................56
6.1 NFS (Network File System)...............................................................................................56
6.2 Habilitando perfil móvel no Linux....................................................................................58
7 Servidor de Impressão CUPS.................................................................................................59
7.1 Instalando o CUPS............................................................................................................60
7.2 Adicionando impressoras.................................................................................................60
7.3 Adicionando classes.........................................................................................................60
8 Servidor Apache....................................................................................................................61
8.1 Instalando o Apache.........................................................................................................62
8.2 Configurando o Apache...................................................................................................62
8.3 Hospedando mais de um Site..........................................................................................64
8.4 Instalando PHP + MySQL..................................................................................................67
8.5 Intalando Joomla! para testar o nosso LAMP....................................................................70
9 Servidor de Correio Eletrônico...............................................................................................72
9.1 Instalando o Postfix (SMTP)..............................................................................................74
9.2 Usando o PostfixAdmin....................................................................................................75
9.3 Instalando o Courier (IMAP e POP)....................................................................................81
10 Shell script...........................................................................................................................83
11 Kernel do Linux...................................................................................................................89

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
1
Especializa Treinamentos <http:/ /www.especializa.com.br>

11.1 Passando parâmetros no boot.......................................................................................89


11.2 Configurando parâmetros de execução.........................................................................90
11.3 Compilação do kernel....................................................................................................91
11.4 Carregando módulos do kernel......................................................................................96
11.5 Compilando módulos sem recompilar o kernel..............................................................97

2 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

1 Por que Ubuntu?


O Ubuntu1 é uma distribuição GNU/Linux baseada em Debian 2. Ela foi criada pela
empresa Canonical. Possui uma grande quantidade de pacotes disponíveis para
instalação através das melhores ferramentas de gerenciamento de pacotes. Novas
versões são lançadas semestralmente, nos meses de abril e outubro, garantindo que
as novidades cheguem rapidamente à distribuição.

O Ubuntu, para garantir o livre acesso a todos os softwares da distribuição fez as


seguintes promessas:

● Ubuntu sempre será livre de pagamento, incluindo versões empresariais e


atualizações de segurança;

● Ubuntu vem com suporte comercial completo da Canonical3 e centenas de


companhias espalhadas pelo mundo;

● Ubuntu inclui a melhor infraestrutura de acessibilidade e tradução que a


comunidade de software livre tem a oferecer.

● O CD do Ubuntu contém apenas aplicações software livre; nós encorajamos que


use sofware livre e de código aberto; improve it e passe-o a frente.

A distribuição conta com dois perfis de instalação, um orientada a Desktops e a outra


orientada a Servidores.

1.1 Ubuntu Desktop ou Server?


A versão Server possui um perfil de instalação bem básico. A instalação padrão não
ultrapassa os 500MB. Isto garante ao administrador que após a instalação o sistema
terá somente os softwares necessários ao funcionamento do servidor,
proporcionando mais segurança.

O Ubuntu Desktop possui um perfil de instalação completo para uso em estações de


trabalho e computadores pessoais. Uma série de softwares é instalada por padrão
para facilitar a vida do usuário. Interface gráfica, Suites Office, navegadores de
internet, mensageiros, compactadores, tocadores e gravadores de CD/DVD estão
disponíveis para o usuário ao término da instalação.

O Ubuntu Desktop conta ainda com dois instaladores, o instalador Desktop padrão e o
Alternate. A diferença entre os dois é que o Alternate, ao contrário do Desktop padrão,
não possui o instalador gráfico nem o LiveCD, em compensação uma série de outras
ferramentas são encontradas neste CD, como os arquivos para instalação pela rede.

1 http://www.ubuntu.com
2 http://www.debian.org
3 http://www.canonical.com

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
3
Especializa Treinamentos <http:/ /www.especializa.com.br>

1.2 Versões do Ubuntu


As versões do Ubuntu são lançadas a cada seis meses, nos meses de abril e outubro
de cada ano. O tempo de vida de cada versão é de 18 meses. Como exemplo
podemos pegar a versão 7.10, que foi lançada em outubro de 2007 e será mantida
até abril de 2009.

Existem algumas versões especiais chamadas de LTS (Long Term Support). Estas
versões possuem um prazo de suporte diferenciado, que para o perfil Desktop é de
três anos e para o perfil Server é de cinco anos. Isto é ideal para quem possui um
grande parque de máquinas instalado, pois não precisará trocar a versão do sistema
operacional dos seus computadores com uma frequência muito alta.

As versões LTS são lançadas com intervalos de dois anos. Observe que a versão 6.06
é chamada assim por atraso no seu lançamento, que deveria ter ocorrido em abril de
2006, mas só foi lançada em junho deste mesmo ano.

4 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

2 Servidor DHCP
Como visto no módulo anterior, cada computador em uma rede possui um endereço
IP único e algumas outras configurações que possibilitam o funcionamento em rede.
Este endereço pode ser atribuído a cada host da forma manual, onde o administrador
faz configurações em cada host indicando qual será o seu endereço, máscara de sub-
rede, gateway, servidores de nome e outras configurações mais. Outra forma de
realizar esta configuração é disponibilizar um servidor que gerencie os endereços e
configurações de rede de forma centralizada e automatizada.

Ambos os meios de configuração possuem vantagens e desvantagens. Pode ser


cômodo para o administrador de redes configurar uma rede com dez computadores
de forma manual, mas para administradores de redes que ultrapassam mil
computadores esta pode ser uma tarefa bastante trabalhosa e com grande
probabilidade de ocorrência de erros. Se dois ou mais hosts na rede estiverem
indevidamente utilizando o mesmo endereço IP haverá conflito e problemas
inesperados poderão acontecer. O diagnóstico de conflito de endereçamento IP pode
uma tarefa um tanto quanto trabalhosa. Como vantagem deste tipo de configuração
podemos dizer que este tipo de configuração nos permitirá saber exatamente onde
encontrar um host na rede sabendo apenas o seu endereço IP mediante uma consulta
a um cadastro, uma planilha eletrônica por exemplo.

A configuração dinâmica, como é chamada, nos traz justamente a vantagem de que


os endereços IPs e demais configurações de rede possam ser realizadas sem a
intervenção direta do administrador. Ela é realizada distribuindo os endereços
baseados uma faixa de endereçamento definida pelo administrador de redes. Este
tipo de configuração praticamente extingue os conflitos de endereçamento IP na rede.
A única desvantagem em relação à configuração manual é que os endereços dos
hosts não são conhecidos até que o endereço seja obtido junto ao servidor. Fixar os
endereços IPs também é possível forçando que um host com um determinado MAC
Address sempre obtenha o mesmo IP. Isto dá ao administrador uma junção das
vantagens de cada método, mas isto implica em um trabalhoso cadastro.

Uma outra vantagem bastante atraente na configuração dinâmica é a possibilidade de


alterar qualquer das configurações de rede, como os endereços dos servidores DNS ou
do gateway, por exemplo, sem a necessidade de reconfigurar cada host
individualmente. Isto, quando realizado em uma rede composta por uma quantidade
grande de computadores torna-se ainda mais atraente.

O serviço que fornece a configuração de rede dinâmica dos computadores é o DHCP


Server. O Protocolo de configuração de dinâmica de host, do inglês Dynamic Host
Configuration Protocol1, é definido pela RFC 2131.

O serviço DHCP é composto basicamente por dois componentes: um servidor e um


cliente. O servidor é responsável por gerenciar as configurações de rede e fornecê-las
a um determinado host quando solicitado. O cliente aqui descrito não é
necessariamente uma estação cliente, um outro servidor da rede poderá utilizar
endereçamento IP dinâmico e neste caso ele estará atuando como cliente.

1 RFC 2131 em http://www.ietf.org/rfc/rfc2131.txt, em inglês.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
5
Especializa Treinamentos <http:/ /www.especializa.com.br>

No Linux, mais especificamente Ubuntu, temos os pacotes dhcp3-server, que é um


servidor DHCP e também o dhcp-client, que é o cliente DHCP. Para usarmos o serviço
DHCP é necessário que o servidor esteja configurado com endereço de IP fixo. Isto é
necessário, pois o servidor durante a inicialização do serviço dhcp3-server irá verificar
se há uma interface de rede configurada com um endereço que faz parte da rede
fornecida pelo serviço. Ficou claro? Não? Vamos tentar novamente através de um
exemplo: - Para que o servidor DHCP forneça endereços na faixa 192.168.10.10 até
192.168.10.254, com máscara 255.255.255.0, é necessário que umas das interfaces
esteja configurado nesta rede, ou seja, na rede 192.168.10.0/24.

Durante a inicialização do cliente este envia um pacote na rede em broadcast nas


camadas 2 e 3 do modelo OSI1. Este pacote se propaga por todo o segmento de rede
e é ouvido por todos os hosts que estiverem conectados neste segmento. Ao receber
uma requisição deste tipo o servidor DHCP se apresenta e fornece um endereço IP
para o host. O host então configura sua interface de rede com o IP fornecido e ajusta
as demais configurações fornecidas pelo servidor. Em seguida ele informa ao servidor
DHCP que aceitou as configurações. Caso esteja configurado para isto, o servidor
agora irá registrar o host no servidor DNS.

Quando o host estiver desligando ele deverá contatar o servidor DHCP e informá-lo da
desconexão, então o servidor irá registrar que o endereço que estava atribuído a este
host está disponível novamente.

Na próxima vez que o host for ligado este irá contatar o último servidor DHCP que
forneceu o seu IP, e se o servidor estiver disponível ele irá solicitar o mesmo IP
utilizado durante a última conexão. Se o endereço IP ainda estiver disponível o
servidor irá aceitar o pedido do cliente e irá fornecer a este o endereço IP solicitado.

Se o último servidor DHCP não estiver disponível na rede, o cliente após tentar
contatá-lo sem sucesso irá fazer a requisição em broadcast novamente e iniciar todo o
procedimento caso outro servidor DHCP esteja disponível.

As configurações fornecidas pelo servidor terão validade, este período de validade é


definido pelo administrador de sistema durante a configuração do serviço.

Mesmo em casos em que uma máquina precise utilizar IP fixo, existem opções no
servidor DHCP para reconhecermos esta máquina e atribuirmos sempre o mesmo IP,
tornando, assim, um IP dinâmico em fixo. Esta configuração é feita fixando o IP que
será atribuído a um determinado MAC Address2.

2.1 Instalando o serviço DHCP


Para o processo de instalação, utilizaremos as ferramentas aptitude (Debian/Ubuntu)
ou yum (Red Hat/Fedora).

Usando o aptitude:

1 Modelo de Referência OSI, http://pt.wikipedia.org/wiki/Modelo_OSI


2 Endereço do host na camada 2 do modelo OSI

6 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

# aptitude install dhcp3-server

Usando o yum:

# yum install dhcp

2.2 Configurando o serviço DHCP


O arquivo de configuração do DHCP é /etc/dhcp3/dhcpd.conf (Debian/Ubuntu) ou /etc/
dhcpd.conf (Red Hat/Fedora). Vamos editar esse arquivo e configurá-lo da seguinte
forma:

# vi /etc/dhcp3/dhcpd.conf

option domain-name "labespecializa.com.br";


option domain-name-servers 192.168.10.2;
default-lease-time 172800;
max-lease-time 259200;

subnet 192.168.10.0 netmask 255.255.255.0 {


range 192.168.10.10 192.168.10.200;
option routers 192.168.10.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.10.255;
}

host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address 192.168.10.5;
}

Aquivo de configuração padrão do dhcp3-server da distribuição Ubuntu.

# The ddns-updates-style parameter controls whether or not the server will


# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# option definitions common to all supported networks...


option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;

default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
7
Especializa Treinamentos <http:/ /www.especializa.com.br>

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;

# No service will be given on this subnet, but declaring it helps the


# DHCP server to understand the network topology.

#subnet 10.152.187.0 netmask 255.255.255.0 {


#}

# This is a very basic subnet declaration.

#subnet 10.254.239.0 netmask 255.255.255.224 {


# range 10.254.239.10 10.254.239.20;
# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
#}

# This declaration allows BOOTP clients to get dynamic addresses,


# which we don't really recommend.

#subnet 10.254.239.32 netmask 255.255.255.224 {


# range dynamic-bootp 10.254.239.40 10.254.239.60;
# option broadcast-address 10.254.239.31;
# option routers rtr-239-32-1.example.org;
#}

# A slightly different configuration for an internal subnet.


#subnet 10.5.5.0 netmask 255.255.255.224 {
# range 10.5.5.26 10.5.5.30;
# option domain-name-servers ns1.internal.example.org;
# option domain-name "internal.example.org";
# option routers 10.5.5.1;
# option broadcast-address 10.5.5.31;
# default-lease-time 600;
# max-lease-time 7200;
#}

# Hosts which require special configuration options can be listed in


# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.

#host passacaglia {
# hardware ethernet 0:0:c0:5d:bd:95;
# filename "vmunix.passacaglia";
# server-name "toccata.fugue.com";
#}

# Fixed IP addresses can also be specified for hosts. These addresses


# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;

8 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

# fixed-address fantasia.fugue.com;
#}

# You can declare a class of clients and then do address allocation


# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.

#class "foo" {
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}

#shared-network 224-29 {
# subnet 10.17.224.0 netmask 255.255.255.0 {
# option routers rtr-224.example.org;
# }
# subnet 10.0.29.0 netmask 255.255.255.0 {
# option routers rtr-29.example.org;
# }
# pool {
# allow members of "foo";
# range 10.17.224.10 10.17.224.250;
# }
# pool {
# deny members of "foo";
# range 10.0.29.10 10.0.29.230;
# }
#}

Obs.: uma placa de rede do servidor deverá estar configurada em cada sub-rede
declarada nas seções subnet do arquivo dhcpd.conf.

Abaixo descreveremos as principais diretivas que poderão ser especificadas no


arquivo de configuração do dhcp3-server. Muitas e muitas outras opções estão
disponíveis na página de manual do dhcpd.conf. A página de manual está bem
documentada, contando com mais de 2000 linhas durante edição deste documento.
Para acessar a página de manual do dhcpd.conf execute o seguinte comando:

$ man dhcpd.conf

Primeiramente as configurações do serviço de DHCP dhcp3-server são divididas em


seções. As configurações especificadas fora de qualquer seção é considerada global e
será válida para todas as demais seções. As configurações especificadas dentro de
uma dada seção irão, desde que coincidam, sobrescrever as configurações herdadas
da configuração global.

A diretiva ddns-update-style define como será realizada a atualização do DNS para


cada host que tiver obtido o endereço através do servidor DHCP. Existem duas opções
disponíveis: interim, ad-hoc e none. - Mas não eram duas opções? - Sim. São apenas
duas. A opção ad-hoc está aqui apenas porque ela ainda não foi retirada. Esta opção
está ultrapassada e já não funciona mais. Ela será retirada nas próximas versões do

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
9
Especializa Treinamentos <http:/ /www.especializa.com.br>

dhcp3-server. Então vamos às opções remanescentes: interim é o modelo de


atualização dinâmica onde o serviço de DHCP é responsável por cadastrar o host no
servidor DNS após a atribuição do endereço IP. Já quando configurado com a opção
none o servidor de DHCP não irá cadastrar o host no servidor DNS. Estas opções são
úteis por dois motivos: diferentemente dos hosts com o sistema operacional windows,
os hosts com Linux não efetuam por si próprios o seu registro no DNS. Outro motivo é
que mesmo para hosts com Windows, o administrador poderá optar por não permitir a
atualização dinâmica para qualquer host na rede, e neste caso somente o servidor
DHCP poderá realizar o cadastro de novos endereços no DNS.

A diretiva option domain-name especifica qual será o domínio que os hosts irão fazer
parte. Para hosts com Linux este será o atributo configurado no arquivo
/etc/resolv.conf, na diretiva search.

A diretiva domain-name-servers especifica quais serão os servidores de DNS que


serão cadastrados nos hosts. Para os hosts com Linux estes serão cadastrados no
arquivo /etc/resolv.conf nas diretivas nameserver. É possível definir nesta diretiva os
servidores DNS pelo seu nome, porém durante o início do serviço DHCP é necessário
que o servidor DNS esteja operacional, neste instante uma consulta ao servidor DNS
será realizada e o enderço IP deste servidor será informado ao cliente. Isto é
necessário, pois não é possível chegar ao servidor de nomes pelo nome.

A diretiva option default-lease-time especifica qual é o tempo, em segundos, de


leasing do endereço IP fornecido. Cada host irá contatar o servidor DHCP para fazer a
renovação do endereço atribuído na metade do tempo definido nesta diretiva. Se a
renovação não tiver sucesso uma nova tentativa será realizada em ¾ deste tempo,
até chegar o tempo especificado na diretiva max-lease-time. Se ocorrer do servidor
não estar disponível e este tempo expirar o host irá liberar o endereço IP e tentará
descobrir um novo servidor DHCP na rede.

A diretiva option max-lease-time, como dito no parágrafo anterior, define o tempo


máximo, em segundos, que um host poderá permanecer com um endereço IP sem
que consiga fazer a renovação no servidor DHCP. Após expirar este prazo o endereço
IP será liberado e o host irá procurar por outro servidor DHCP na rede.

A diretiva authoritative define se o servidor DHCP é ou não o principal servidor da


rede. Caso esteja definido como authoritative, se o servidor que forneceu o endereço
IP para o cliente não estiver disponível e o cliente fizer um novo DHCPDISCOVER na
rede à procura de um servidor DHCP, se o servidor DHCP definido com a diretiva
authoritative receber uma solicitação para reuso do endereço especificado fora da
faixa (range) definida neste servidor, o servidor irá solicitar ao cliente para não utilizar
este endereço IP e fornecerá um novo endereço. Veja que isto só irá ocorrer se o
cliente fizer um novo DHCPDISCOVER na rede, caso o servidor que forneceu o
endereço esteja disponível não haverá qualquer diferença no uso desta diretiva. Se
você tiver mais de um servidor DHCP na rede, deixe somente um deles com esta
diretiva ativada.

A seção subnet define uma sub-rede onde será provido o serviço de DHCP. Nesta
seção especificamos qual o endereço da rede e também a sua máscara. Veja que o
simples fato de definirmos a rede não estamos especificando qual será a faixa de
endereços que será distribuída para os clientes. Dentro da configuração da sub-rede
devemos definir configurações específicas da sub-rede em questão.

10 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

A diretiva range define qual é o endereço inicial e final que será distribuído pelo
serviço DHCP.

A diretiva option routers especifica quais serão os gateways que serão distribuídos
para os clientes.

A diretiva option broadcast-address define qual será o endereço de broadcast


distribuído para os clientes.

A seção host define uma configuração específica para um único host em toda a rede.
As configurações desta seção estão delimitadas por chaves '{' e '}'.

A maioria das configurações poderão ser configuradas fora das das seções subnet ou
host, estas diretivas serão válidas para todas as sub-redes existentes, mas estas
configurações poderão ser sobrescrita se especificadas em cada subnet ou host. Isto é
útil quando é necessário definir uma configuração que será válida somente em uma
dada subnet ou host.

A diretiva hardware ethernet deverá ser especificada dentro da seção host. As


configurações especificadas dentro da seção host serão fornecidas ao host somente
se o MAC Address coincidir com o especificado nesta diretiva.

Erros comuns durante a configuração de um servidor DHCP é configurar


incorretamente uma faixa de IPs e não existe uma das interfaces de rede do servidor
configurada nesta faixa. Outro erro muito comum é o esquecimento pelo
administrador do sistema de incluir o ponto-e-vírgula (“;”) ao final de cada linha de
configuração.

Para configurarmos o nosso servidor DHCP em laboratório execute o seguinte


procedimento:

1. Instale o servidor DHCP;

2. Edite o arquivo de configuração /etc/dhcp3/dhcpd.conf e faça as alterações


abaixo:

1. Defina a diretiva option domain-name “labespecializa.com.br”;

2. Defina a diretiva option domain-name-servers 192.168.10.2;

3. Defina uma seção subnet conforme abaixo:

subnet 192.168.10.0 netmask 255.255.255.0 {

range 192.168.10.11 192.168.10.200;

option routers 192.168.10.1;

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
11
Especializa Treinamentos <http:/ /www.especializa.com.br>

Após a conclusão das configurações acima chegou a hora de iniciar o servidor dhcp.
Esta é uma configuração básica, mas já teremos um servidor DHCP funcional. Para
configurações mais complexas parta deste ponto, com o servidor DHCP já funcional,
assim fica mais fácil o diagnóstico de problemas de configuração.

Dica dos Especialistas


É possível ter dois ou mais servidores DHCP ativos no mesmo segmento
de rede, porém cada um destes deverá fornecer ranges diferentes de IPs
para evitar que o mesmo endereço seja atribuído a hosts diferentes.

2.2.1 Criando reserva de endereço por MAC Address


Para criar reservas de endereçamento devemos utilizar a diretiva host. No exemplo
abaixo está sendo realizada uma reserva para um host com MAC Address
08:00:07:26:c0:a5. Este host ao solicitar um endereço ao servidor DHCP sempre irá receber
o mesmo endereço IP. Outras configurações também poderiam ser especificadas aqui, não
somente o endereço IP do host.

A diretiva fixed-address poderá ser configurada com o nome ou IP. No caso onde seja
especifidado o nome será feita uma resolução de nome para descobrir qual é o
endereço IP cadastrado para o host fantasia.fugue.com e em seguida atribuí-lo ao
host fantasia.

#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.fugue.com;
#}

2.3 Iniciando o Servidor DHCP


Para iniciarmos o servidor utilizamos o seguinte comando:

Em sistemas Debian/Ubuntu:

# /etc/init.d/dhcp3-server start

Em sistemas Red Hat/CentOS:

# service dhcpd start

Para acompanharmos o fornecimento de IP´s na rede, poderemos utilizar o tail para


visualizar o arquivo dhcpd.leases que armazena os IP´s fornecidos pelo servidor
DHCP. Façamos da seguinte forma:

12 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

# tail -f /var/lib/dhcp3/dhcpd.leases
lease 192.168.10.200 {
starts 1 2008/09/05 22:41:54;
ends 1 2008/09/05 22:51:54;
hardware ethernet 00:56:50:11:22:33;
uid 01:00:56:50:11:22:33;
client-hostname "labsmb01";
}

Após o início do serviço pela primeira vez ou quando houver alteração em sua
configuração, e até mesmo durante os trabalhos de manutenção neste serviço utilize
os logs gerados em /var/log/syslog para diagnosticar algum problema que possa
ocorrer.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
13
Especializa Treinamentos <http:/ /www.especializa.com.br>

3 Servidor de nomes (DNS)


O serviço de resolução de nomes é talvez o principal serviço em execução em toda a
Internet. Sem este serviço a Internet não teria alcançado o público que alcançou.
Seria necessário que o usuário soubesse o endereço IP de cada site ou serviço que
fosse acessar. Você já imaginou como seria ruim acessar um site, o google por
exemplo, assim: 74.125.45.99? E um e-mail assim kleber@209.85.171.83? Quem
conseguiria trabalhar com todos estes números? Uma coisa é certa: seria muito difícil
de decorar. Já imaginou William Bonner falando: - para mais detalhes sobre esta
reportagem acesse o nosso portal no endereço 199.33.137.85. Boa noite!

Com o serviço de DNS é definido pela RFC 1034 1. Ele é o serviço responsável por
realizar a resolução de nomes em IP e também IP em nome. É constituído por uma
estrutura hierárquica, com topo desta hierarquia formada por 14 servidores chamados
DNS root2, ou servidores de nome raiz. A maioria destes servidores estão nos EUA. Os
servidores DNS root estão ordenados pelas letras do alfabeto, do 'A' ao 'M'.

Para resolver o gigantesco crescimento da internet, foram criados espelhos e alguns


destes servidores espalhados pelo mundo. Não há nenhum servidor DNS root na
América do Sul, mas o Brasil possui três espelhos, sendo dois em São Paulo (J e F) e
outro em Brasília (J).

Ilustração 1: Consulta DNS recursiva

Em cada país existe um órgão responsável por manter uma estrutura de DNS. No
Brasil o responsável por esta tarefa é a FAPESP, sob denominação Registro.br 3. Para
registrar um domínio na internet, especializa.com.br por exemplo, é necessário
efetuar um cadastro no Registro.br, e ter dois servidores DNS respondendo pelo seu
domínio. Um primário e um secundário. Estes dois servidores de DNS não precisam,
necessariamente, estarem alocados no mesmo provedor.

1 RFC 1034 em http://www.ietf.org/rfc/rfc1034.txt


2 Artigo na wikipedia em http://en.wikipedia.org/wiki/Root_nameserver
3 Acesse através do seu navegador o site http://registro.br

14 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

3.1 Tipos de consultas


Exitem dois tipos de consultas a serem feitas em um serviço de DNS, a consulta do
tipo iterativa, onde um servidor não retorna uma resposta completa acerca do host
solicitado. Uma resposta de uma consulta iterativa dá ao cliente a possibilidade de
fazer consultas em toda a hierarquia DNS, partindo do nível mais alto até o mais
baixo, chegando até o host desejado. O outro tipo de consulta é a recursiva, onde o
servidor efetua todos os passos da resolução de nome, consultando todos os níveis da
hierarquia até encontrar a resposta para a consulta e devolve ao cliente uma resposta
completa.

Mas como funciona cada uma destas consultas?

Considere um host que deseja acessar o site www.especializa.com.br, por exemplo.


Ao digitar este endereço no seu navegador da internet este precisará saber qual é o
endereço IP do host www do domínio especializa.com.br para estabelecer uma
conexão TCP na porta 80 e solicitar o carregamento do site.

Primeiramente o seu desktop irá contatar o servidor DNS da sua rede local ou
provedor de internet. Este servidor poderá ter esta resposta em cache, caso a tenha
irá fornecer esta informação ao seu desktop, e este irá proceder com o acesso ao site.
Caso não haja nenhuma informação em cache sobre este host. o seu servidor DNS
precisará obter esta informação na internet.

Neste ponto o seu servidor DNS irá contatar um dos 14 servidores DNS root da
internet e então solicitar o endereço do host www.especializa.com.br. Os servidores
root não aceitam consultas do tipo recursiva e responderão apenas, com resposta
não-autoritativa, o endereço do servidor de nomes br. Sabendo o endereço do
domínio br. talvez não seja o suficiente. Novamente o servidor DNS local irá solicitar a
resolução, mas desta vez ao servidor br. Este servidor não terá a resposta para este
endereço, mas terá informações sobre o domínio com.br, este servidor também não
aceitará consultas do tipo recursiva. Sabendo o endereço de com.br o nosso servidor
irá realizar mais uma consulta, desta vez ao servidor DNS do domínio com.br e este,
como não aceita consultas do tipo recursiva, irá responder o endereço do domínio
especializa.com.br. Neste ponto só resta uma consulta, ao servidor DNS responsável
pelo domínio especializa.com.br. Ao fazer a consulta a este servidor a resposta será
autoritativa, pois se este servidor não tiver certeza quanto ao endereço do host
www.especializa.com.br nenhum outro terá. Então, finalmente, temos o endereço do
host desejado.

Ufa! Emfim, o nosso navegador web poderá contatar o nosso servidor web e solicitá-lo
o site hospedado. Todos estes passos ocorrem em décimos de segundo, um tempo
muito baixo para executar todos estes procedimentos.

Cada resposta dada por um servidor DNS possui uma validade. Até que o prazo não
expire novas consultas não serão necessárias, basta consultar o cache. Após o
término do período de validade será necessária uma nova consulta para resolver

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
15
Especializa Treinamentos <http:/ /www.especializa.com.br>

novamente o endereço. O tempo de validade do registro é definido nas configurações


da zona, sendo uma configuração para toda a zona ou um valor definido
individualmente para um dado host. Estas configurações serão vistas mais adiante.

Devido a criticidade deste serviço, é aconselhável que se tenha pelo menos dois
servidores de nomes. Qualquer indisponibilidade do servidor DNS fará que
praticamente toda a rede pare de funcionar adequadamente, pois todos os serviços
que utilizarem a rede não conseguirão mais resolver nomes.

Quando temos mais de um servidor DNS ativo em uma dada rede, um deles deverá
possuir a cópia master da zona, que é a cópia de leitura e escrita, e os demais
servidores de nome serão slaves e possuirão somente uma cópia de leitura destas
zonas. Durante a indisponibilidade do servidor master não será permitida qualquer
alteração na configuração das zonas sob domínio deste.

Os dados existentes em uma dada zona é sincronizada periodicamente entre o


servidor master e todos os servidores slaves, a esta operação damos o nome
transferência de zona. O intervalo de tempo para a realização da transferência de
zona entre servidores master e slaves é definido na configuração da zona no servidor
master, não sendo possível alterar este intervalo no servidor slave.

O serviço de DNS utiliza a porta 53 com os protocolos TCP e UDP. Todas as consultas
ao servidor são realizadas utilizando o protocolo UDP e transferências de zona são
realizadas utilizado o protocolo TCP. Se você possui um servidor DNS que deverá ser
acessado por máquinas na internet, lembre-se de configurar adequadamente o seu
firewall1.

3.2 Instalando o Servidor DNS


Nos nossos exercícios utilizaremos o servidor bind2 (Berkeley Internet Name Domain).
A escolha deste servidor foi feita pela sua popularidade. O bind é utilizado por 11 dos
14 servidores DNS root na internet. Outro servidor DNS de sucesso com uma
excelente qualidade e recursos é o djbdns, que foi escrito pelo professor Daniel J.
Bernstein, o mesmo criador do qmail.

Para instalarmos o servidor DNS BIND basta utilizarmos o Aptitude ou yum da


seguinte forma:

No Ubuntu
# aptitude install bind9

ou

No RedHat ou derivados
# yum install bind bind-utils bind-libs
1 Um firewall é utilizado para filtrar as conexões, deixando entrar na rede normalmente
somente conexões permitidas
2 Site oficial em http://www.isc.org/index.pl?/sw/bind/index.php

16 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

3.3 Configurando o Servidor DNS


A configuração do bind é realizada editando os arquivos de configuração localizados
em /etc/bind. O arquivo named.conf possui as configurações do serviço, quais zonas
estão disponíveis, quais servidores de forward serão utilizados, quais os arquivos que
contém cada zona, etc. As configurações da seção options, no caso da distribuição
Ubuntu, possuem um arquivo próprio para este propósito, o arquivo
named.conf.options. Estas opções serão válidas para todas as zonas configuradas no
servidor, exceto as configurações especificadas individualmente em cada zona.

Todas as opções disponíveis para configuração no arquivo named.conf estão


disponíveis na página de manual, que pode ser acessada com o comando abaixo:
$ man named.conf

Temos aqui o arquivo named.conf padrão da distribuição Ubuntu.


// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";

// prime the server with knowledge of the root servers


zone "." {
type hint;
file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
type master;
file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
17
Especializa Treinamentos <http:/ /www.especializa.com.br>

type master;
file "/etc/bind/db.255";
};

include "/etc/bind/named.conf.local";

Cada linha de configuração do bind deve terminar com ponto-e-vírgula ';'.


Comentários podem ser definidos de três formas: pela presença de duas barras '//' no
início da linha; pela presença de '/*' no início e '*/' no final do comentário e também
da forma clássica do unix, colocando '#' no início da linha a ser comentada.
Normalmente utilizamos a '//' para fazer comentários acerca das configurações e '#'
para desabilitar linhas de configuração, apenas para dar semântica aos comentários.

Abaixo iremos descrever algumas das principais diretivas que podem ser configuradas
no arquivo named.conf.

A diretiva include faz a inserção de um arquivo de configurações externo. O uso de


um arquivo externo é útil para organizar as configurações, mantendo configurações
de propósito diferentes em arquivos separados. Isto dá uma leitura mais confortável
dos arquivos de configuração.

A diretiva zone define quais são as zonas que o servidor DNS é capaz de resolver.
Para cada domínio que este esteja gerenciando será necessário criar uma entrada
zone.

A diretiva type define o tipo da zona, que pode assumir três tipos: master, slave e
hint. Uma zona do tipo master indica que este servidor é o principal servidor DNS do
domínio, ele possui a cópia original do domínio, nele são feitas todas as alterações
das configurações da zona. A zona do tipo slave possui uma cópia apenas para leitura,
este servidor responde pela zona, porém não poderá fazer qualquer modificação. A
zona do tipo hint é utilizada para que o servidor de DNS possa fazer consultas
externas, a domínios que não estão sob seu controle. Normalmente temos uma
configuração para a zona root do tipo hint em todos os servidores que irão fazer
consultas interativas na internet.

A diretiva file especifica qual é o arquivo que contém as configurações de uma dada
zona. Para cada zona que o servidor de DNS é responsável deverá haver um arquivo
de zona.

A diretiva acl, Lista de Controle de Acesso, do inglês Access Control List, define uma
lista de controle de acesso que poderá ser utilizada em qualquer parte do arquivo de
configuração. É comum criarmos uma acl chamada redelocal e nesta especificarmos
todas as sub-redes que fazem parte da nossa rede local.

Abaixo um exemplo de uma acl:

acl redelocal {
192.168.10.0/24;
192.168.100.0/24;
};

18 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

A diretiva masters identifica qual é o servidor master para uma zona definida com o
tipo slave.

A diretiva allow-query define quais hosts, redes ou acl poderão fazer qualquer tipo de
consulta ao seu servidor, seja ela uma consulta do tipo iterativa ou recursiva.

A diretiva allow-recursion é utilizada para definir quais hosts, redes ou acl podem
fazer consultas do tipo recursiva, esta diretiva é útil para impedir que usuários na
internet utilizem seu servidor DNS para realizar consultas que não sejam ao seu
domínio. Normalmente especificamos esta diretiva especificando que somente a
nossa rede local poderá fazer consultas do tipo recursiva.

allow-recursion { localhost; redelocal; };

A diretiva allow-transfer define quais servidores slaves poderão fazer transferência de


zona.

Abaixo apresentamos as configurações adicionais que deverão ser feitas no arquivo


named.conf com as seguintes características:

1. Uma acl definindo a rede local e outra para servidores slave;

2. São permitidas consultas iterativas da internet;

3. Só é permitido consulta recursiva para as máquinas da rede local;

4. São permitidas transferências de zonas apenas para servidores slaves;

5. Uma zona chamada labespecializa.com.br;

No arquivo /etc/bind/named.conf.local
acl redelocal {
192.168.10.0/24;
};

acl slaves {
192.168.10.3;
192.168.10.4;
};

No arquivo /etc/bind/named.conf.local
zone “labespecializa.com.br” {
type master;
file “/etc/bind/db.labespecializa.com.br”;
};

No arquivo /etc/bind/named.conf.options, dentro da seção options.


allow-recursion { localhost; redelocal; };
allow-transfer { slaves; };
allow-query { any; };

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
19
Especializa Treinamentos <http:/ /www.especializa.com.br>

Além das configurações nos arquivos named.conf e named.conf.options existe


também o arquivo de definição da zona, neste arquivo são definidas as configurações
chamadas de SOA, Start Of Authority e também todos endereços de hosts, servidores
de correio eletrônico, delegações de zonas, ponteiros de consulta reversa, e mais.

Abaixo um arquivo de configuração de uma zona direta.

$TTL 86400
@ IN SOA labespecializa.com.br. postmaster.labespecializa.com.br. (
42 ; serial
3H ; refresh
15M ; retry
1W ; expiry
12H ) ; negative cache ttl

@ IN NS dns1
@ IN MX 10 sol
@ IN MX 20 lua
dns1 IN A 192.168.10.2
sol IN A 192.168.10.2
lua IN A 192.168.10.3
pop3 IN CNAME sol
smtp IN CNAME sol
imap IN CNAME sol
www IN CNAME sol
www2 IN CNAME lua

A opção definida na primeira linha do arquivo da zona, a linha com o $TTL, tempo de
vida, do inglês Time To Live, define o tempo de vida padrão dos registros.

Caracteres '@' neste arquivo substituem o nome da zona, definido no arquivo


named.conf.

Na segunda linha deste arquivo temos a definição do servidor responsável pelo


domínio e também o e-mail do administrador do serviço de DNS.

As configurações definidas entre parênteses '(' e ')' definem parâmetros de da zona


em si. A primeira opção é o serial, este número é incremental, não precisa obedecer
qualquer padrão, somente precisa ser incremental, cada atualização da zona este
número deve ser alterado para qualquer valor maior que o anterior. Para zonas
configuradas manualmente é comum colocarmos o serial no padrão
YYYYMMDDhhmm. Onde YYYY representa o ano, MM o mês, DD o dia, hh a hora e mm
os minutos da alteração.

As unidades de tempo que poderão ser especificadas neste arquivo são: H, para
horas, M para minutos, W para semanas e Y para anos. Unidades de tempo não
especificadas serão consideradas como segundos.

O campo refresh indica qual o intervalo de tempo, que o servidor DNS slave deverá
contatar o servidor master para realizar a tranferência de zona.

20 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

O campo retry quanto tempo depois o servidor slave deverá tentar novamente efetuar
a transferência de zona.

O campo expiry especifica quanto tempo o servidor poderá funcionar sem efetuar a
transferência de zona. Após este período o servidor não irá mais responder como
slave.

O campo negative cache ttl especifica quanto tempo de validade terá uma resposta
que indique a inexistência de um determinado host.

Após a definição do SOA temos então as configurações referentes a delegações de


zonas e host. NS que define qual é o endereço do servidor de nomes responsável pelo
domínio. O registro do tipo A define um host no domínio. O registro do tipo MX define
quais são os endereços dos servidores de correio eletrônico do domínio, junto do
registro MX é encontrado um número que indica a prioridade no uso dos servidores de
correio. O registro do tipo CNAME define alias para hosts. O registro do tipo TXT define
uma propriedade de texto qualquer para o domínio. O registro PTR define um ponteiro
para um host. Ponteiros (PTR) são utilizados somente em zonas reversas.

Dica dos Especialistas


Nomes de hosts dentro dos arquivos de zonas que não possuírem um
caractere ponto '.' serão acrescidos do nome da zona. Exemplo: uma host
definido com o some sol dentro do arquivo de configuração da zona
labespecializa.com.br será tratado como sol.labespecializa.com.br. É muito
comum ocorrerem erros de configuração, especificando o nome completo,
FQDN1, esquecendo­se de colocar o ponto no final, ocasionando uma
repetição do nome do domínio.

Após a criação do arquivo de zona e edição do arquivo de configuração named.conf é


necessário reiniciar o serviço bind. Para isto execute o procedimento abaixo:

# /etc/init.d/bind9 restart

ou

# service named restart

1 FQDN – Fully Qualified Domain Name

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
21
Especializa Treinamentos <http:/ /www.especializa.com.br>

3.4 Testando o serviço


Para testar um serviço de DNS é necessária a utilização de uma ferramenta que nos
mostre a resposta de cada consulta realizada. No Ubuntu temos o comando host, o
dig e também o nslookup, que está caindo em desuso.

3.4.1 Usando o host


Para fazer uma consulta direta um servidor DNS podemos usar o comando host,
seguido do nome do host. É possível também especificar o endereço IP do servidor
DNS que desejamos que a consulta seja feita. No exemplo abaixo iremos consultar o
endereço do host www.labespecializa.com.br.

$ host www.labespecializa.com.br
www.labespecializa.com.br is an alias for sol.labespecializa.com.br.
sol.labespecializa.com.br.com has address 192.168.10.2

É possível também especificar o endereço de um servidor DNS para fazer a consulta.


Por padrão é utilizado o servidor especificado na diretiva nameserver do arquivo
/etc/resolv.conf. Para realizar a mesma consulta acima no servidor DNS 192.168.10.2
execute o comando como mostrado abaixo:

$ host www.labespecializa.com.br 192.168.10.2


www.labespecializa.com.br is an alias for sol.labespecializa.com.br.
sol.labespecializa.com.br.com has address 192.168.10.2

As consultas podem ser realizadas também pelo tipo do registro desejado, isto é útil
quando desejamos descobrir, por exemplo, qual são os servidores SMTP de um dado
domínio. No exemplo abaixo iremos fazer justamente um consulta deste tipo. Como
vimos anteriormente o tipo do registro de um servidor SMTP é MX.

$ host -t mx labespecializa.com.br
labespecializa.com.br mail is handled by 10 sol.labespecializa.com.br.
labespecializa.com.br mail is handled by 20 lua.labespecializa.com.br.

3.4.2 Usando o dig


O dig é uma outra ferramenta muito utilizada para diganosticar um serviço de DNS.
Seu uso é mais complicado que o host, mas muitas funções úteis estão disponíveis
nesta ferramenta e vale à pena estudá-la.

Para executarmos uma simples consulta pelo host www.labespecializa.com.br


executamos o comando abaixo.
$ dig www.labespecializa.com.br
; <<>> DiG 9.5.0-P2 <<>> www.labespecializa.com.br
;; global options: printcmd
;; Got answer:

22 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57704


;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.labespecializa.com.br. IN A

;; ANSWER SECTION:
www.labespecializa.com.br. 604800 IN CNAME sol.labespecializa.com.br.
sol.labespecializa.com.br. 604800 IN A 192.168.10.2

;; AUTHORITY SECTION:
labespecializa.com.br. 604800 IN NS
dns1.labespecializa.com.br.

;; ADDITIONAL SECTION:
dns1.labespecializa.com.br. 604800 IN A 192.168.10.2

;; Query time: 23 msec


;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Mar 17 10:07:49 2009
;; MSG SIZE rcvd: 112

Da mesma forma que o comando host, com o dig também é possível especificarmos
em qual servidor DNS será realizada a consulta. Para isto basta inserir o endereço do
servidor DNS após o caractere '@' conforme exemplo abaixo:

$ dig @192.168.10.2 www.labespecializa.com.br

Para fazer uma consulta pelos servidores SMTP do domínio labespecializa.com.br


executamos o comando abaixo:

$ dig -t mx labespecializa.com.br

; <<>> DiG 9.5.0-P2 <<>> -t mx labespecializa.com.br


;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47254
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; QUESTION SECTION:
;labespecializa.com.br. IN MX

;; ANSWER SECTION:
labespecializa.com.br. 604800 IN MX 10
sol.labespecializa.com.br.

;; AUTHORITY SECTION:

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
23
Especializa Treinamentos <http:/ /www.especializa.com.br>

labespecializa.com.br. 604800 IN NS
dns1.labespecializa.com.br.

;; ADDITIONAL SECTION:
sol.labespecializa.com.br. 604800 IN A 192.168.10.2
dns1.labespecializa.com.br. 604800 IN A 192.168.10.2

;; Query time: 8 msec


;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Mar 17 10:09:28 2009
;; MSG SIZE rcvd: 110

3.5 Configurando o Servidor DNS Secundário


Como dissemos anteriormente, precisamos de um servidor secundário para criarmos
um ambiente de alta disponibilidade no serviço de DNS. No servidor sencundário
precisamos apenas realizar as configurações do arquivos /etc/bind/named.conf.local e
/etc/bind/named.conf.options.

No arquivo named.conf.local é necessário criar a zona com o mesmo nome definido no


servidor master. Será necessário também informar o nome do arquivo onde será
gravada a zona após a replicação e informar também o nome do servidor a partir de
onde serão feitas as replicações também será necessário. Lembre-se também de
definir o tipo da zona como slave.

# vi /etc/bind/named.conf.local
zone “labespecializa.com.br” {
type slave;
file “/var/cache/bind/db.labespecializa.com.br”;
masters { 192.168.10.2; };
};

Após a configuração será necessário reinicar o serviço bind no servidor slave. Um


configuração interessante a se fazer nos servidores master é a inclusão da diretiva
notify = yes nas configurações da zona. Assim qualquer alteração for realizada na
zona o servidor master irá informar imediatamente aos servidores slaves.

No Debian e Ubuntu
# /etc/init.d/bind9 restart

ou

No RedHat e derivados

24 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

# service named restart

Dica dos Especialistas


Devido a utilização do Apparmor, na distribuição Ubuntu as
zonas slaves deverão ser armazenadas no dirtetório
/var/cache/bind e zonas com atualização dinâmica em /var/lib/
bind. Esta informação consta no arquivo /usr/share/doc/bind9/
README.Debian.gz.

3.6 Zona de Endereçamento Reverso


O DNS reverso é um recurso que permite que outros servidores verifiquem a
autenticidade do seu servidor, checando se o endereço IP atual bate com o endereço
IP informado pelo servidor DNS. Isso evita que alguém utilize um domínio que não lhe
pertence para enviar spam, por exemplo.

Qualquer um pode enviar e-mails colocando no campo do remetente o servidor do seu


domínio, mas um servidor configurado para checar o DNS reverso vai descobrir a
farsa e classificar os e-mails forjados como spam.

O problema é que os mesmos servidores vão recusar seus e-mails, ou classificá-los


como spam caso você não configure seu servidor DNS corretamente para responder
às checagens de DNS reverso.

Em nosso caso a zona de endereçamento reverso leva a rede na qual o computador


está presente mais o término in-addr.arpa. No nosso caso seria 10.168.192.in-
addr.arpa. Note que a rede é descrita na ordem inversa. Vamos configurar a zona
DNS.

# vi /etc/named.conf.local
zone "10.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.10";
};

Editando o arquivo da zona DNS.

# vi /etc/bind/db.192.168.10

$TTL 86400
@ IN SOA labespecializa.com.br. postmaster.labespecializa.com.br. (
42 ; serial
3H ; refresh

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
25
Especializa Treinamentos <http:/ /www.especializa.com.br>

15M ; retry
1W ; expiry
1D ) ; negative cache ttl
@ IN NS dns1.labespecializa.com.br.
2 IN PTR sol.labespecializa.com.br.

Cada máquina presente na rede deverá ter um registro PTR no arquivo da zona DNS.
Para cada subrede deverá ser criada uma zona de endereçamento reverso.

Basta, agora reiniciar o serviço.

Debian e Ubuntu
# /etc/init.d/bind9 restart

ou

RedHat e derivados
# service named restart

26 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

4 Servidor SAMBA
Um dos principais motivos de se construir uma rede de computadores é a
possibilidade de compartilhar os recursos de máquina com os demais computadores
da rede. Assim, numa rede com alguns computadores não precisamos que cada um
destes possua sua própria impressora. Outro recurso bastante utilizado é o
compartilhamento de arquivos, assim um usuário pode facilmente compartilhar seus
arquivos com os demais usuários da rede sem a necessidade de transportar seus
arquivos utilizando mídias removíveis, como pendrives ou os já ultrapassados
disquetes.

Em redes onde temos um único Sistema Operacional o compartilhamento destes


recursos em rede é bem facilitado, pois todas as máquinas implementam os mesmos
protocolos.

Devido ao grande aumento da quantidade de empresas que estão adotando o Linux


em seus servidores o compartilhamento de arquivos e impressoras em rede passou a
ser uma tarefa árdua para os administradores de rede. Felizmente, para resolver este
problema foi criado o Samba, uma implementação livre do protocolo SMB da
Microsoft.

O Samba não é uma implementação do protocolo SMB exclusiva para Linux, ele está
disponível para praticamente qualquer Unix, como o Solaris da Sun, o FreeBSD, AIX
dentre outros.

Além de permitir o compartilhamento de impressoras e arquivos, o Samba também


fornece a possibilidade de centralizar a autenticação da rede, fazendo que o usuário
tenha um único login e senha para se autenticar em qualquer computador ao longo da
rede.

O serviço do Samba é composto por dois daemons, o smbd e nmbd. Cada um destes
serviços possui função específica. O smbd é responsável por prover acesso aos
compartilhamentos SMB. Já o nmbd é responsável por fazer a resolução de nomes
NetBIOS, algo parecido com o serviço de DNS para o protocolo IP. Quando
necessitamos acessar um compartilhamento em alguma máquina na rede, nós a
localizamos pelo nome NetBIOS, e não pelo nome de DNS.

Quando iniciamos o serviço samba o script de inicialização deste serviço são iniciados
tanto o serviço smbd quanto o nmbd.

Nas próximas páginas você verá como fazer um compartilhamento de impressoras e


diretórios em um servidor Linux e como acessá-los através de máquinas com
Windows. Em seguida você verá como implementar outros recursos mais avançados,
como a criação de um domínio, com autenticação centralizada dos usuários. Outros
tópicos ainda mais avançados como a criação de usuários com poderes
administrativos, que serão capazes de administrar seu domínio.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
27
Especializa Treinamentos <http:/ /www.especializa.com.br>

4.1 Instalando o SAMBA


Como já visto, para compartilharmos nossos recursos entre máquinas como Sistemas
Operacionais Linux e Windows é necessária a utilização do Samba. Nas máquinas com
Windows não é necessária a instalação de qualquer software, visto que o protocolo
SMB é implementado por padrão em todo computador com este Sistema Operacional.

Já nos computadores com o Linux, ou qualquer outro Unix, é necessária instalação do


Samba.

Na maioria das distribuições o samba já está empacotado para facilitar a instalação


destes softwares. Nas maiores distribuição como Debian, Ubuntu, RedHat, SuSe e
Slackware estes pacotes estão disponívies.

Como a instalação de qualquer outro software no Linux é necessário estar logado com
um usuário que tenha privilégios administrativos.

Em sistemas Debian ou Ubuntu:

# aptitude install samba smbclient smbfs

Em sistemas RedHat, CentOS ou Fedora:


# yum install samba

4.2 Configurando uma Estação de Trabalho


Todas as configurações do samba são centralizadas em um único arquivo arquivo, o /
etc/samba/smb.conf. Este arquivo está dividido em seções delimitadas por colchetes
'[' e ']'.

Cada seção tem sua finalidade específica.

A seção [global] tem como finalidade definir todas as configurações gerais do


Samba, como o nome de NetBIOS da máquina, o modelo de segurança utilizado, a
forma como os usuários e senha serão armazenados, o nível de detalhamento dos
logs gerados pelo Samba.

As demais seções são compartilhamentos, que podem possuir um nome escolhido


pelo usuário para compartilhar os seus recursos pela rede.

Um compartilhamento especial chamado [printers] tem como finalidade definir


como as impressoras serão compartilhadas para que as máquinas com Windows
possam utilizá-la.

Outro compartilhamento especial é definido para que as máquinas com Windows


possam procurar pelos drivers de impressoras quando estiverem realizando o
mapeamento destas. Esta é a seção [print$], note o '$' após o nome print, que para
as máquinas Windows isto significa que o compartilhamento é oculto e não estará
visível para os usuários utilizando o Ambiente de Rede.

28 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Outro compartilhamento especial é definido para que cada usuário possa montar o
seu Home Directory, o diretório home de cada usuário. Para cada usuário um
compartilhamento com o seu nome de usuário é exibido através do Ambiente de
Rede. Esta é a seção [homes], e só tem um uso útil quando se utiliza o Samba como
Controlador de Domínio. Detalhes sobre a implementação de um Controlador de
Domínio serão vistos nas páginas seguintes.

Como já dito nos capítulos anteriores, vamos fazer um backup do arquivo de


configuração original do samba. Isto nos dá a possibilidade de retornarmos a
configuração original do samba no caso de algo dar errado ou simplesmente para
recomeçar do zero a qualquer momento sem a necessidade de reinstalarmos todo o
software.

O arquivo de configuração do SAMBA fica em /etc/samba/smb.conf. Usaremos o


arquivo padrão como base para fazermos as nossas configurações alterando,
inserindo e desabilitando diretivas conforme nossa necessidade.

# cd /etc/samba
# cp smb.conf smb.conf.orig

No arquivo de configuração smb.conf exitem dois caracteres que podem ser utilizados
para representar um comentário, são eles o '#' e o ';'. O uso de cada um deles tem
diferença apenas semântica, onde o caractere '#' representa comentários acerca da
configuração em questão e o caractere ';' representa uma linha de configuração que
está desabilitada.

Abaixo o arquivo de configuração padrão do samba na distribuição Ubuntu 8.04. Os


comentários foram retirados para que seu conteúdo não ficasse muito extenso.

# vi /etc/samba/smb.conf

[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
; wins support = no
; wins server = w.x.y.z
dns proxy = no
; name resolve order = lmhosts host wins bcast
; interfaces = 127.0.0.0/8 eth0
; bind interfaces only = true
log file = /var/log/samba/log.%m
max log size = 1000
; syslog only = no
syslog = 0
panic action = /usr/share/samba/panic-action %d
; security = user
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
; guest account = nobody
invalid users = root

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
29
Especializa Treinamentos <http:/ /www.especializa.com.br>

unix password sync = yes


passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\
n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user
; domain logons = yes
; logon path = \\%N\profiles\%U
; logon path = \\%N\%U\profile
; logon drive = H:
; logon home = \\%N\%U
; logon script = logon.cmd
; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u
; load printers = yes
; printing = bsd
; printcap name = /etc/printcap
; printing = cups
; printcap name = cups
; include = /home/samba/etc/smb.conf.%m
socket options = TCP_NODELAY
; message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' &
; domain master = auto
; idmap uid = 10000-20000
; idmap gid = 10000-20000
; template shell = /bin/bash
; winbind enum groups = yes
; winbind enum users = yes
; usershare max shares = 100
usershare allow guests = yes

;[homes]
; comment = Home Directories
; browseable = no
; read only = yes
; create mask = 0700
; directory mask = 0700
; valid users = %S

;[netlogon]
; comment = Network Logon Service
; path = /home/samba/netlogon
; guest ok = yes
; read only = yes
; share modes = no

;[profiles]
; comment = Users profiles
; path = /home/samba/profiles
; guest ok = no
; browseable = no
; create mask = 0600
; directory mask = 0700

[printers]
comment = All Printers
browseable = no
path = /var/spool/samba

30 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

printable = yes
guest ok = no
read only = yes
create mask = 0700

[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
; write list = root, @ntadmin

;[cdrom]
; comment = Samba server's CD-ROM
; read only = yes
; locking = no
; path = /cdrom
; guest ok = yes

; preexec = /bin/mount /cdrom


; postexec = /bin/umount /cdrom

Descreveremos abaixo as diretivas mais importantes do arquivo de configuração


smb.conf. Outras diretivas de configurações possíveis poderão ser encontradas nas
páginas de manual do smb.conf. A página de manual do smb.conf é um excelente
guia de referência acerca das configurações que podem ser realizadas neste aquivo
de configuração. Durante a edição deste documento a página de manual do smb.conf
contava com mais de 5300 linhas. Você poderá acessá-la usando o comando abaixo:

$ man smb.conf

Cada diretiva especificada na página de manual possui uma indicação (S) ou (G),
indicando Share ou Global respectivamente. Esta indicação refere-se às seções onde
esta diretiva poderão ser aplicadas, se na seção global ou nas seções share.

Primeiramente iremos descrever as principais diretivas encontradas na seção global


do arquivo de configuração smb.conf. Como já informado antes, a seção global possui
configurações que fazem referência ao serviço samba em geral.

A diretiva workgroup possui dois significados, variando de acordo com o modelo de


segurança configurado na diretiva security. Quando utilizados o modelo share esta
diretiva representa o Grupo de Trabalho ao qual esta máquina pertence. Este grupo
de trabalho deverá coincidir com o grupo de trabalho configurados nas estações com
Windows. Quando utilizamos o modelo user esta diretiva representa o nome do
Domínio.

A diretiva server string representa uma descrição acerca do máquina, por padrão esta
descrição é %h server (Samba, Ubuntu), que mostra o hostname da máquina, que
substitui a variável %h, mais as palavras server (Samba, Ubuntu). Isto pode ser

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
31
Especializa Treinamentos <http:/ /www.especializa.com.br>

substituído por algo que nos traga mais informações, como Servidor de Arquivos,
Desktop Financeiro.

A diretiva wins support indica se esta máquina será ou não um servidor WINS. Uma
observação importante é que você só poderá ter uma máquina como servidor WINS
em um dado segmento de rede. A ocorrência de mais de um servidor WINS em um
segmento de rede poderá causar problemas na divulgação de máquinas e recursos
compartilhados para o Ambiente de Rede. Os valores aceitos para esta diretiva são
yes, que significa que o que o servidor WINS está ativo e no, significando que o
serviço está desabilitado. O valor padrão é no.

A diretiva wins server é util quando se deseja especificar qual é o servidor WINS que
deverá ser utilizado. Observe que esta diretiva não tem função quando utilizamos a
diretiva wins support = yes.

A diretiva name resolv order define a ordem que será utilizada para a resolução de
nomes NetBIOS. Não é necessário alterar o valor padrão, que define que
primeiramente os nomes serão verificados na seqüência lmhosts → hosts → wins →
bcast. O arquivos lmhosts possui a sintaxe igual ao arquivo hosts, porém nele são
definidos nomes de NetBIOS de cada host.

A diretiva interfaces indica em qual interface o serviço Samba irá “escutar”. Se você
tiver uma máquina com mais de uma interface de rede, utilize esta diretiva para
especificar em qual destas o Samba será utilizado. Lembre-se de incluir sempre o
endereço de loopback, o 127.0.0.1. Note que o uso desta diretiva está condicionado à
diretiva bind interfaces only, que seu uso será descrito abaixo.

A diretiva bind interfaces only, habilita ou desabilita as funções da diretiva interfaces.


Se estiver definido como yes somente as interfaces definidas na diretivas interfaces
possuirão o serviço do Samba. Se estiver definido como no, o Samba está disponível
em todas as interfaces de rede disponíveis na máquina.

A diretiva log file especifica o arquivo de logs do Samba. Por padrão um arquivo de
log é criado para cada máquina que acessar qualquer dos recursos compartilhados.

A diretiva max log size indica o tamanho máximo de um arquivo de log gerado pelo
samba. Os valos aceitos são expressos em KB e o valor 0 indica ilimitado.

A diretiva security indica o modelo de segurança utilizado pelo servidor, os valores


aceitos são user, domain, ads e share. O modo user é utilizado quando se deseja que
o um servidor samba gerencie suas próprias contas, normalmente utilizado quando
deseja-se montar um Controlador de Domínio Primário (PDC). Já as opções domain e
ads são utilizadas quando se deseja conectar sua máquina a uma domínio pré-
existente gerenciado por um servidor Windows. A opção domain é utilizada quando o
domínio em questão é um Windows Server pré-2000 e ads para domínios controlados
pelo Active Directory, ou seja Windows 2000 ou mais recente. A opção share é
utilizada quando não se deseja construir uma estrutura de domínio. Quando se utiliza
a opção share não é possível definir o acesso aos compartilhamentos em nível de
usuário.

A diretiva passdb backend refere-se ao banco de dados contendo os usuários e senhas


do domínio. As opções disponíveis são: smbpasswd, tdbsam e ldapsam. As opções
smbpasswd e tdbsam possuem as contas cadastradas em um banco de dados local,

32 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

gerenciado pelo próprio samba, já a opção ldapsam as contas são cadastradas


externamente em um servidor LDAP1. Caso não seja especificada uma destas opções
será utilizado smbpasswd. O arquivo de configuração do Samba no Ubuntu vem
configurado com a opção padrão tdbsam, que é o método mais recente e
recomendado quando desejamos cadastrar as contas no próprio samba.

A diretiva guest account define qual usuário do Sistema Operacional deverá ser
utilizada para a conta guest no Windows.

A diretiva invalid users define quais usuários não poderão efetuar logon no domínio.

A diretiva unix password sync especifica se as senhas dos usuários no Sistema


Operacional e no Samba devem ser sincronizadas.

A diretiva map to guest define quando uma tentativa de logon sem sucesso deverá
ser direcionada para conta guest. Existem quatro opções possíveis para esta diretiva,
são elas never que indica que nenhuma tentativa de logon sem sucesso será aceita,
bad user que significa que as tentativas de logon utilizando um usuário inexistente
serão mapeadas para o usuário guest, bad password que indica que as tentativas de
logon com um usuário válido, porém com a senha incorreta serão mapeadas para o
usuário guest e finalmente a opção bad uid que indica que as tentativas de logon que
tiverem a autenticação efetuada com sucesso no Controlador de Domínio mas que
não exitam contas unix cadastradas para este usuário elas serão mapeadas para o
usuário guest. Esta última opção só é válida se o modelo de segurança utilizado for
domain ou ads.

A diretiva domain logons define se o host é controlador de domínio. Para configurar


um controlador de domínio é necessário que esta diretiva esteja configurada como
yes.

A diretiva logon path define onde está o perfil do usuário. Só possui função se a
diretiva security estiver definida como user. Para uso de perfil local é necessário que
esta opção seja deixada em branco, caso contrário o usuário receberá uma
mensagem durante o logon informando que o perfil do usuário não está disponível.

A diretiva logon drive define qual a letra que irá mapear o Home Directory dos
usuários no Windows. Esta diretiva só é utilizada quando a diretiva security está
definida como user.

A diretiva logon home define qual o caminho que servidor que possui o Home Direcoty
do usuário. Esta diretiva só é utilizada quando a diretiva security está definida como
user.

A diretiva logon script define qual script será executado no logon do usuário. Esta
diretiva só é utilizada quando a diretiva security está definida como user.

A diretiva domain master define se a máquina será o master browser. O master


browser é responsável por coletar informações sobre os host e recursos
compartilhados num dado segmento de rede. Um servidor PDC sempre deve ser o

1 A autenticação em um diretório LDAP será visto mais adiante, em um capítulo dedicado.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
33
Especializa Treinamentos <http:/ /www.especializa.com.br>

master browser do seu segmento de rede. Existem três opções possíveis para este
parâmetro: yes, no e auto. Quando definido como auto ele será definido master
browser se a diretiva domain logons estiver definida como yes.

Agora descreveremos as opções diponíveis nas seções de compartilhamentos.

A diretiva comment define um comentários para o compartilhamento, como Servidor


de Arquivos, Controlador de domínio, ou ainda Servidor da Engenharia.

A diretiva path define qual é o caminho do diretório compartilhado no servidor.

A diretiva guest ok define se usuários guest terão acesso ao compartilhamento. A


opção map to guest, já discutida nas linhas anteriores define quais usuários serão
mapeados como guest.

A diretiva read only define se o dado compartilhamento possui acesso somente


leitura. Ele pode assumir dois valores yes, que indica que o compartilhamento só
poderá ser visualizado e no que define que o acesso ao compartilhamento será de
leitura e escrita.

As diretivas writeable ou writable possuem a mesma função que read only, porém o
significado das opções yes e no são o oposto, ou seja, yes indica que o
compartilhamento possui permissões de leitura e escrita e no define que ele é
somente leitura. É importante lembrar que além das permissões de leitura e escrita
no compartilhamento é necessário possuir acesso também nos diretórios e arquivos
no Sistema Operacional. Quando é utilizado um compartilhamento em um servidor
com modelo de segurança share é necessário que o usuário nobody e grupo nogroup
possuam as permissões adequadas nos diretórios e arquivos compartilhados.

A diretiva browseable define se o compartilhamento estará visível aos usuários


através do Ambiente de Rede ou não. Veja que isto afeta apenas a visibilidade do
compartilhamento, se o usuário souber da existência do mesmo, caso tenha
permissão, irá conseguir acessá-lo sem qualquer obstáculo.

Algumas diretivas não estão especificadas no arquivo-exemplo smb.conf instalado por


padrão na distribuição Ubuntu, mas podem ser utilizadas sem nenhuma restrição.

A diretiva valid users, que pode ser utilizada em compartilhamentos, lista quais
usuários ou grupos podem conectar-se ao compartilhamento. Para usuários basta
escrever seu nome na lista, já para grupos é necessário incluir um caractere arroba
'@' antes do nome do grupo. Ex: Inserindo @contabilidade na diretiva valid users
define que todos os usuários cadastrados no grupo contabilidade poderão montar o
dado compartilhamento.

A diretiva create mask especifica qual será a máscara de criação de arquivos no


compartilhamento. A máscara aqui especificada não segue o mesmo padrão do
umask do unix. Ela define realmente qual será a permissão de qualquer arquivo criado
neste compartilhamento.

A diretiva directory mask define a permissão que serão criados os diretórios dentro do
compartilhamento. Esta diretiva é semelhante à já discutida create mask.

34 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

A diretiva printable é válida para impressoras, e especifica se os usuários poderão


imprimir.

A diretiva locking define se o compartilhamento poderá ser acessado por vários


usuários simultaneamente.

A diretiva preexec e postexec definem procedimentos a serem executados durante a


montagem e desmontagem do compartilhamento. No exemplo disponível no smb.conf
padrão do Ubuntu, o drive de CD-ROM é montado durante a montagem do
compartilhamento e desmontado após a desmontagem do compartilhamento.

4.3 Compartilhando Diretórios


Criar um compartilhamento no Linux utilizando samba pode ser realizado facilmente
editando diretamente o arquivo smb.conf. Para isto é necessário apenas criar uma
nova seção no arquivo smb.conf com o nome do compartilhamento. Dentro desta
seção é necessário definir qual é o diretório que será compartilhado, um comentário,
as permissões que os usuários terão e tantas outras opções.

Como exemplo, considere o arquivo smb.conf original da distribuição Ubuntu. Vamos


então criar um compartilhamento bastante famoso, o publico. Edite o arquivos
smb.conf e na seção global defina a diretiva security = share. Em seguida vamos
então inserir ao final do arquivo smb.conf as linhas abaixo:

Dica dos Especialistas


Como estamos trabalhando com o modelo de segurança share
não há como definir o nível de segurança por usuário.

[publico]
comment = Diretório Publico
path = /publico
guest ok = yes
browseable = yes
writeable = yes

No exemplo acima temos um diretório chamado público, criado no Linux com a


finalidade de ser acessado por todos com permissão de escrita, daí o nome público.
Isto justifica o guest ok = yes.

Lembre-se de que agora estamos criando um compartilhamento sem a criação de um


domínio, neste momento não existe autenticação de usuário. Por padrão o modelo de
segurança é user, mas nós definimos o modelo de segurança para share. Então não
esqueça de conceder a permissão de escrita ao usuário nobody e grupo nogroup no
diretório /publico.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
35
Especializa Treinamentos <http:/ /www.especializa.com.br>

# chown nobody.nogroup /publico

Dica dos Especialistas


Como estamos nos referindo a um diretório público e qualquer
usuário poderá colocar seus arquivos sem restrições, por
medida de segurança é aconselhável a criação de uma
partição específica para este fim. Com a existência uma
partição específica para o diretório publico se os usuários
lotarem este diretório não haverá mau­funcionamento dos
outros serviços. É interessante também a criação de um script
que apague arquivos não acessados por um determinado
tempo.

Aqui foram colocadas várias informações novas, como uma lista de usuários que
podem acessar esta pasta, usuários com permissão de escrita e leitura, etc.
Lembrando que usuários do SAMBA devem existir no sistema operacional e no
SAMBA.

Precisamos reiniciar o servidor e visualizar o resultado no explorer do Windows.

# /etc/init.d/samba restart

ou

# service smb restart

4.4 Compartilhando Impressoras


Uma máquina Linux pode ser utilizada, também, como servidor de impressão para a
rede Windows. Para compartilharmos as impressoras instaladas no Linux para a rede
Windows basta acrescentarmos ao nosso arquivo smb.conf o seguinte:

# vi /etc/samba/smb.conf
[global]
...
printcap name = cups
printing = cups
load printers = yes
cups options = raw

[homes]
...

36 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

[temp]
...

[printers]
# Comentário da pasta
comment = All Printers

# Caminho para o spool das impressoras do SAMBA


path = /var/spool/samba

# Este compartilhamento não aparece no explorer, apenas as impressoras


browseable = no

# Apenas usuários registrados pode utilizar


guest ok = no

# Não tem permissão de escrita. Os arquivos serão enviados para o spool do


SAMBA
writable = no

# Indica que este compartilhamento é na verdade uma impressora.


printable = yes

Notem que neste caso algumas configurações adicionais foram colocadas no


[global], e o compartilhamento [printers] foi adicionado.

Vamos reiniciar o servidor e testar.

# /etc/init.d/samba restart

ou

# service smb restart

Para mapear uma impressora no Windows podemos acessar o explorer e acessar o


endereço \\<endereço_ip_do_servidor>\<nome_da_impressora> ou simplesmente
\\<endereço_ip_do_servidor e dar um duplo­clique no ícone da impressora.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
37
Especializa Treinamentos <http:/ /www.especializa.com.br>

Ilustração 2: Windows verificando os compartilhamentos


disponíveis no servidor Samba

4.5 Configurando o SAMBA como PDC


Gerenciar uma rede de computadores pode ser uma tarefa difícil para um
administrador de sistemas se ele não tiver um sistema de autenticação e autorização
centralizado. Recursos como diretórios e impressoras se compartilhados através da
rede sem que seja exigida autenticação dos usuários poderão representar um risco
aos dados e até mesmo prejuízos financeiros a uma instituição.

Os dados disponibilizados em um servidor de arquivos podem ser compartilhados


apenas para determinados usuários ou grupos. Acessos limitados podem ser
concedidos para alguns usuários ou grupos enquanto que outros podem o controle
completo sobre os recursos.

O Samba é uma alternativa às versões Servers da Microsoft para centralizar a


autenticação e autorização para usuários ao longo de uma rede de computadores com
o Sistema Operacional Windows.

Nos capítulos anteriores abordamos o procedimento de instalação do Samba em um


servidor Ubuntu, mas até o momento nenhuma estrutura de domínio foi criada. A
criação de um domínio é o objeto deste capítulo.

Em uma rede de computadores com Windows com uma estrutura de domínio uma
máquina é designada para armazenar a dados para autenticação e autorização dos
usuários de toda a rede, esta máquina é designada Controlador de Domínio Primário,
do inglês Primary Domain Controller (PDC). Com o advento do Active Directory da
Microsoft o PDC já não existe mais numa rede puramente Windows, mas algumas de
suas funções ainda continuam existindo através de um outro serviço chamado
Emulador de PDC.

38 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Com o uso do Controlador de Domínio nós criamos todas as contas de usuários e


grupos no servidor central e para efetuar logon em quaisquer dos computadores da
rede o usuário utilizará o mesmo usuário e senha. O uso de um usuário e senha
únicos para acessar qualquer computador em uma rede aumenta significativamente a
segurança, visto que desta forma o usuário não terá várias senhas para decorar e
você poderá forcá-lo a utilizar senhas mais seguras.

Para configurarmos o nosso servidor Samba com Controlador de Domínio Primário é


necessário definirmos o modelo de segurança como user, definindo security = user na
seção global. Este é o modelo padrão, o escolhido quando não definimos
explicitamente qual o modelo desejado, mas para facilitar o entendimento do arquivo
de configuração em consultas futuras a melhor maneira é fazer esta declaração no
aquivo smb.conf.

Também é necessário definir que o servidor PDC será escolhido master browser, este
é o servidor responsável por coletar todas informações sobre hosts e recursos
compartilhados no seu segmento de rede. Cada hosts divulga estas informações em
seu segmento de rede a cada 12 minutos. Há um servidor master browser em cada
segmento de rede. Além do master browser exitem também os servidores backup
browser. Um servidor backup browser é escolhido para cada grupo de 32
computadores em cada segmento de rede. Para definir o servidor PDC como master
browser é necessário definir a diretiva domain master = yes.

Também é necessário definir que o servidor é o responsável por gerenciar usuários e


senhas em todo o domínio. Isto é feito definindo a diretiva domain master = yes.

Abaixo sinalizamos apenas as diferenças entre o arquivo de um servidor PDC e o


arquivo de configuração original encontrado na distribuição Ubuntu. As demais linhas
encontradas neste arquivo de configuração deverão ser mantidas.

[global]
workgroup = LABSAMBA
server string = Controlador de Dominio
wins support = yes
security = user
domain logons = yes
logon path =
domain master = yes

Neste momento nenhuma alteração das demais seções do arquivo de configuração é


necessária. Agora temos um Controlador de Domínio operando no nosso domínio
LABSAMBA.

Após realizar as configurações acima é necessário reiniciar o serviço do samba. Para


isto execute o comando abaixo:

# /etc/init.d/samba restart

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
39
Especializa Treinamentos <http:/ /www.especializa.com.br>

4.5.1 Adicionando máquinas ao domínio


Agora com o servidor pronto precisamos adicionar as máquinas Windows no domínio
SAMBA. Para máquinas Windows 2000 ou XP, precisaremos criar uma conta de
máquina no domínio SAMBA da seguinte forma:

# groupadd computers
# useradd -g computers -s /bin/false -d /dev/null nome_da_maquina$

Uma outra configuração importante para o bom funcionamento da rede com o


servidor SAMBA, é configurar o TCP/IP do cliente Windows para utilizar como servidor
DNS e WINS o IP do servidor SAMBA.

Como o servidor DHCP, que já foi configurado no primeiro capítulo, já está fornecendo
as configurações de rede TCP/IP, então resta apenas adicionar as configurações
referentes ao servidor WINS. Para isto edite o arquivo de configuração do dhcp3-
server e adicione as seguintes linhas na configuração da subrede.

# vi /etc/dhcp3/dhcpd.conf
option netbios-name-servers 192.168.10.2;
option netbios-node-type 8;

Além de ser necessário que haja uma conta de máquina cadastrada no servidor,
também é necessário que haja um usuário do domínio que faça parte do grupo
Domain Admins.

Para isto é necessário mapear os grupos do Linux com os grupos do SAMBA.

# groupadd ntadmins

# net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d


# net groupmap add ntgroup="Domain Users" unixgroup=users rid=513 type=d
# net groupmap add ntgroup="Domain Guests" unixgroup=nogroup rid=514 type=d

Agora que o mapeamento de usuários está pronto vamos criar um usuário que faça
parte do grupo Domain Admins. Os usuários que estão cadastrados neste grupo
possuem permissões especiais como: adicionar máquinas ao domínio e instalar
softwares.

# useradd -c “Linux Advanced Administrator” -s /bin/bash -m -d /home/laa -g


users -G ntadmins laa

Uma vez criado o usuário no sistema operacional chegou a vez de criar a conta no
samba.

# smbpasswd -a laa

40 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

É possível configurar o samba para criar a conta no sistema operacional


automaticamente após a criação do usuário no samba, porém o campo refente ao
nome completo do usuário ficaria em branco. Este nome é mostrado no menu Iniciar
do windows quando o usuário efetua login.

Após concluídas as configurações do servidor chegou a hora de adicionar uma estação


de trabalho no domínio. Para adicionar a máquina Windows no domínio SAMBA basta
seguir a seguinte seqüência:

Clique em em Iniciar -> Painel de Controle -> Sistema -> Nome do Computador ->
Alterar -> Domínio.

Agora basta colocar o nome do Domínio SAMBA. No caso do nosso arquivo de


configuração é LABSAMBA.

Será solicitado um usuário com permissões administrativas para colocar o Windows


no Domínio, utilize o usuário laa e a senha definida anteriormente.

Após alguns instantes será apresentada a mensagem “Bem vindo ao Domínio


LABSAMBA”. Basta agora reiniciar o computador e logar com um usuário do seu
Domínio SAMBA.

Lembre-se de ajustar na tela de logon do windows para efetuar logon no domínio


LABSAMBA.

Agora o usuário poderá acessar todos os recursos disponibilizados na rede pelo


servidor samba, como impressoras, pastas compartilhadas no servidor e também em
outros computadores de rede. Tudo isso com autenticação integrada no domínio,
assim o usuário não precisará fornecer usuário e senha novamente para acessar
quaisquer deste dispositivos.

4.5.2 Adicionando usuários no domínio


Para adicionar um usuário no samba a melhor opção criar uma conta no sistema
operacional e depois criar uma conta no samba.

# useradd -c “Nome Completo do Usuário” -G users -m -d /home/username username

Ex: para criar o usuário João Cabral de Melo Neto no grupo Domain Users do windows
execute:

# useradd -c “João Cabral de Melo Neto” -G users -m -d /home/joaoneto joaoneto

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
41
Especializa Treinamentos <http:/ /www.especializa.com.br>

OBS: Não é necessário definir senha para o usuário no sistema operacional.

Crie o usuário no samba e defina sua senha.

# smbpasswd -a <username>

Ex: agora criando o mesmo usuário no Samba:


# smbpasswd -a joaoneto

Um usuário cadastrado apenas no grupo Domain Users, como o usuário joaoneto foi
criado, possui permissão para logar no domínio, usar impressoras e acessar
compartilhamentos de rede. Pertencer a este grupo é o suficiente para a maioria dos
usuários de um domínio.

Apenas os usuários que fazem parte da administração do domínio deverão fazer parte
do grupo Domain Admins. Esta medida é necessária para maximizar a segurança no
âmbito da rede.

4.6 Configurando o Script de Logon


A utilização de script logon é um procedimento bastante conhecido por
administradores de redes com sistema operacional Windows. Através de scripts de
logon é possível automatizar tarefas como mapear unidades de rede, impressoras e
até mesmo realizar a instalação de softwares. Vejamos como configurar esta
funcionalidade no SAMBA.

# vi /etc/samba/smb.conf

[global]
logon script = logon.cmd

[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
guest ok = yes
read only = yes
share modes = no
write list = @ntadmins

A diretiva logon script define qual será o script de logon que será executado no logon
dos usuários nas máquinas como Sistema Operacional Windows. Após o logon, o script
é procurado no compartilhamento netlogon que deverá estar disponível no
Controlador de Domínio.

Os scripts são conhecidos no windows como batch files, aqueles arquivos com a
extensão .bat. Como interpretador shell do windows é muito limitado, outras
linguagens de programação, desde que o host cliente a reconheça, poderão ser
utilizadas.

42 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Lembre-se de criar o diretório, colocar os scripts e conceder as devidas permissões.


Para criar o diretório execute o comando abaixo:

# mkdir -p /home/samba/netlogon

Um exemplo de script é fazer o mapeamento de pastas compartilhadas no servidor


para uma unidade de rede. Veja o exemplo abaixo:

# cat /home/samba/netlogon/logon.cmd
net use p: \\192.168.10.2\publico

Os arquivos do scripts de logon deverão ser criados na codificação utilizada pelo


windows, então eles deverão ser criados utilizando-se para isto um editor de texto
neste sistema operacional. A edição de scripts utilizando o Linux poderá causar
problemas muitas vezes de difícil diagnóstico na execução destes scripts.

Agora será necessário reiniciar o serviço do Samba. E efetuar logon no windows. Se


você já estiver efetuado logon será necessário efetuar logoff e logon novamente.

Após efetuar o logon na máquina windows utilize o Explorer e procure pela letra P: na
lista de unidades. Se ela estiver mapeada então nosso script de logon recém criado
está funcionando perfeitamente.

Dica dos Especialistas


Utilize o windows para criar e editar seus scripts de logon. A
criação ou edição dos scripts utilizando o Linux poderá causar
problemas devido às diferenças de codificação entre os dois
sistemas operacionais.

4.7 Utilizando Perfil Móvel


Uma outra situação bastante comum entre usuários de rede é a utilização de perfis
móveis. Se seus usuários devem ter a flexibilidade de usar vários computadores na
rede, ou seus perfis são pequenos, está é uma funcionalidade bastante atraente. Os
dados de Desktop, papéis de parede, favoritos, documentos e todos os demais dados
do perfil são armazenados no servidor, assim, quando um usuário estiver em outra
máquina seu perfil já estará pronto para a utilização.

Apesar de ser um recurso bastante atraente o perfil móvel não é só vantagens, em


caso de indisponibilidade do servidor durante o logon, o usuário não carregará seu
perfil e durante o logoff todos os arquivos editados nesta seção off line serão
perdidos.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
43
Especializa Treinamentos <http:/ /www.especializa.com.br>

Outra desvantagem é a quantidade de espaço em disco necessário nos servidores,


como todos sabem, discos de servidores são bem mais caros que discos de
computadores pessoais, com o uso do perfil móvel todos os arquivos do usuário
estarão ocupando espaço nos discos do servidor.

Vamos a configuração:

# vi /etc/samba/smb.conf
[global]
logon path = \\%L\profiles\%U

[profiles]
commento = Perfil de usuários
path = /home/samba/profiles
browseable = no
guest ok = no
writeable = yes
create mask = 600
directory mask = 700

Mais uma vez o arquivo acima é mostrado apenas as alterações necessárias ao


arquivo. Considera-se que o arquivo de configuração antes da edição estava com
todas as diretivas necessárias para um Controlador de Domínio.

Basta, agora, criarmos o diretório dos perfis, e darmos permissão de escrita nestes
perfis.

# mkdir /home/samba/profiles
# chmod 1777 /home/samba/profiles

A permissão 1777 dá privilégio total para qualquer usuário cadastrado no servidor,


mas apenas o usuário proprietário poderá apagar seus arquivos e diretórios. A
propriedade que fornece este tipo de permissão é o sticky bit, já discutido no módulo
Linux Junior Administrator.

Através do windows cada usuário terá acesso somente ao seu perfil e não poderá nem
mesmo visualizar o conteúdo do perfil dos demais usuários.

44 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

5 LDAP – Lightweight Directory Access Protocol


O LDAP1 (Lighweight Directory Access Protocol) é um protocolo utilizado para fazer
pesquisas e atualizar um diretório. Em um diretório é utilizado para armazenar
informações sobre usuários e computadores em uma rede.

Os servidores de diretórios LDAP são utilizados por ferramentas muitos conhecidas


como o NDS da Novell, o Active Directory da Microsoft e o OpenLDAP, que será objeto
do nosso estudo.

O OpenLDAP é muito utilizado para implementar um sistema de autenticação,


autorização e armazenamento de dados sobre usuários, como uma lista telefônica.
Nas informações para autenticação e autorização estas informações podem ser: nome
de usuário, nome completo, senha, certificado digital e outras informações mais.

As informações estão origanizadas em atributos e valores. Cada atributo pode possuir


apenas um valor, mas um objeto poderá conter vários atributos. Estes valores e
atributos estão associados a objetos que estão agrupados em uma estrutura
hierárquica.

Esta estrutura hierárica é parecida com a estrutura do serviço de DNS, mas a


representação é ligeiramente diferente. Um domínio labespecializa.com.br da
estrutura de DNS teria a representação dc=labespecializa,dc=com,dc=br.

Com o OpenLDAP2 é possível montar uma estrutura de alta disponbilidade utilizado


replicação entre os servidores de diretório. Esta replicação é realizada utilizando-se
uma ferramente de nome slurp, desenvolvida pelo próprio projeto.

O OpenLDAP é configurado através do arquivos de configuração slapd.conf. O arquivo


slapd.conf é utilizado para configurar o nosso servidor, não confunda-o com o arquivo
ldap.conf, que configura um cliente LDAP.

5.1 Instalando o OpenLDAP


Para instalar um servidor LDAP execute o seguinte procedimento.

# aptitude install slapd

ou

# yum install openldap

1 Mais informação sobre o LDAP no endereço http://pt.wikipedia.org/wiki/LDAP


2 Mais informações sobre o OpenLDAP em http://www.openldap.org/

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
45
Especializa Treinamentos <http:/ /www.especializa.com.br>

Após concluída a instalação, sem a importação de dados, o um diretório não função


alguma. Neste documento, iremos importar as contas locais do nosso servidor para
dentro do nosso diretório.

Uma boa ferramenta para navegar e administrar o seu diretório é ldapbrowser1, um


utilitário gráfico que dá uma visão do diretório e permite a edição e adição de
registros.

Ilustação 1: LDAP Browser em ação

Abaixo o arquivo de configuração slapd.conf padrão da distribuição Ubuntu, sem os


comentários.

# vi /etc/ldap/slapd.conf
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel none

modulepath /usr/lib/ldap
moduleload back_hdb

sizelimit 500

tool-threads 1

1Site oficial em http://www.mcs.anl.gov/~gawor/ldap/index.html

46 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

backend hdb

database hdb

suffix "dc=nodomain,dc=com"
rootdn "cn=admin,dc=nodomain,dc=com"
rootpw {SSHA}5SPjAVkOdIt7iC72+p9vDi8JJfhZMDT/

directory "/var/lib/ldap"

dbconfig set_cachesize 0 2097152 0


dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500

index objectClass eq
lastmod on
checkpoint 512 30

access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=nodomain,dc=com" write
by anonymous auth
by self write
by * none

access to dn.base="" by * read


access to *
by dn="cn=admin,dc=nodomain,dc=com" write
by * read

Abaixo descreveremos as principais diretivas encontradas dentro do arquivo de


configuração slapd.conf.

Na diretiva include são incluídos os schemas utilizados no diretório. Um schema


define quais atributos estão disponíveis, o seu formato e quais suas restrições.

Na diretiva pidfile é especificado o arquivo onde será armazenado o PID do processo


do openldap.

Na diretiva argsfile é especificado o arquivo onde estão especificados os argumentos


para o processo do openldap.

Na diretiva suffix é especificado o domínio do nosso diretório.

Na diretiva rootdn é definido o usuário administrador do diretório.

Na diretiva rootpw é definida a senha do usuário administrador do diretório. A senha


criptografada com o algorítmo SSHA poderá ser obtida utilizando o comando
slappasswd.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
47
Especializa Treinamentos <http:/ /www.especializa.com.br>

Na diretiva directory é definido onde o banco de dados do diretório será armazenado.


Lembre-se de incluí-lo na sua rotina de backup.

Na diretiva access são definidas os níveis de permissão no diretório. Esta


diretiva poderá aparecer mais de uma vez no arquivo. No arquivo padrão do
Ubuntu há uma definição que nos atributos userPassword e
shadowLastChange o usuário root do openldap terá permissão de escrita,
permissão de autenticação para um usuário anônimo e escrita para o usuário
dono. A permissão de escrita para o dono é necessária para que o usuário
possa trocar sua própria senha.

No nosso laboratório iremos criar o diretório com sufixo


dc=labespecializa,dc=com,dc=br. Para isto substitua todas as referências
existentes no arquivo slapd.conf ao sufixo padrão dc=nodomain,dc=com para
dc=labespecializa,dc=com,dc=br. Também será necessário descomentar a linha
que define o administrador do nosso diretório, a linha rootdn, e definir a senha do
administrador do nosso diretório. Para gerar a nova senha execute o comando
slappasswd e copie a senha e adicione-a na diretiva rootpw , conforme indicado
abaixo:
rootdn “cn=admin,dc=labespecializa,dc=com,dc=br”
rootpw {SSHA}5SPjAVkOdIt7iC72+p9vDi8JJfhZMDT/

Após concluir estas configurações é necessário reiniciar o servidor LDAP.

# /etc/init.d/slapd restart

5.2 Configurando o Samba para autenticar estações


Windows
Para fazer com que as estações windows autentiquem-se no diretório LDAP é
necessária a instalação de um cliente LDAP ou a configuração de um servidor Samba
e criação de um domínio. A instalação de um servidor Samba já foi vista
anteriormente, mas temos aqui uma novidade, o Samba não irá utilizar uma base de
usuários armazenadas no banco tdbsam, estes usuários e grupos ficarão armazenados
no servidor de diretório LDAP.

Isto é feito adicionando o schema do Samba no OpenLDAP e também informando ao


Samba onde ele devera buscar sua base de usuários, editando-se o arquivo de
configuração smb.conf e informando na diretiva passdb beckend =
ldapsam:ldap://<endereco_do_servidor_ldap>.

Em nosso laboratório iremos criar um domínio chamado LABSAMBA.

Além dos pacotes slapd e samba será necessário que você instale também o pacote
smbldap-tools. Este pacote possui ferramentas para a criação e administração do
domínio samba e utilizando uma base de usuários sob LDAP. Nele estão comandos
para criar, apagar e modificar usuários e grupos. Além de um comando para criar toda

48 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

a estrutura do domínio samba sob o LDAP. Caso o pacote smbldap-tools não esteja
instalado em seu sistema, instale-o com o comando abaixo:

# aptitude install smbldap-tools

Após a instalação do pacote smbldap-tools será necessário configurá-lo. Para isto


utilize os arquivos exemplo smbldap.conf.gz e smbldap_bind.conf copiando-os para o
diretório /etc/smbldap-toos. Ambos os arquivos estão disponíveis no diretório
/usr/share/doc/smbldap-tools/examples. Lembre-se de descompactar o arquivo
smbldap.conf.gz após a cópia.

$ cd /usr/share/doc/smbldap-tools
# cp smbldap.conf.gz smbldap_bind.conf /etc/smbldap-tools
# gunzip /etc/smbldap-tools/smbldap.conf.gz

No arquivo smbldap_bind.conf altere os parâmetros slaveDN e masterDN para


cn=admin,dc=labespecializa,dc=com,dc=br e os parâmetros slavePw e masterPw
para especial.

O arquivo smbldap_bind.conf deverá conter as configurações mostradas abaixo.


slaveDN="cn=admin,dc=labespecializa,dc=com,dc=br"
slavePw="especial"
masterDN="cn=admin,dc=labespecializa,dc=com,dc=br"
masterPw="especial"

Note que a senha do administrador do diretório está esposta neste arquivo sem
criptografia. Neste caso será necessário alterar as permissões para que somente o
root consiga visualizar o seu conteúdo. Para isto execute o comando abaixo:

# chmod 600 /etc/smbldap-tools/smbldap_bind.conf

Abaixo será mostrado o arquivo smbldap.conf. Os comentários foram retirados para


facilitar a visualização, já que se trata de um arquivo com uma grande quantidade de
linhas de comentários.

SID="S-1-5-21-2252255531-4061614174-2474224977"
sambaDomain="DOMSMB"
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="0"
verify="require"
cafile="/etc/smbldap-tools/ca.pem"
clientcert="/etc/smbldap-tools/smbldap-tools.pem"
clientkey="/etc/smbldap-tools/smbldap-tools.key"
suffix="dc=company,dc=com"
usersdn="ou=Users,${suffix}"
computersdn="ou=Computers,${suffix}"

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
49
Especializa Treinamentos <http:/ /www.especializa.com.br>

groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"
hash_encrypt="SSHA"
crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="45"
userSmbHome="\\PDC-SRV\%U"
userProfile="\\PDC-SRV\profiles\%U"
userHomeDrive="H:"
userScript="logon.bat"
mailDomain="idealx.com"
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

O parâmetro SID deve ser substituído pelo valor obtido executando-se o comando net
getlocalsid com um usuário com privilégios administrativos.

O parâmetro sambaDomain deverá ser configurado igual ao domínio defino na diretiva


workgroup do arquivo /etc/samba/smb.conf.

Os parâmetros slaveLDAP e masterLDAP devem ser configurados com o endereço do


nosso servidor que hospeda o serviço LDAP, neste caso 127.0.0.1, já que o samba e o
LDAP estão executando na mesma máquina.

Os parâmetros slavePort e masterPort devem ser configurados para o número da


porta do nosso servidor LDAP. Caso não tenha alterado o valor padrão é 389 e não
será necessário alterá-la.

O parâmetro ldapTLS indica se TLS foi habilitado na conexão do servidor LDAP.

O parâmetro suffix indica o sufixo do nosso servidor LDAP. Será necessário alterá-lo
para dc=labespecializa,dc=com,dc=br.

O parâmetro userSmbHome indica qual é o compartilhamento do home directory do


usuário no servidor. Este parâmetro tem a mesma função da diretiva logon home no
arquivo smb.conf.

O parâmetro userProfile indica onde será armazenado o perfil do usuário. Este


parâmetro tem a mesma função da diretiva logon path encontrado no arquivo
smb.conf. Caso você deseje não habilitar perfil móvel será necessário definir este
parâmetro com o valor nulo, ou seja, sem valor algum.

O parâmetro userHomeDrive indica qual a letra onde será montado o


compartilhamento definido no parâmetro userSmbHome. Este parâmetro tem a
mesma função da diretiva logon drive do arquivo smb.conf.

50 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

O parâmetro userScript define qual será o script executado durante o logon do


usuário. Esta diretiva tem a mesma função da diretiva logon script do arquivo
smb.conf.

O parâmetro mailDomain define o domínio que será utilizado para o preenchimento


do atributo mail. Este parâmetro é utilizado por softwares clientes de correio
eletrônico, como o Thunderbird para acesso ao catálogo de endereços geral da
organização.

A maioria dos parâmetros de usuários mostrados acima podem ser sobrescritos por
flags assinaladas durante a execução do comando de criação do usuário (smbldap-
useradd). São eles: userSmbHome com a opção '-C'; userProfile com a opção '-F';
userHomeDrive com a opção '-D' e userScript com a opção '-E'.

Para a execução do nosso laboratório configure o arquivo smbldap.conf alterando os


parâmetros abaixo com os valores indicados.

Obtenha o SID do domínio com o comando net getlocalsid.

SID="insira o valor do SID obtido com o comando descrito acima"


sambaDomain="LABSAMBA"
suffix=”dc=labespecializa,dc=com,dc=br”
userSmbHome="\\SRVLAB\%U"
userProfile=
userHomeDrive="U:"
userScript=
mailDomain="labespecializa.com.br"

Concluída a configuração do smbldap-tools vamos criar a estrutura do nosso diretório.


Para a execução deste procedimento consideramos que você tenha configurado
corretamente o arquivo slapd.conf adicionando o usuário admin
(cn=admin,dc=labespecializa,dc=com,dc=br) como administrador do nosso diretório.

Também é necessário conceder privilégios para que usuários anônimos possam


realizar autenticação de outros usuários, usado normalmente por serviços externos
que desejam autenticar no diretório, e também conceder privilégios que para o
próprio usuário possa trocar a sua senha quando desejado sem a intervenção de um
administrador. Para isto ajuste o arquivo de configuração slapd.conf conforme abaixo:

access to
attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword

by dn="cn=admin,dc=labespecializa,dc=com,dc=br" write

by anonymous auth

by self write

by * none

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
51
Especializa Treinamentos <http:/ /www.especializa.com.br>

Inclua também as seguintes linhas, junto às demais inclusões já realizadas no arquivo


de configuração padrão da distribuição. Ela será necessária para que os atributos
específicos do samba possam ser utilizados no diretório.

include /etc/ldap/schema/samba.schema
include /etc/ldap/schema/misc.schema

O arquivo samba.schema está disponível no pacote samba-doc. Se ele não estiver


instalado instale-o com o comando abaixo:

# aptitude install samba-doc


# cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema
# gunzip /etc/ldap/schema/samba.schema.gz

Após a realização das configurações citadas devemos reinicar o serviço LDAP. Para isto
execute o seguinte comando:

# /etc/init.d/slapd restart

Como o serviço LDAP em execução podemos agora criar a estrutura do nosso


diretório. Para isto execute o comando abaixo:

# smbldap-populate

Ao final da execução desta criação do diretório será solicitada uma senha para o
usuário root do diretório. Este usuário será utilizado posteriormente para adicionar
máquinas ao domínio samba. Para esclarecimentos sobre o uso do smbldap-tools veja
a documentação disponível no formado PDF em /usr/share/doc/smbldap-
tools/smbldap-tools.pdf.gz.

Abaixo mostramos apenas as linhas que sofreram alterações no arquivo smb.conf. As


demais linhas encontradas neste arquivo de configuração deverão permanecer iguais
às disponíveis na arquivo padrão encontrado na distribuição Ubuntu.

[global]
workgroup = LABSAMBA
server string = Controlador de Dominio
wins support = yes
security = user
domain logons = yes
logon path =
domain master = yes
passdb backend = ldapsam:ldap://localhost
ldap suffix = dc=labespecializa,dc=com,dc=br
ldap machine suffix = ou=Computers
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=admin,dc=labespecializa,dc=com,dc=br
ldap passwd sync = yes

52 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

add machine script = /usr/sbin/smbldap-useradd -w '%u'


unix password sync = no
;invalid users = root

Será necessário também armazenar a senha do usuário admin do servidor LDAP para
que seja utilizado pelo samba. Para isto execute o comando abaixo:

# smbpasswd -w especial

onde especial é a senha.

Agora que temos o diretório LDAP e o samba configurados precisamos reiniciar o


serviço do samba.

# /etc/init.d/samba restart

Para criar usuários no diretório use o comando abaixo:

# smbldap-useradd -c "Linux Advanced Administrator LDAP" -a -P laaldap

Você ainda poderá editar o usuário para inserir outras informações que poderão ser
utilizadas futuramente para criação de um catálogo de endereços utilizando o
comando smbldap-userinfo.

5.3 Configurando um cliente Linux


Para centralizar a autenticação dos clientes Linux no diretório LDAP é necessário
possuir instalado em seu sistema o pacote ldap-auth-client. Para isto é necessário
executar o comando abaixo:

# aptitude install ldap-auth-client

O Debconf fará algumas perguntas durante o processo de instalação do pacote.

Na tela ldap uri insira: ldap://192.168.10.2 (ou 127.0.0.1 para o servidor)

Em Distinguished name of the search base: dc=labespecializa,dc=com,dc=br

Em LDAP version to use: 3

Em Make local root Database admin: no

Em does the LDAP database require login: no

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
53
Especializa Treinamentos <http:/ /www.especializa.com.br>

Agora vamos configurar o PAM. Para isto adicione as seguintes linhas nos arquivos de
configuração localizados no diretório /etc/pam.d

Arquivo common-account
account required pam_unix.so
account sufficient pam_ldap.so

Arquivo common-auth
auth sufficient pam_unix.so nullok_secure
auth required pam_ldap.so use_first_pass

Arquivo common-password
password sufficient pam_unix.so nullok obscure md5
password required pam_ldap.so

Arquivo common-session
session required pam_unix.so
session optional pam_mkhomedir.so

Também é necessário editar o arquivo de configuração nsswitch.conf para definir


onde e a preferência das diversas bases de autenticação.

Edite as linhas abaixo e insira ldap nas referências passwd, group e shadow como
abaixo:

# vi /etc/nsswitch.conf
passwd: compat ldap
group: compat ldap
shadow: compat ldap

Agora podemos efetuar login com usuários do diretório nas máquinas com o sistema
operacional Linux.

5.4 Adicionando estações Windows ao domínio


Agora chegou a hora de adicionarmos os computadores com windows no
nosso dominio. O procedimento para realizar esta tarefa é igual ao realizado
anteriormente, quando estávamos utilizando uma base de usuários
armazenadas no repositório tdbsam. O usuário do domínio que deverá ser
utilizado para esta tarefa será o root criado durante a criação do diretório.

Vale lembrar que para a execução desta tarefa é necessário que o servidor
onde está instalado o serviço samba deverá estar com a autenticação de
usuários realizada através do nosso diretório LDAP conforme o procedimento
mostrado no capítulo anterior.

54 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

5.5 Usando um catálogo de endereços no LDAP


Boa parte dos clientes de e-mail suporta fazer consultas a um catálogo de endereços
disponibilizado através do diretório LDAP.

Para adicionar o e-mail no diretório deveremos configurar os usuários adicionando um


atributo mail e colocando como o valor deste atributo o e-mail do usuário. E para novo
usuários simplesmente informe o e-mail durante a sua criação.

# smbldap-useradd -M aluno2 -a aluno2

Com este comando será criado o usuário aluno2 no diretório e ele terá o e-mail
atribuído aluno2@labespecializa.com.br.

Para configurar o Thunderbird para consultar o diretório é simples. Para isto basta
entrar nas configurações da conta, escolha Composition & Addressing, em Addressing
escolha Use a different LDAP server e clique em Edit Directories. Clique em Add e
preencha os campos conforme imagem abaixo.

Ilustração 3: Adicionando um catálogo de endereços


LDAP no Thunderbird

Para consultar o diretório basta configurar o Address Book para incluir a consulta no
diretório Lab Especializa.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
55
Especializa Treinamentos <http:/ /www.especializa.com.br>

6 Compartilhando recursos no Linux


Quando precisamos compartilhar recursos através de uma rede mista, com sistemas
operacionais Linux e Windows é necessário termos instalado o Samba nas máquinas
Linux. E quando temos uma rede onde todos os computadores são Linux ou outros
Unix-like? É preciso ter o samba? A respostá é Não. Para realizar o compartilhamento
de recursos em uma rede de computadores onde há apenas Linux nós utilizamos o
NFS, que é nativo desta plataforma.

6.1 NFS (Network File System)


O NFS (Network File System) é um sistema de compartilhamento de arquivos
desenvolvido pelo pessoal da SUN para substituir a ferramenta utilizada até então.
Essa ferramenta era o FTP.

A forma de acessar os dados através de um compartilhamento NFS é da mesma forma


como os arquivos estivessem na máquina local. Na verdade os compartilhamento é
montado em um ponto de montagem qualquer, escolhido pelo administrador.

O NFS já sofreu bastante com com falhas de segurança e baixa performance, o que
fez com que muitos administradores de rede desistissem do seu uso. De fato, se mal-
configurado um serviço de NFS poderá deixar seus dados expostos a qualquer usuário
na rede.

A partir do NFSv41 foi adicionado o suporte ao Kerberos, que resolveu o problema de


segurança, com a utilização deste é realizada a autenticação e os dados são
criptografados entre o servidor e o cliente. A configuração do NFS utilizando-se o
kerberos não é uma das configurações mais fáceis. Para isto é necessário a existência
de um serviço Kerberos pré-existente na rede. Por este motivo, neste documento não
iremos configurá-lo desta forma.

Para instalarmos um serviço NFS podemos utilizar o seguinte comando:

# aptitude install nfs-common nfs-kernel-server

ou

# yum install nfs

Para a utilização do NFS é necessário que o serviço de portmap esteja em execução.


Então, inicie o portmap com o seguinte comando:

# /etc/init.d/portmap start

A exportação de diretórios é realizada através do arquivo de configuração


/etc/exports. Após a edição deste arquivo não é necessário reinicar o serviço, para
1 Para maiores detalhes sobre o uso do NFS + Kerberos acesse
https://help.ubuntu.com/community/NFSv4Howto

56 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

esta tarefa foi criado o comando exportfs. Então execute o seguinte comando após
fazer qualquer edição nas configurações:

# exportfs -r

A opção “-r” indica a re-exportação de todos os diretórios definidos no arquivo


/etc/exports. A re-exportação dos diretórios não causa qualquer paralisação do
serviço.

A sintaxe do arquivo de configuração exports é bem simples. Na primeira coluna


definimos qual diretório será exportado. Na segunda coluna definidos quais máquinas
poderão montá-lo e quais suas restrições.

No exemplo abaixo o diretório /home foi exportado para todas as máquinas da rede
192.168.10.0/24 com as permissões de leitura e escrita. A opção sync indica que as
operações de escrita só serão concluídas após os dados tiverem sido efetivamente
gravados no disco.

# vi /etc/exports
/compartilhamento 192.168.10.0/24(rw,sync,no_subtree_check)

Se o servidor NFS não estiver em operação então chegou a hora de iniciá-lo, se já


estiver em operação então utilize o comando exportfs -r.

O comando exportfs também é utilizado para verificar quais diretórios estão sendo
exportados. Para isto basta executá-lo sem qualquer parâmetro.

# exportfs

Para mais informações sobre o comando exportfs utilize a sua página de manual em:

$ man exportfs

Diretório exportado, agora chegou a hora de montá-lo nas máquinas clientes. Para
esta tarefa utilize o comando mount.

# mount -t nfs 192.168.10.2:/compartilhamento /ponto_de_montagem

No caso acima o diretório /compartilhamento do servidor será montado sobre o ponto


de montagem /ponto_de_montagem na estação cliente.

Após certificado que as configurações estão corretas a melhor opção é especificar a


montagem deste compartilhamento através do fstab para que seja montado
automaticamente após um reboot.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
57
Especializa Treinamentos <http:/ /www.especializa.com.br>

Para adicionar o compartilhamento no fstab para ser montado automaticamente a


cada reboot insira no arquivo fstab as seguintes linhas:

# vi /etc/fstab
192.168.10.2:/compartilhamento /ponto_de_montagem nfs defaults 0 0

Antes de efetuar a montagem do compartilhamento nas estações clientes verifique se


o portmap está em execução. Ele será necessário tanto no servidor, quanto em cada
cliente configurado.

6.2 Habilitando perfil móvel no Linux


Quando se tem autenticação integrada, como LDAP por exemplo, e for necessário
habilitar perfis móveis no Linux podemos usar o NFS para habilitarmos este tipo de
perfil.

Para isto é necessário definirmos um servidor, que poderá ser o mesmo onde está
instalado o servidor LDAP ou não, e neste habilitar a exportação de um diretório que
será utilizado para armazenar o conteúdo do diretório home dos usuários.
Normalmente é utilizado para isto o próprio diretório home do servidor.

Então no servidor devemos inserir do arquivo de configuração das exportações NFS a


seguinte linha:

# vi /etc/exports
/home 192.168.10.0/24(rw,sync)

Em cada estação cliente será necessário configurar o /etc/fstab incluindo a linha para
montagem do diretório home do servidor. Faça isto adicionando a linha abaixo:

# vi /etc/fstab
192.168.10.2:/home /home nfs defaults 0 0

Após a configuração deste arquivo podemos montar o diretório /home com o seguinte
comando:

# mount /home

ou simplesmente

# mount -a

A partir deste momento os arquivos encontrados em /home estão armazenados no


servidor e os arquivos do usuário estarão disponíveis em qualquer computador da
rede.

58 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

7 Servidor de Impressão CUPS


O CUPS é um gerenciador de impressão para Unix. Com ele é possível gerenciar
impressoras conectadas localmente e também impressoras de rede. A configuração
do CUPS é realizada através de uma interface web, disponível no endereço
http://127.0.0.1:631. Através desta interface impressoras podem ser adicionadas,
classes podem ser criadas e arquivos de configuração podem ser editados. Também é
possível verificar e cancelar jobs que estão em execução ou na fila aguardando sua
vez.

Ilustração 4: Tela inicial do CUPS

O CUPS possui um arquivo de configuração muito parecido com o arquivo de


configuração do Apache. Por padrão o serviço ouve apenas no endereço 127.0.0.1,
mas se for necessário altere este valor editando a diretiva Listen no arquivo /etc/cups/
cupsd.conf.

No diretório /etc/cups existem vários arquivos. No arquivo printers.conf estão


definidas as configurações das impressoras já instaladas.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
59
Especializa Treinamentos <http:/ /www.especializa.com.br>

7.1 Instalando o CUPS


A instalação do CUPS poderá variar de acordo com a distribuição utilizada. No Ubuntu
Desktop este software é instalado por padrão, não sendo necessária a instalação de
qualquer pacote adicional.

Para instalar o cups no Ubuntu execute o seguinte comando:

# aptitude install cups-pdf cupsys cupsys-bsd cupsys-client cupsys-driver-


gutenprint

7.2 Adicionando impressoras


Adicionar uma impressora é uma tarefa fácil quando feita pela através do CUPS. Basta
clicar na aba Administration, em seguida em Add Printer e seguir respondendo as
questões do wizard apresentado a cada tela. Em algum momento será solicitado
escolher o fabricante e o modelo de sua impressora, caso o seu modelo não eteja
disponível na lista verifique se o fabricante não disponibiliza o arquivo PPD1.

Uma excelente fonte de consulta para verificar se sua impressora é suportada e qual
é o procedimento para realizar a sua instalação está no site da LinuxFundation2.

7.3 Adicionando classes


Classes são pools de impressoras. A criação de uma classe é útil quando se tem um
grande volume de impressão e mais de uma impressora disponível para imprimir.
Quando se envia um job para uma classe a impressão será realizada na impressora
que estiver disponível, não sendo necessário então a verificação de impressoras antes
de submeter um job.

Para criar uma classe clique na aba Administration, em seguida clique no botão Add
Class. Será solicitado o nome da classe, uma localização, uma breve descrição e quais
as impressoras que fazem parte da classe.

1 PPD – Postscript Printer Description. Mais detalhes em


http://en.wikipedia.org/wiki/PostScript_Printer_Description
2 Viste o site da Linux Fundation em http://www.linuxfoundation.org/en/OpenPrinting

60 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

8 Servidor Apache
Ao acessar qualquer site, há um servidor por trás daquele endereço responsável por
disponibilizar as páginas e todos os demais recursos que você pode acessar. Assim,
quando você envia um e-mail através de um formulário, coloca uma mensagem em
um fórum de discussão, faz uma compra on-line, etc, um servidor Web (ou um
conjunto de servidores) é responsável por processar todas essas informações.

Sendo mais claro, um servidor Web é um computador que processa solicitações HTTP
(Hyper-Text Transfer Protocol), o protocolo padrão da Web. Quando você usa um
navegador de internet para acessar um site, este faz as solicitações devidas ao
servidor Web do site através de HTTP e então recebe o conteúdo correspondente. No
caso do Apache, ele não só executa o HTTP, como outros protocolos, tais como o
HTTPS (O HTTP combinado com a camada de segurança SSL - Secure Socket Layer), o
FTP (File Transfer Protocol), entre outros.

As principais características do Apache são:

✔ Possui suporte a scripts cgi usando linguagens como Perl, PHP, Shell Script,
ASP, etc;

✔ Suporte a autorização de acesso podendo ser especificadas restrições de


acesso separadamente para cada endereço/arquivo/diretório acessado no
servidor;

✔ Autenticação requerendo um nome de usuário e senha válidos para acesso a


alguma página/sub-diretório/arquivo (suportando criptografia via Crypto e
MD5);

✔ Negociação de conteúdo, permitindo a exibição da página Web no idioma


requisitado pelo Cliente Navegador;

✔ Suporte a tipos mime;

✔ Personalização de logs;

✔ Mensagens de erro;

✔ Suporte a virtual hosting (é possível servir 2 ou mais páginas com endereços/


portas diferentes através do mesmo processo ou usar mais de um processo
para controlar mais de um endereço);

✔ Suporte a IP virtual hosting;

✔ Suporte a name virtual hosting;

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
61
Especializa Treinamentos <http:/ /www.especializa.com.br>

✔ Suporte a servidor Proxy ftp e http, com limite de acesso, caching (todas
flexivelmente configuráveis);

✔ Suporte a proxy e redirecionamentos baseados em URLs para endereços


Internos;

✔ Suporte a criptografia via SSL,Certificados digitais;

✔ Módulos DSO (Dynamic Shared Objects) permitem adicionar/remover


funcionalidades e recursos sem necessidade de recompilação do programa.

8.1 Instalando o Apache


Para instalar o apache no Ubuntu:

# aptitude install apache2

e para distribuições baseadas em RedHat:

# yum install httpd

8.2 Configurando o Apache


No Ubuntu a configuração do Apache é realizada editando os arquivos de configuração
localizados em /etc/apache2, já no RedHat os arquivos estão localizados em
/etc/httpd.

A organização destes arquivos nos diretórios também difere entre as duas


distribuições. No caso do Debian e Ubuntu, distribuição foco deste material, cada
seção do arquivo de configuração está especificada dentro de um arquivo específico
para este fim, enquanto que nas demais distribuições as configurações são realizadas
em um único arquivo, o httpd.conf.

$ ls /etc/apache2
total 28
-rw-r--r-- 1 root root 10587 2008-06-25 10:49 apache2.conf
drwxr-xr-x 2 root root 20 2008-09-06 20:24 conf.d
-rw-r--r-- 1 root root 378 2008-06-25 10:49 envvars
-rw-r--r-- 1 root root 0 2008-09-06 20:24 httpd.conf
drwxr-xr-x 2 root root 4096 2008-09-06 20:24 mods-available
drwxr-xr-x 2 root root 4096 2008-09-06 20:24 mods-enabled
-rw-r--r-- 1 root root 59 2008-06-25 10:49 ports.conf
drwxr-xr-x 2 root root 20 2008-09-06 20:24 sites-available
drwxr-xr-x 2 root root 24 2008-09-06 20:24 sites-enabled

62 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

O arquivo apache2.conf possui a maioria das configurações encontradas no arquivo


httpd.conf encontrado no Apache disponível na instalação a partir da compilação do
código fonte ou nas distribuições baseadas em RedHat.

O diretório conf.d possui possui arquivos que são incorporados à configuração do


sistema. Não há exigência de nomenclatura para que estes arquivos sejam
carregados, como ocorre nas distribuições baseadas em RedHat.

No arquivo envvars são encontradas as variáveis utilizadas ao longo dos demais


arquivos, como a variável APACHE_RUN_USER encontrada no arquivo apache2.conf.

Dica dos Especialistas


No Debian e Ubuntu o usuário/grupo do apache é www­data, lembre­se de
conceder as permissões necessárias nos arquivos do site para este
usuário/grupo.
A mesma orientação é válida para o Apache nas distribuições baseadas
em RedHat, porém nestas distribuições o usuário/grupo é apache.

O arquivo httpd.conf inicialmente não possui conteúdo algum, e deverá ser utilizado
para a inclusão de outras configurações não especificadas nos demais arquivos.

O diretório mods-available estão localizados arquivos com as devidas linhas de


configuração para carga dos módulos. Note que a existência do arquivo com a
configuração do módulo não importa na efetiva configuração deste, observe que
existe um diretório chamado mods-enabled.

O diretório mods-enabled possui links simbólicos que apontam para os arquivos de


configuração de módulos que estão em mods-available. A existência deste links
simbólicos é que caracteriza a carga do módulo durante o início do servidor web.

O arquivo ports.conf posui a configuração que especifica em quais portas e endereços


IPs o servidor web irá escutar.

O diretório sites-available estão localizados arquivos com as devidas linhas de


configuração para carga dos sites hospedados. Note que a existência do arquivo com
a configuração do site não importa na efetiva configuração deste, observe que existe
um diretório chamado sites-enabled.

O diretório sites-enabled possui links simbólicos que apontam para os arquivos de


configuração de sites que estão em sites-available. A existência deste links simbólicos
é que caracteriza a carga do site durante o início do servidor web.

A manipulação dos links simbólicos pode ser realizada com os comandos a2ensite e
a2dissite e dos módulos com os comandos a2enmod e a2dismod.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
63
Especializa Treinamentos <http:/ /www.especializa.com.br>

A separação das seções em arquivos foi idealizada para facilitar a localização de


configurações e para evitar erros durante a etapa de configuração. Sempre utilize o
arquivo ou diretório para o fim que este foi criado.

Dica dos Especialistas


No Debian e Ubuntu as configurações do Apache estão
fragmentadas em vários arquivos e diretórios.

No CentOS e outros derivados do RedHat toda a configuração do


Apache está concentrada no arquivo httpd.conf e no diretório conf.d,
carregando durante o start os arquivos dentro deste diretório que
tiverem a extensão .conf.

Após a instalação é como a ocorrência do erro mostrado abaixo. Este erro ocorre pela
ausência da diretiva ServerName nos arquivos de configuração.

apache2: Could not reliably determine the server's fully qualified domain name, using
127.0.1.1 for ServerName

Para eliminar este erro inclua no arquivo httpd.conf o seguinte conteúdo:

ServerName <seu_hostname>

Agora basta iniciarmos o serviço e testá-lo no navegador:

# /etc/init.d/apache2 start

ou

# service httpd start

No navegador teste usando o endereço www.labespecializa.com.br.

Após o início do servidor web pela primeira vez, sem ter feito qualquer configuração é
mostrada uma tela com o conteúdo It works! Isto significa que o servidor está
funcionando normalmente.

Para hospedar somente um site é necessário apenas que todo o conteúdo seja
copiado para o diretório /var/www.

8.3 Hospedando mais de um Site


O Apache permite a hospedagem de mais de um site por instância através de hosts
virtuais baseados em IP ou baseados em nome.

64 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

O modo de VirtualHost utilizado em seu servidor web deve ser escolhido de acordo
com a forma de acesso aos sites, se é HTTP ou HTTPS.

Por limitação do protocolo HTTPS, onde a sessão SSL é estabelecida antes da sessão
HTTP, não é possível a utilização de hosts virtuais baseados em nome.

8.3.1 Virtual Host baseado em IP


Para a configuração de um host virtual baseado em IP é necessário que sejam
configurados vários IPs no servidor web. Neste exemplo iremos adicionar o IP
192.168.10.3.

# ifconfig eth0:0 192.168.10.3 netmask 255.255.255.0

Para a configuração persistente deste endereço IP utilize o arquivo


/etc/network/interfaces.

# vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.10.2
netmask 255.255.255.0
network 192.168.10.2
broadcast 192.168.10.255
gateway 192.168.1.1

auto eth0:0
iface eth0:0 inet static
address 192.168.10.3
netmask 255.255.255.0

Após reiniciar o serviço networking o servidor web possuirá dois endereços IPs:
192.168.10.2 e 192.168.10.3.

Será necessário cadastrar os hosts www.labespecializa.com.br com o endereço


192.168.10.2 e o host www2.labespecializa.com.br com o endereço 192.168.10.3 no
servidor de DNS ou no arquivo /etc/hosts para testar o acesso ao site.

Crie os diretórios www.labespecializa.com.br e www2.labespeciliza.com.br em


/var/www.

# mkdir /var/www/www.labespecializa.com.br /var/www/www2.labespecializa.com.br

Em /var/www/www.labespecializa.com.br crie o arquivo index.html com o seguinte


conteúdo.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
65
Especializa Treinamentos <http:/ /www.especializa.com.br>

<html>
<head>
<title>Site WWW</title>
</head>
<body>
<h1>Olá! Você está no site www.labespecializa.com.br</h1>
</body>
</html>

Arquivo index.html em /var/www/www2.labespecializa.com.br

<html>
<head>
<title>Site WWW2</title>
</head>
<body>
<h1>Olá! Você está no site www2.labespecializa.com.br</h1>
</body>
</html>

Vamos criar então dois sites: www.labespecializa.com.br e


www2.labespecializa.com.br. Para isto crie os arquivos em /etc/apache2/sites-
available.

Arquivo /etc/apache2/sites-available/www.labespecializa.com.br

<VirtualHost 192.168.10.2:80>
ServerName www.labespecializa.com.br
DocumentRoot /var/www/www.labespecializa.com.br
</VirtualHost>

Arquivo /etc/apache2/sites-available/www2.labespecializa.com.br

<VirtualHost 192.168.10.3:80>
ServerName www2.labespecializa.com.br
DocumentRoot /var/www/www2.labespecializa.com.br
</VirtualHost>

# a2ensite www.labespecializa.com.br
# a2ensite www2.labespecializa.com.br
# /etc/init.d/apache2 reload

66 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

8.3.2 VirtualHost baseado em Nome


Um VirtualHost baseado em Nome é o mais utilizado para site com acesso com o
protocolo HTTP. Com ele é possível colocar uma grande quantidade de sites
hospedados em um único servidor com um único endereço IP. Da mesma forma que
no VirtualHost baseado em IP, para cada site hospedado é necessário um diretório
com todos os arquivos necessários ao funcionamento do site.

A diferença está no uso da diretiva NameVirtualHost. Esta diretiva especifica quais


endereços IPs serão disponbilizados para a utilização de VirtuaHost baseados em
nome.

NameVirtualHost 192.168.10.2

No exemplo acima habilitamos VirtualHost baseado em nome para o IP 192.168.10.2.


Assim uma requisição que chegar para este IP terá a URL verificada em todos os
virtuais hosts definidos nos arquivos de configuração encontrados em
/etc/apache2/sites-enabled.

Para habilitar o uso de VirtualHost baseado em todos os IPs disponíveis no servidor


utilizamos o asterísco '*'.

NameVirtualHost *

8.4 Instalando PHP + MySQL


É comum encontarmos referências ao LAMP em algumas documentações na Internet.
Mas o que o LAMP? LAMP são as iniciais de um quarteto de sucesso na Internet: Linux,
Apache, MySQL e PHP. Com o uso destes softwares é possível construir excelentes
sites para internet e extranet, além de softwares que utilizem a interface web.

O procedimento de instalação destas ferramentas é bem simples nas distribuições


baseadas em Debian e RedHat, sendo necessário apenas a execução de alguns
comandos.

Nas demais distribuições talvez seja necessário baixar o código-fonte e realizar a


compilação.

Nas próximas linhas veremos como realizar a instalação destes softwares na


distribuição Ubuntu e também algumas considerações sobre suas configurações.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
67
Especializa Treinamentos <http:/ /www.especializa.com.br>

8.4.1 O PHP (Personal Home Page)


Antes de instalarmos o PHP vamos fazer algumas considerações: ele será utilizado
para produzier sites dinâmicos e todos os dados serão armazenados em um banco de
dados MySQL, então será necessário instalar um módulo PHP com suporte ao MySQL.

A instalação do PHP na distribuição Ubuntu é um procedimento bem simples, para isto


é necessário apenas executar o comando abaixo:

# aptitude install php5 php5-mysql

O arquivo de configuração do php5 está disponível em /etc/php5/apache2/php.ini.


Ocasionalmente é necessário ajustar o parâmetro do limite de memória para um
script em php. Para isto é necessário editar o arquivo php.ini e alterar a seguinte linha
para o valor desejado:

memory_limit = 16M

Por questões se segurança é aconselhável desabilitar a exibição de erros na tela


ajustando o parâmetro display_errors para Off.

display_errors = Off

Durante a instalação do php o próprio instalador encarrega-se de criar as


configurações para o servidor web Apache, criando arquivos de configuração do
módulo e colocando-os no diretório /etc/apache2/mods-available. Também são criados
automaticamente o link simbólico para ativação do módulo no diretório /etc/apache2/
mods-enabled.

No caso do módulo php esteja instalado, porém desabilitado será possível habilitá-lo
executando o comando abaixo:

# a2enmod php5

Após a alteração desta configuração é necessário recarregar as configurações do


Apache. Para isto execute o seguinte comando:

# /etc/init.d/apache2 force-reload

8.4.2 O MySQL
O MySQL é um Sistema de Gerenciamento de Banco de Dados (SGBD) muito utilizado
para a construção de sites e ferramentas web. Ele é um software de relativa
simplicidade de instalação e operação e está disponível na maioria das distribuições
Linux. No Ubuntu ele está disponível para instalação através do comando:

68 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

# aptitude install mysql-server

O próprio instalador encarrega-se de configurá-lo para que seja iniciado


automaticamente a cada reboot do servidor.

Raramente precisamos alterar qualquer configuração do MySQL, mas caso seja


necessário o arquivo de configuração my.cnf está disponível no diretório /etc/mysql.

# cat /etc/mysql/my.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]

user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
bind-address = 127.0.0.1
#
# * Fine Tuning
#
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
query_cache_limit = 1M
query_cache_size = 16M
expire_logs_days = 10
max_binlog_size = 100M
skip-bdb

[mysqldump]
quick
quote-names
max_allowed_packet = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
69
Especializa Treinamentos <http:/ /www.especializa.com.br>

[isamchk]
key_buffer = 16M
!includedir /etc/mysql/conf.d/

As diretivas especificadas neste arquivo que alteramos com uma maior frequência são
datadir, bind-address e max_connections.

A diretiva datadir especifica onde os dados dos bancos de dados serão armazenados,
esta diretiva só deverá ser alterada quando houver a necessidade de armazenamento
em um storage externo, por exemplo.

A diretiva bind-address especifica em qual endereço IP do servidor o serviço MySQL


estará escutando. O padrão é 127.0.0.1 e deverá ser alterado quando houver a
necessidade de acesso remoto ao banco.

A diretiva max_connections é alterada quando a quantidade de conexões ao banco for


superior a 100 acessos simultâneos.

Para criar um banco de dados no MySQL execute o comando abaixo:

# mysqladmin create nome_do_banco

Para conectar ao banco de dados:

$ mysql -u root -p nome_do_banco

Neste momento será solicitada a senha do usuário root do banco que foi definida
durante a instalação do MySQL. A opção -u informa o nome do usuário que deverá ser
utilizado para conectar-se ao banco, neste caso o root, e a opção -p informa ao SGBD1
para solicitar a senha do usuário.

8.5 Intalando Joomla! para testar o nosso LAMP


Existem, na internet, portais prontos para serem instalados em seu sistema. Esse
portais já vem com notícias, fóruns, downloads, etc. Neste nosso caso iremos testar a
conexão do PHP com o banco de dados Mysql e, também, aproveitar para demonstrar
um pouco da força do PHP instalando um portal Joomla!.

Primeiramente obtenha uma cópia do Joomla! no site oficial do projeto


(http://www.joomla.org/).

Para instalá-lo é necessário apenas descompactá-lo em um diretório,


/var/www/joomla, por exemplo. Após descompactá-lo será necessário alterar o dono e
o grupo dono do diretório /var/www/joomla para o proprietário do servidor Apache.
Isto é necessário para que o Apache tenha controle total sobre os arquivos de
configuração do Joomla!.
1 Sistema de Gerenciamento de Banco de Dados, DBMS em inglês

70 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

# chown www-data.www-data /var/www/joomla -R

Agora é só abrir o navegador e testar com http://192.168.10.2/joomla e seguir


respondendo as questões feitas pelo instalador. Após a resposta de todas as
perguntas o Joomla! estará pronto para ser utilizado.

Dica dos Especialistas


No CentOS e outros derivados do RedHat o proprietário do apache é
o usuário e grupo apache.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
71
Especializa Treinamentos <http:/ /www.especializa.com.br>

9 Servidor de Correio Eletrônico


Um servidor de correio eletrônico é utilizado para enviar e receber e-mails para o seu
domínio. Através dele enviamos e recebemos nossas mensagens para os milhões de
domínios existentes na internet.

O serviço de correio eletrônico é formado pelo conjunto de outros serviços. Quando


estamos configurando nossos softwares de correio eletrônico é solicitado para
informarmos quais os edereços do nosso servidor de envio de mensagens e também o
nosso servidor de recebimento de mensagens. Para o serviço de envio de mensagens
tempos o protocolo SMTP, já para o serviço de recebimento de mensagens temos
mais opções: o POP (Post Office Protocol) e o IMAP.

A escolha de usar POP ou IMAP deve ser definida de acordo com os requisitos de
criticidade do serviço e espaço em disco disponível. Com o uso do POP, quando é feito
o acesso às mensagens toda a mensagem é carregada para o computador cliente, só
então o usuário terá acesso à mensagem. Em localidades com uma conexão à
internet de baixa velocidade isto pode ser encarado como um grande problema. Uma
vez que as mensagens são movidas para o computador do usuário durante o acesso,
a quantidade de espaço disponível para armazenamento destas nos servidores será
menor.

Já com o uso do protocolo IMAP, durante o acesso às mensagens somente o cabeçalho


é enviado à aplicação de correio eletrônico cliente. Isto reduz significativamente a
quantidade de informações trafegadas pela rede, uma enorme vantagem para acesso
em localidades com uma conexão à internet de baixa velocidade. Somente após
selecionar a mensagem para visualização esta será carregada para o computador do
usuário. Mesmo após a mensagem ter sido carregada para visualização no
computador do cliente a mensagem ficará disponível no servidor e só será apagada
quando solicitado pelo usuário. Uma outra vantagem observada no uso deste
protocolo se refere aos SPAMs, com o uso do POP, somente após carregar toda a
mensagem o usuário terá a possibilidade de apagá-la e com o uso do IMAP o usuário
poderá apagar a mensagem dos servidores antes mesmo de ter carregado todo o seu
conteúdo.

Para entender melhor como uma mensagem de correio eletrônico viaja pela rede
quando você clica no botão Enviar, até que ela esteja disponível para leitura na
aplicação cliente do destinatário da mensagem vamos descrever cada passo dado
pela mensagem.

Tudo começa na configuração do seu software de correio eletrônico, o Thunderbird,


por exemplo. Durante as configurações iniciais são solicitados o seu nome completo e
seu endereço de correio eletrônico. Estas informações serão utilizadas para
apresentação no campo From quando esta chegar ao destino. Você também terá que
escolher quanto ao protocolo de recebimento de mensagens será utilizado, e
apresentar o endereço deste servidor, nome ou IP, e também as suas credenciais de
acesso. Também será solicitado que você informe o endereço do servidor de envio de
mesnagens.

Com o software cliente de correio eletrônico devidamente configurado, enfim


podemos informar qual será o destinatário e redigir nossa mensagem.

72 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Informado o destinatário e mensagem redigida, nos resta agora clicar no botão Enviar.
Aqui começa a nossa viagem. Neste momento a nossa aplicação cliente irá conectar-
se ao servidor SMTP. A nossa aplicação cliente irá informar o rementente da
mensagem (FROM) e qual ou quais os destinatários (RCPT)1.

Abaixo o código fonte de uma mensagem de correio eletrônico.

Return-Path: <aluno2@labespecializa.com.br>
X-Original-To: aluno@labespecializa.com.br
Delivered-To: aluno@labespecializa.com.br
Received: from [192.168.10.254] (unknown [192.168.10.254]) by
srvlab.nodomain.com (Postfix) with ESMTP id BF0384F01 for
<aluno@labespecializa.com.br>; Fri, 19 Sep 2008 20:49:08 -0300 (BRT)
Subject: teste
From: Aluno2 <aluno2@labespecializa.com.br>
To: aluno@labespecializa.com.br
Content-Type: text/plain
Date: Fri, 19 Sep 2008 20:49:25 -0300
Message-Id: <1221868165.7230.0.camel@noname>
Mime-Version: 1.0
X-Mailer: Evolution 2.22.3.1
Content-Transfer-Encoding: 7bit
X-UIDL: TG9!!?pM!!Mpg"!k7^"!
X-Evolution-Source: pop://aluno@192.168.10.2/

Esta é uma mensagem de teste.

Em seguida servidor SMTP descobre o endereço eletrônico do domínio de destino,


fazendo uma consulta por registros do tipo MX no domínio de destino e então
conecta-se a este e envia nossa mensagem. Ao chegar no destino, o servidor SMTP de
destino coloca a mensagem na caixa de correio do usuário.

Até este ponto usamos o serviço SMTP.

Agora o programa cliente do usuário irá conectar-se ao servidor POP para verificar se
existe alguma mensagem a ser recebida. Caso exista ela será baixada para o seu
computador pessoal.

O postfix é talvez o servidor SMTP que mais cresceu nos últimos anos. Ele possui a
maioria das mais desejedas funcionalidades esperadas em um moderno servidor de
correio eletrônico, como autenticação através de banco de dados e LDAP e a
possibilidade de integração com poderosas ferramentas de detecção e remoção de
vírus e SPAM.

1 Veja mais detalhes sobre este assunto consultando a RFC 2821 em


http://www.ietf.org/rfc/rfc2821.txt

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
73
Especializa Treinamentos <http:/ /www.especializa.com.br>

9.1 Instalando o Postfix (SMTP)


No Ubuntu, para instalar o Postfix execute os comandos abaixo:

# aptitude install postfix

ou

# yum install postfix

Para sistemas baseados em Debian o Debconf fará algumas perguntar para lhe
auxiliar na configuração do correio eletrônico.

Na tela inicial escolha OK

Em “General type of configuration” escolha: Internet Site

Em “Mail name” digite o seu domínio: Ex: Deixe como está

Se quiser ser questionado sobre outras configurações como usuário que receberá os
e-mail enviados para o root, outros domínios, redes que poderão fazer relay, quota de
e-mail e algumas outras opções de menor relevância você poderá usar o dpkg-
reconfigure da seguinte forma:

# dpkg-reconfigure postfix priority=low

É muito importante que seu servidor de correio eletrônico faça relay somente para
sua rede local ou usuários autenticados. Isto irá impedir que spamers usem seu
servidor para enviar spams.

Abaixo o arquivo de configuração padrão disponibilizado pela distribuição Ubuntu.

# vi /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific: Specifying a file name will cause the first


# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)


biff = no

# appending .domain is the MUA's job.


append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings


#delay_warning_time = 4h

74 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

readme_directory = /usr/share/doc/postfix

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for


# information on enabling SSL in the smtp client.

myhostname = noname
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = noname, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html

9.2 Usando o PostfixAdmin


O PostfixAdmin é uma ferramenta para administração de domínios virtuais e usuários
para o Postfix. Através dele podemos criar, habilitar e desabilitar um novo domínio
virtual, para usuários nós podemos criar, habilitar, desabilitar, definir cota e algumas
configurações mais.

O PostfixAdmin foi desenvolvido em PHP e armazena todos os seus dados em um


servidor de banco de dados MySQL. Para instalar o postfix é necessário ter instalado o
conjunto LAMP (Linux, Apache, MySQL e PHP). Algumas configurações adicionais são
necessárias no Postfix.

O PostfixAdmin está disponível para download no site oficial do projeto1.

# wget
http://ufpr.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin_2.2.1.1_all
.deb

# aptitude install php5-imap

# dpkg -i postfixadmin_2.2.1.1_all.deb

1 Site oficial do postfixadmin http://postfixadmin.sourceforge.net

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
75
Especializa Treinamentos <http:/ /www.especializa.com.br>

Instalado o postfixadmin, chegou a hora de criarmos um banco de dados para


armazenamento das configurações. Para isto execute o procedimento abaixo:

# mysqladmin create postfix -u root -p


# mysql -u root -p postfix
> GRANT ALL ON postfix.* TO postfix@localhost IDENTIFIED BY 'postfixadmin';
> \q

O comando “mysqladmin create postfix” cria um banco de dados no MySQL de nome


“postfix”. Por padrão somente o usuário root do MySQL possui permissões neste
banco de dados, será necessário conceder permissões para outros usuários. Veja que
estamos falando aqui do usuário root do MySQL e não o usuário root do sistema.

O comando “mysql -u root -p postfix” nos conecta ao banco recém criado . Durante a
execução deste comando será solicitada a senha do usuário root do postfix, que
deverá ser digitada.

Já o comando “GRANT...” dá permissão total ao usuário “postfix” do host onde está


instalado o MySQL, identificado pela senha “postfixadmin”. Em ambientes de
produção é necessário trocar esta senha.

Após realizar esta configuração devemos definir no arquivo config.inc.php que a nossa
configuração foi concluída. Para isto devemos definir a variável $CONF['configured'] =
true; Isto informa ao Postfixadmin que ele está configurado e pronto para iniciar o seu
uso.

Após concluídas as configurações é necessário reiniciar o servidor Apache. Para isto


execute o comando abaixo:

# /etc/init.d/apache2 restart

Agora acesse o postfixadmin através do endereço


http://servidor/postfixadmin/setup.php

Neste momento serão exibidos na tela algumas informações sobre as configurações


do postfixadmin e se todas as etapas da configuração foram concluídas com sucesso.
Caso haja algum problema, algum módulo requerido esteja ausente, por exemplo,
uma mensagem de erro será exibida. Também neste momento será solicitada a
criação do usuário que será administrador do postfixadmin, este administrador terá os
privilégios de Super admin. Este usuário terá permissões de criar domínios, criar
contas de usuários e administradores, alias e demais configurações.

Abaixo um screenshot da tela citada acima, com o usuário administrador definido


como aluno@labespecializa.com.br.

76 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Ilustração 1: Tela inicial do postfixadmin


Após inserir o nome do administrador do postfixadmin e clicar em “Add Admin” será
necessário apagar o arquivo setup.php.

A partir de agora será possível administrar domínios e usuários pela interface web do
postfixadmin acessando o endereço http://192.168.10.2/postfixadmin.

Mas antes de iniciar o uso, é necessário informar ao postfix onde ele irá procurar por
domínios e usuários. Para isto devemos editar o arquivo de configuração main.cf
conforme abaixo:

Insira ao final do arquivo as seguintes linhas:

virtual_uid_maps = static:109
virtual_gid_maps = static:8
virtual_mailbox_base = /var/mail
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

A diretiva virtual_uid_maps indica com qual uid os arquivos serão gravados em discos.
Nesta diretiva devemos informar o uid do usuário postfix. Para verificar o UID do
Postfix execute o comando abaixo:

# chown postfix /var/mail


# ls -ldn /var/mail

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
77
Especializa Treinamentos <http:/ /www.especializa.com.br>

A diretiva virtual_gid_maps indica com qual gid os arquivos serão gravados em


discos. Nesta diretiva devemos informar o gid do grupo mail.

A diretiva virtual_mailbox_base indica onde serão armazenadas as mensagens que


chegarem para os usuários. Normalmente utilizamos /var/mail.

A diretiva virtual_mailbox_domains indica qual arquivo terá as configurações para


obter a lista de domínios virtuais. Note que estas configurações estão armazenadas
no banco de dados postfix, dentro do SGBD MySQL.

A diretiva virtual_alias_maps indica qual arquivo terá as configurações para obter a


lista alias para usuários. Note que estas configurações estão armazenadas no banco
de dados postfix, dentro do SGBD MySQL.

A diretiva virtual_mailbox_maps indica como obter a lista de usuários cadastrados


para cada domínio virtual.

Configurado o arquivo main.cf devemos criar os arquivos mysql_virtual_alias_maps.cf,


mysql_virtual_domains_maps.cf e mysql_virtual_mailbox_maps.cf com os seguintes
conteúdos.

$ cat /etc/postfix/mysql_virtual_alias_maps.cf
hosts = localhost
user = postfix
password = postfixadmin
dbname = postfix
table = alias
select_field = goto
where_field = address

$ cat /etc/postfix/mysql_virtual_domains_maps.cf
hosts = localhost
user = postfix
password = postfixadmin
dbname = postfix
table = domain
select_field = description
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'

$ cat /etc/postfix/mysql_virtual_mailbox_maps.cf
hosts = localhost
user = postfix
password = postfixadmin
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = '1'

78 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

9.2.1 Habilitando Cotas


Para habilitar cotas é necessário editar o arquivo de configuração do postfixadmin
(config.inc.php) e trocar a configuração $CONF['quota'] = 'NO'; por $CONF['quota'] =
'YES';

Fazendo esta substituição, durante a criação ou edição de um usuário, estará


disponível um campo para definir a cota do usuário em MB. Também estará disponível
uma opção para definir cota para todo o domínio.

Dica dos Especialistas


Para trocar a senha do postfixadmin é necessário, além de
definir esta senha através do comando GRANT ALL..., definí­la
no arquivo de configuração config.inc.php. E não esqueca de
apagar o arquivo setup.php após criar o usuário administrador
do postfixadmin.

9.2.2 Criando um novo domínio


1. Acesse o postfixadmin através do endereço http://192.168.10.2/postfixadmin;

2. Efetue login com um usuário com privilégios de Super User, o usuário definido
durante a instalação tem este privilégio;

3. Clique em “Lista de domínios” → Novo domínio;

4. Preencha os dados conforme pretendido;

Ex:

Domínio: labespecializa.com.br

Descrição: Laboratório LAA

Alias: 0

Contas de e-mail: 0

Limite máximo: 10240

Adicionar aliases: <marque>

Mail server ....: <não_marque>

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
79
Especializa Treinamentos <http:/ /www.especializa.com.br>

5. Clique no botão criar domínio.

Dica dos Especialistas


O limite máximo citado na configuração de um domínio virtual
faz referência à cota do domínio com um todo. Se definido com
o valor 10240, como no exemplo, o somatório de todas as
caixas postais não poderá exceder 10GB.

9.2.3 Criando uma conta de e-mail


1. Acesse o postfixadmin através do endereço http://192.168.10.2/postfixadmin;

2. Para criar contas de e-mail é necessário ser administrador do domínio em


questão ou ter privilégios de Super admin;

3. Clique em “Lista virtual” → “Criar conta de e-mail”;

4. Preencha dos dados conforme solicitado:

Ex:

Usuário: aluno @labespecializa.com.br

Senha: especial

Senha (confirmação): especial

Nome: Usuário Aluno

Limite: 100

Ativo: <marque>

Criar e-mail: <marque>

3. Clique no botão “Adicionar e-mail”.

9.2.4 Criando um novo administrador de domínio


1. Acesse o postfixadmin através do endereço http://192.168.10.2/postfixadmin;

2. Para cadastrar um novo administrador é necessário acessar o postfixadmin com


um usuário com privilégios de Super admin;

3. Clique em “Lista de administradores” → “Novo administrador”;

4. Preencha os dados solicitados:

80 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Ex:

Administrador: aluno2@labespecializa.com.br

Senha: especial

Senha (confirmação): especial

Domínio: <escolha_os_domínios_a_serem_administrados>

5. Clique no botão “Criar um administrador”.

9.2.5 Criando um novo Super admin


1. Acesse o postfixadmin através do endereço http://servidor/postfixadmin;

2. Para cadastrar um novo administrador é necessário acessar o postfixadmin com


um usuário com privilégios de Super admin;

3. Clique em “Lista de administradores” → “Novo administrador”;

4. Preencha os dados solicitados:

Ex:

Administrador: aluno2@labespecializa.com.br

Senha: especial

Senha (confirmação): especial

Domínio: <não_é_necessário_escolher>

5. Clique no botão “Criar um administrador”;

6. Clique em “Lista de administradores” → “Lista de administradores”

7. Na linha correspondente ao administrador desejado, clique em Modificar;

8. Marque o checkbox Super admin;

9. Clique em Modificar administrador.

9.3 Instalando o Courier (IMAP e POP)


No Ubuntu, para instalar o servidor IMAP e POP Courier execute o comando abaixo:

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
81
Especializa Treinamentos <http:/ /www.especializa.com.br>

# aptitude install courier-authlib-mysql courier-imap courier-pop

Edite o arquivo authmysqlrc e substitua o valor das diretivas abaixo pelos valores
mostrados abaixo:
# vi authmysqlrc
MYSQL_SERVER localhost
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfixadmin
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_DATABASE postfix
MYSQL_USER_TABLE mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '109'
MYSQL_GID_FIELD '8'
MYSQL_LOGIN_FIELD username
MYSQL_HOME_FIELD '/var/mail'
MYSQL_NAME_FIELD name
MYSQL_MAILDIR_FIELD maildir
MYSQL_QUOTA_FIELD quota
MYSQL_WHERE_CLAUSE active='1'

A diretiva MYSQL_UID_FIELD deverá ser configurada com o UID do postfix e


MYSQL_GID_FIELD com o GID no grupo mail.

No arquivo authdaemonrc troque a linha authmodulelist="authpam" por


authmodulelist="authmysql" . Isto irá habilitar a autenticação através do
banco de dados.

Os logs do courier são armazenados em /var/log/syslog.

82 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

10 Shell script
A execução de longas tarefas repetitivas podem ser facilitadas pelo uso de um
programa ou sistema que receba os dados a serem utilizados e execute as tarefas de
uma só vez.

Isto pode ser utilizado também quando temos operações que exijam uma intervenção
mais técnica e o usuário que irá executar estas intervenções seja um técnico ou
alguém com menor conhecimento do sistema. Assim usuários comuns do sistema
podem executar tarefas administrativas sem conhecimento dos comandos do sistema.

Vamos começar com um script básico, exibindo alguns itens que fazem parte de um
shell script.

# vi script01.sh
#!/bin/bash
VARIAVEL="Este e o valor da variável"
echo $VARIAVEL

Primeiramente deve ser notado que na primeira linha do arquivo determinamos qual
será o interpretador utilizado para executar o nosso shell. Depois criamos uma
variável chamada VARIAVEL, e chamamos seu valor em $VARIAVEL. Antes de
executarmos o script deveremos alterar as permissões de execução do arquivo.

# chmod +x script01.sh

# ./script01.sh
Este e o valor da variavel

Vamos ao segundo script.

# vi script02.sh
#!/bin/bash
echo "Foram passados $# parâmetros"
echo "O primeiro e: $1"
echo "O segundo e: $2"
echo "A lista de parâmetros e: $*"

Desta vez introduzimos o conceito das variáveis de entrada de dados. $# é a


quantidade de parâmetros existentes na lista de parâmetros, $1 representa o primeiro
parâmetro passado ao programa, $2 o segundo, e assim por diante. $* representa a
lista de parâmetros passados ao programa.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
83
Especializa Treinamentos <http:/ /www.especializa.com.br>

# chmod +x script02.sh

# ./script02.sh inicio fim


Foram passados 2 parâmetros
O primeiro e: inicio
O segundo e: fim
A lista de parâmetros e: inicio fim

Vamos ao terceiro script.

# vi script03.sh
#!/bin/bash
echo -n "Digite 1 valor: "
read VARIAVEL
echo "O valor digitado foi: $VARIAVEL"

Neste caso o sistema solicita que seja digitado um valor, esse valor é armazenado em
uma variável e depois recuperado.

# chmod +x script03.sh

# ./script03.sh
Digite 1 valor: Teste
O valor digitado foi: Teste

Quando existe a necessidade de compararmos valores podemos utilizar o seguinte:

Testes em arquivos Testes em variáveis


­b é um dispositivo de bloco Comparação Numérica
­c é um dispositivo de caractere ­lt é menor que (LessThan)
­d é um diretório ­gt é maior que (GreaterThan)
­e o arquivo existe ­le é menor igual (LessEqual)
­f é um arquivo normal ­ge é maior igual (GreaterEqual)
­g o bit SGID está ativado ­eq é igual (EQual)
­G o grupo do arquivo é o do usuário atual ­ne é diferente (NotEqual)
­k o sticky­bit está ativado
­L o arquivo é um link simbólico Comparação de Strings
­O o dono do arquivo é o usuário atual == é igual
­p o arquivo é um named pipe != é diferente

84 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Testes em arquivos Testes em variáveis


­r o arquivo tem permissão de leitura ­n é não nula
­s o tamanho do arquivo é maior que zero ­z é nula
­S o arquivo é um socket
­t o descritor de arquivos N é um terminal Operadores Lógicos
­u o bit SUID está ativado ! NÃO lógico (NOT)
­w o arquivo tem permissão de escrita ­a E lógico (AND)
­x o arquivo tem permissão de execução ­o OU lógico (OR)
­nt o arquivo é mais recente (NewerThan)
­ot o arquivo é mais antigo (OlderThan)
­ef o arquivo é o mesmo (EqualFile)

Vamos criar um script no qual utilizamos a comparação entre variáveis e o condicional


if.

# vi script04.sh
#!/bin/bash
echo -n "Digite o 1 valor: "
read PRIMEIRO
echo -n "Digite o 2 valor: "
read SEGUNDO
if [ $PRIMEIRO -eq $SEGUNDO ]; then
echo "Os valores sao iguais"
elif [ $PRIMEIRO -gt $SEGUNDO ]; then
echo "O primeiro e maior"
else
echo "O segundo e maior"
fi

Neste script recebemos o valor de duas variáveis, PRIMEIRO e SEGUNDO, com essas
duas variáveis efetuamos uma comparação, e utilizamos o if para resolver o que
fazer. Note que caso não tenha sido satisfeita a primeira condição, podemos efetuar
um novo teste com o elif, e por fim o else para a última opção. Finalmente utilizamos
o fi para fechar o condicional if.

# chmod +x script04.sh

# ./script04.sh
Digite o 1 valor: 2
Digite o 2 valor: 3
O segundo e maior

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
85
Especializa Treinamentos <http:/ /www.especializa.com.br>

Em muitos casos existe um grande número de possibilidades de comparação, nestes


casos o uso do if é bastante difícil, e a lógica de programação não fica muito clara.
Pensando nestes casos podemos aplicar o case, este pode ter um grande número de
comparações, e ainda, um valor padrão para os casos que os valores estejam fora do
conjunto de possibilidades.

# vi script05.sh
#!/bin/bash
echo -n "Valor: "
read VALOR
case $VALOR in
listar)
ls /
;;
exibir)
cat /etc/fstab
;;
*)
echo "digite listar|exibir"
;;
esac

Neste caso comparamos nossa variável com os valores “listar” e “exibir”, caso seja
digitado um valor diferente destes será exibida um aviso de como utilizar o programa.

# chmod +x script05.sh

# ./script05.sh
Valor: listar
aquota.group bin dev home lost+found misc net proc sbin srv tmp
var
aquota.user boot etc lib media mnt opt root selinux sys usr

A utilização de estruturas em laço é uma das ferramentas que fazem o shell script
muito prático. Muitas vezes é necessário efetuar um procedimento várias vezes, e o
loop nos dá a flexibilidade de fazermos esta tarefa em poucos segundos.

# vi script06.sh
#!/bin/bash
echo -n "Digite um valor: "
read VALOR
for ((i = 1; $i <= $VALOR; i=$i+1)); do
echo -n "$i "
done
echo

86 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Neste script uma variável é somada até que seja atingido o valor digitado pelo
usuário. Esta forma de utilizar o for é a mesma que outras linguagens de programação
como perl ou c.

# chmod +x script06.sh

# ./script06.sh
1 2 3 4 5

Como um pequeno exercício, você poderia criar um script que irá calcular o fatorial de
um número qualquer digitado pelo usuário.

Resolução:
#!/bin/bash
echo -n "Digite um valor: "
read VALOR
AUX=1
for ((i = 1; $i <= $VALOR; i=$i+1)); do
AUX=$(($AUX * $i))
done
echo "O fatorial e: $AUX"

Uma outra forma de utilizar o for é com arquivos textos. Imagine um arquivo
contendo uma lista de usuários a serem adicionados ao servidor. Este arquivo é o
/root/users.txt.

# cat /root/users.txt
humberto
caetano
silva

Agora vamos criar um script que faça esta tarefa.

# vi script07.sh
#!/bin/bash
for X in `cat /root/users.txt`; do
useradd $X
done

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
87
Especializa Treinamentos <http:/ /www.especializa.com.br>

O último condicional que iremos estudar é o while. O while é bem parecido com o for,
sendo que este é executado enquanto uma certa condição é satisfeita. No caso do
script abaixo, este é executado até que um valor seja digitado na variável.

# vi script07.sh
#!/bin/bash
while (true); do
echo -n "Digite um valor: "
read VALOR
if [ ! -z $VALOR ];then
break
fi
done
echo "Saindo do script"

# chmod +x script07.sh

# ./script07.sh
Digite um valor:
Digite um valor: 3
Saindo do script

88 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

11 Kernel do Linux
Frequentemente quando pensamos em fazer algum ajuste no kernel imaginamos logo
em compilar, mas nem tudo que se pode fazer com o kernel é compilar. O kernel do
Linux suporta ajustes de parâmetros, compilação de módulos externos sem a
necessidade de recompilar todo o kernel e outros parâmetros que são passados
durante o boot, normalmente especificados no seu gerenciador de boot, o grub, por
exemplo.

O kernel fica armazenado no diretório /boot, normalmente com o nome vmlinuz-


xxxxxx, onde xxxxxx representa o número da versão e algumas informações a mais,
inseridas pelo desenvolvedor da distribuição. No meu computador, onde estou
digitando este documento, o arquivo do kernel em execução chama-se vmlinuz-
2.6.24-21-generic.

Versões de kernel anteriores são mantidas para que seja possível entrar com o kernel
antigo em caso de problema durante o boot com a nova versão. Então é comum
encontrar vários arquivos vmlinuz neste diretório.

Outros arquivo também estão disponíveis, como o config-xxxxxx, que contém a


escolha para componentes feita pelo desenvolvedor da distribuição. Mais a frente,
quando chegar a hora de compilar nosso kernel iremos dar mais detalhes sobre as
formas de escolha que podemos fazer a cada componente do kernel.

Também podemos observar a existência do arquivo initrd.img-xxxxxx, que contém


todos os módulos disponíveis no kernel durante a compilação. Estes módulos estão lá
para que seja possível carregar o boot da máquina quando, por exemplo o driver do
sistema de arquivos em uso foi escolhido como módulo. Sem a existência deste
módulo não seria possível montar o sistema de arquivos e prosseguir com o boot
normal.

E por fim, temos o arquivo System.map-xxxxxx, que contém informações sobre


mapeamento de memória do kernel. É usado normalmente para fazer depuração de
kernel panic e kernel oopses1.

11.1 Passando parâmetros no boot


Como dito nas linhas anteriores alguns parâmetros podem ser passados ao kernel
durante o boot. Observando o arquivo de configuração do grub, o menu.lst podemos
perceber a existência de algumas informações como splash, root, single. Tudo isto são
parâmetros passados ao kernel durante o boot. Dentro do próprio arquivo de
configuração menu.lst há informações sobre como passar parâmetros adicionais e
como ativá-los para que sejam adicionados às novas versões de kernel instaladas.

Abaixo um trecho do arquivo menu.lst que fazem referência à parâmetros:

1 Para informações sobre kernel panic e kernel oopses consulte http://en.wikipedia.org/wiki/


Kernel_panic

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
89
Especializa Treinamentos <http:/ /www.especializa.com.br>

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=quiet splash

Editando a linha defoptions podemos adicionar parâmetros a todos as versões de


kernel disponíveis no arquivo de configuração. Esta linha deverá permanecer sempre
comentada. Para ativar estas configurações é necessário executar o comando abaixo:

# update-grub

11.2 Configurando parâmetros de execução


Além dos parâmetros de boot que podem ser passados ao kernel durante a
inicialização da máquina, existem também parâmetros que podem ser passados para
o kernel em funcionamento, estes parâmetros servem normalmente para definir
limites, ativar funções do kernel. Como exemplo de limites, podemos definir o
percentual máximo de memória que será utilizado para memória compartilhada, e
como funções podemos citar a capacidade de habilitar ou desabilitar a função de
roteamento de pacotes do kernel.

Estes parâmetros podem ser configurados de duas formas, a primeira à quente,


editando diretamente os arquivos existentes no sistema de arquivos virtual /proc e a
outra editando o arquivo /etc/sysctl.conf. A diferença principal entre o uso das duas
formas é que a edição direta dos arquivos no sistema de arquivos /proc não
persistentes e as configurações são perdidas a cada boot e configurando através do
arquivo sysctl.conf estas informações são persistentes e permancem válidas mesmo
após reboots.

Podemos usar como exemplo o arquivo ip_forward. O conteúdo deste arquivo pode
assumir apenas dois valores, o '0' (zero) que indica que o roteamento de pacotes está
desabilitado e '1', indicando que está habilitado.

# cat /proc/sys/net/ipv4/ip_forward
1

Como podemos ver, na minha máquina o roteamento de pacotes está habilitado. Para
desabilitarmos podemos fazer de duas formas.

# echo 0 >/proc/sys/net/ipv4/ip_forward

Como dito anteriormente, a outra forma de fazer isto é editando o arquivo sysctl.conf.
Então vamos lá!

# vi /etc/sysctl.conf
net.ipv4.ip_forward=0

90 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Para recarregar as configurações do arquivo sysctl execute o comando abaixo:

# sysctl -p

11.3 Compilação do kernel


O processo de recompilação do kernel é feito em várias etapas, primeiramente
devemos obter o código fonte do kernel desejado. Se necessário também obtenha os
patches a serem aplicados. Algumas ferramentas e compiladores também serão
necessários e serão mostrados ao longo desta seção.

Após termos o código fonte com os patches aplicados chega a hora então de
iniciarmos o processo mais demorado, que é escolher quais componentes serão
incluídos no nosso kernel. Depois disto podemos realmente iniciar a compilação.

Cada uma destas estapas será bem descrita nas linhas seguintes.

11.3.1 Obtendo o código fonte


A maioria das distribuições disponibiliza o código fonte do kernel para que o usuário
possa fazer suas escolhas e fazer a recompilação. No Ubuntu e Debian isto pode ser
feito através do apt instalando o pacote linux-source.

Outra forma de obter o código fonte do kernel desejado é baixá-lo diretamente do site
kernel.org1. Neste site estão disponíveis todas às versões de kernel deste a versão
1.0, lançada em 1994. Estão disponíveis também patches para cada versão lançada.
Estes patches são apenas arquivos diferenciais que são gerados com base à versão
imediatamente anterior. Isto lhe dá a possibilidade de baixar a cada lançamento
somente as diferenças entre as versões, que são muito menores que a versão
completa.

11.3.2 Aplicando patches no kernel


Se você tiver a necessidade de aplicaçar algum patche no seu kernel para adicionar
alguma funcionalidade extra ou adicionar suporte a algum hardware, este é o
momento.

Para isto você deverá ter o seu código fonte do kernel descompactado. O lugar
esperado que você faça isto é no diretório /usr/src.

1 http://www.kernel.org

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
91
Especializa Treinamentos <http:/ /www.especializa.com.br>

Aqui neste exemplo irei mostrar como fazer a aplicação do patch grsecurity1 no nosso
kernel. Lembre-se de que os patches deverão ser aplicados somente nas versões
indicadas. A aplicação de um patch em uma versão diferente poderá causar mau-
funcionamento do kernel.

Baixe o patch diretamente do site oficial do grsecurity, salve-o no diretório /usr/src e


descompacte-o.

Para aplicar o patch, acesse o diretório onde estão os fonte do kernel.

# cd /usr/src
# gunzip grsecurity-2.1.11-2.6.24.5-200804211829.patch.gz
# cd /usr/src/linux-2.6.24.5
# patch -p1 < ../grsecurity-2.1.11-2.6.24.5-200804211829.patch

Observe que esta versão do patch grsecurity foi produzido exclusivamente a versão
2.6.24.5. Qualquer variação o número de versão do kernel irá causar falha na
aplicação do patch.

Pronto. Se não foi mostrada nenhuma mensagem de erro, então o patch foi aplicado
com sucesso.

11.3.3 Escolhendo compontes


Antes de compilar o kernel é necessário que seja feita a escolha de quais
componentes serão ativados. Para escolhermos estes componentes normalmente
usamos uma interface de menus em modo texto. Outras opções estão disponíveis,
como uma interface de pergunta e resposta em modo texto, que é bastante
complicada e também uma interface gráfica produzida com a biblioteca qt.

Para usarmos nossa interface de menus em modo texto é necessária instalação de


alguns pacotes no nosso sistema, a libncurses. Aproveitando a oportunidade vamos
instalar também os compiladores e ferramentas necessárias a compilação do kernel.
Então para instalá-la execute o procedimento abaixo:

# aptitude install build-essential libncurses5 libncurses5-dev

Para iniciarmos o menu e começarmos a fazermos nossas escolhas, vamos executar:

# cd /usr/src/linux-2.6.24.5
# make menuconfig

1 Para mais detalhes veja o site oficial do grsecurity http://www.grsecurity.net

92 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Ilustação 2: Tela inicial do make menuconfig

Para cada componente poderemos fazer três escolhas. O asterísco '*' significa que o
componente será compilado embutido (built-in) no kernel. Já a letra 'M' indica que o
componente será compilado como módulo e será carregado somente se necessário. A
ausência de quaisquer dos caracteres mencionados acima significa que o componente
não será compilado.

Após fazer todas alterações necessárias, ao selecionar Exit será questionado se a


configuração deverá ser salva, lembre de informar que sim.

Dica dos Especialistas


Certifique­se de adicionar todos os componentes referentes ao
seu sistema. É comum nos depararmos com um Kernel Panic
após a instalação causado pela falta do componente para
acesso ao sistema de arquivos utilizado.

11.3.4 Compilando do modo Debian/Ubuntu


O processo de compilação do kernel no Debian e Ubuntu é bem simples. Uma
ferramenta chamada kernel-package foi desenvolvida com a missão de simplificar um
procedimento complexo e sujeito a erros.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
93
Especializa Treinamentos <http:/ /www.especializa.com.br>

Para iniciar a compilação do kernel é necessário ter, além dos compiladores e


bibliotecas necessárias, o pacote kernel-package instalado. Se você preferir compilar
o kernel com um usuário comum, ainda é necessária a instalação do pacote fakeroot.
Para isto execute o seguinte comando:

# aptitude install kernel-package fakeroot

Após a instalação do pacote chegou a hora de iniciarmos a compilação do kernel.

# make-kpkg --initrd --us --uc kernel-image

A opção --initrd instrui o kernel-package a gerar o pacote initrd contendo todos os


componentes que foram selecionados com módulo. A função do initrd já foi explicada
nas linhas acima.

A opção --us instrui o kernel-package a não assinar as fontes e --uc para não assinar o
changelog.

Caso ocorra algum problema e seja necessário fazer algum ajuste, antes de tentar
novamente é necessário executar o comando abaixo para limpar tudo que foi gerado
na tentativa anterior de compilar o kernel.

# make-kpkg clean

Após o término da compilação será criado um arquivo com extensão .deb no


diretório /usr/src. Para instalar este pacote use o comando dpkg conforme abaixo:

# dpkg -i kernel-image-xxxxxx.deb

Não será necessária qualquer cópia adicional de arquivos ou edição de arquivos de


configuração, nem mesmo do grub ou lilo. O próprio procedimento de instalação do
pacote já o faz.

11.3.5 Compilando do modo das demais distribuições


O procedimento de compilação do kernel nas demais distribuições é realizado de
forma manual, que é bem mais trabalhoso.

Primeiramente devemos criar um link simbólico chamado linux apontando para o


diretório onde está o código fonte do nosso kernel.

# cd /usr/src
# ln linux-2.6.24.5 linux

Uma vez configurado o kernel com o comando make menuconfig e criado o link
simbólico citado acima, devemos verificar as dependências dos componentes, isto é

94 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

necessário para garantir a dependência entre os componentes esteja íntegra. Para


isto, execute o comando abaixo:

# make dep

Verificadas todas as dependências, chegou a hora de compilarmos o kernel. Note que


os componentes que foram selecionado como módulos não serão compilados neste
momento. Esta etapa irá apenas compilar o kernel em si. Este procedimento é
realizado executando o procedimento abaixo.

# make

Conforme falamos acima, a execução deste procedimento não compila os


componentes que foram selecionados como módulos. Então vamos compilar os
módulos.

# make modules

Com os módulos compilados, chegou a hora de copiá-los para os seus devidos


lugares, então faça-o assim:

# make modules_install

Se algo der errado e você precisar reconfigurar o seu kernel com make menuconfig
será necessário executar o comando abaixo para limpar todos os rastros da
compilação anterior.

# make clean

Após o longo tempo esperado para a compilação temos um kernel compilado. O nosso
kernel estará disponível no diretório arch/i386/boot, o arquivo bzImage. Para utilizá-lo
é necessário copiá-lo para o diretório /boot conforme abaixo:

# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.24.5

Foi citado anteriormente, durante o procedimento de compilação do kernel no Debian


e Ubuntu que o initrd seria gerado adicionando um parâmetro no comando make-
kpkg. Bom, aqui neste procedimento manual não é bem assim. Para isto é necessário
executar o comando abaixo:

# mkinitrd initrd.img-2.6.24.5 2.6.24.5

O parâmetro initrd.img-2.6.24.5 é o nome do arquivo initrd que será gerado e 2.6.24.5


é o nome do diretório que foi criado pelo comando make modules_install, ou
simplesmente o número da versão do kernel recém compilado.

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
95
Especializa Treinamentos <http:/ /www.especializa.com.br>

Ufa! Acabou. - Não. Incrivelmente, não acabou ainda.

O nosso gerenciador de boot ainda não foi informado que um novo kernel foi
compilado e que ele deverá usá-lo. Para isto devemos editar seu arquivo de
configuração. Como a maioria das distribuições atuais utilizam o GRUB, então vamos
apenas mostrar como se faz isto nele. O procedimento para o LILO é semelhante,
mudando apenas a sintaxe.

Então vamos lá! Primeiramente faça uma cópia da seção referente ao seu atual kernel
em funcionamento. Em seguida, faça as alterações referentes o arquivo vmlinuz e
initrd. O resultado final deverá ficar algo semelhante ao mostrado abaixo:

title Ubuntu 8.04.1, kernel 2.6.24-5


root (hd0,7)
kernel /boot/vmlinuz-2.6.24.5 root=UUID=2fabdf08-df1c-4d21-9b6d-16799143003b
ro quiet splash
initrd /boot/initrd.img-2.6.24-5
quiet

Pronto. Agora acabou.

Nos resta agora somente reiniciarmos o sistema e escolhermos o nosso kernel no


menu do grub. Após o início do sistema através do kernel recém compilado podemos
confirmar se é o nosso kernel que está em execução através do comando abaixo:

# uname -r
2.6.24.5

11.4 Carregando módulos do kernel


A vantagem de ter um kernel com módulos é a possibilidade de carregar somente os
componentes que realmente são necessários. Se você compilar todos os componentes
de forma embutida (built-in) você ficará com um kernel muito grande a ponto de nem
compilar. O uso de módulos dá uma vantagem grande quando se tem também uma
variadade grande de hardware, com máquinas que contenham placas de rede,
controladoras de disco e tudo mais direrentes, então você carrega em cada máquina
somente os módulos necessários ao funcionamento do hardware local.

A forma de incluir cada componente no kernel na forma de módulo foi descrita nas
seções anteriores, agora chegou a hora de mostrarmos qual é o procedimento para
carregar um destes módulos no sistema.

No exemplo abaixo, carregamos o módulo bonding.

# modprobe bonding

96 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Alguns módulos podem precisar de parâmetros, você poderá especificá-los na própria


linha do comando.

# modprobe bonding mode=2

Para listar os módulos que foram carregados execute o comando lsmod

# lsmod

Para obter informações sobre um determinado módulo execute o comando modinfo

# modinfo bonding

O diretório /proc também possui muitas informações sobre os módulos que foram
carregados no sistema. Muitas informações sobre os módulos podem ajudar a
diagnosticar o problema e também na hora de criar soluções.

E por fim, para descarregar um módulo execute o comando rmmod. Este comando
não exclui o módulo do sistema, ele simplesmente o retira da memória.

# rmmod bonding

Para que um módulo seja carregado automaticamente a cada reboot da máquina é


necessário inseri-lo na lista contida dentro do arquivo /etc/modules.
$ cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

fuse
lp
nf_conntrack_netlink
nf_conntrack_ipv4

11.5 Compilandomódulos sem recompilar o kernel


Nem sempre é necessário recompilar todo o kernel para adicionar algum módulo
extra. O VMware1, VirtualBox2 e Madwifi3, por exemplo compilam módulos que serão
carregados junto ao kernel para poder funcionar.

Se você possui algum software que necessite compilar módulos é necessário que você
tenha o pacote kernel-headers instalado.
1 Mais informações sobre o VMware no site http://www.vmware.com
2 Mais informações sobre o VirtualBox no site http://www.virtualbox.org
3 Driver para placas Atheros, site em http://madwifi-project.org

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
97
Especializa Treinamentos <http:/ /www.especializa.com.br>

Para instalar o kernel-headers de uma versão padrão do seu Ubuntu é necessário


apenas instalar o pacote correspondente. Veja que a versão do pacote kernel-headers
deverá coincidir com a versão do kernel em funcionamento no momento da
compilação.

# aptitude install kernel-headers-xxxxxx

Para uma versão de kernel que você mesmo tenha compilado é necessário que você
crie o pacote kernel-headers. Para isto execute o comando abaixo:

# make-kpkg kernel_headers

Da mesma forma como ocorrido no processo de compilação do kernel na seção de


compilação do kernel no Ubuntu e Debian, um pacote kernel-headers-xxxxxx.deb será
criado no diretório /usr/src. Para instalá-lo execute o comando abaixo:

# dpkg -i kernel-headers-xxxxxx.deb

Após a instalação do pacote os cabeçalhos (headers) estarão disponíveis no diretório /


usr/src e estarão prontos para serem utilizados.

98 Especializa Linux Advanced Administrator


Especializa Treinamentos <http:/ /www.especializa.com.br>

Dados sobre o autor

Kléber Alves Leal


kleber.leal@gmail.com
Analista de Suporte
http://blogdosl.blogspot.com

Revisão ortográfica
Roberto Baptista Pordeus
Luis Adriano Alves Teixeira

Última atualização: 17 de março de 2009

Especializa Linux Advanced Administrator


Kléber Alves Leal @2009
99

Você também pode gostar