Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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.
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.
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.
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.
Usando o aptitude:
Usando o yum:
# vi /etc/dhcp3/dhcpd.conf
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address 192.168.10.5;
}
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;
# 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;
#host passacaglia {
# hardware ethernet 0:0:c0:5d:bd:95;
# filename "vmunix.passacaglia";
# server-name "toccata.fugue.com";
#}
# fixed-address fantasia.fugue.com;
#}
#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.
$ man dhcpd.conf
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 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.
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 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.
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.
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;
#}
Em sistemas Debian/Ubuntu:
# /etc/init.d/dhcp3-server start
# 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.
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'.
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.
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
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.
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.
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
include "/etc/bind/named.conf.options";
// 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" {
type master;
file "/etc/bind/db.255";
};
include "/etc/bind/named.conf.local";
Abaixo iremos descrever algumas das principais diretivas que podem ser configuradas
no arquivo named.conf.
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.
acl redelocal {
192.168.10.0/24;
192.168.100.0/24;
};
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.
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”;
};
$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.
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.
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.
# /etc/init.d/bind9 restart
ou
$ 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
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.
;; 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
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 -t mx labespecializa.com.br
;; QUESTION SECTION:
;labespecializa.com.br. IN MX
;; ANSWER SECTION:
labespecializa.com.br. 604800 IN MX 10
sol.labespecializa.com.br.
;; AUTHORITY SECTION:
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
# 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; };
};
No Debian e Ubuntu
# /etc/init.d/bind9 restart
ou
No RedHat e derivados
# vi /etc/named.conf.local
zone "10.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.10";
};
# vi /etc/bind/db.192.168.10
$TTL 86400
@ IN SOA labespecializa.com.br. postmaster.labespecializa.com.br. (
42 ; serial
3H ; refresh
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.
Debian e Ubuntu
# /etc/init.d/bind9 restart
ou
RedHat e derivados
# service named restart
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.
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.
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.
Como a instalação de qualquer outro software no Linux é necessário estar logado com
um usuário que tenha privilégios administrativos.
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.
# 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.
# 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
;[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
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
$ 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.
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
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 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 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 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 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.
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.
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 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 directory mask define a permissão que serão criados os diretórios dentro do
compartilhamento. Esta diretiva é semelhante à já discutida create mask.
[publico]
comment = Diretório Publico
path = /publico
guest ok = yes
browseable = yes
writeable = yes
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.
# /etc/init.d/samba restart
ou
# vi /etc/samba/smb.conf
[global]
...
printcap name = cups
printing = cups
load printers = yes
cups options = raw
[homes]
...
[temp]
...
[printers]
# Comentário da pasta
comment = All Printers
# /etc/init.d/samba restart
ou
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.
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.
[global]
workgroup = LABSAMBA
server string = Controlador de Dominio
wins support = yes
security = user
domain logons = yes
logon path =
domain master = yes
# /etc/init.d/samba restart
# groupadd computers
# useradd -g computers -s /bin/false -d /dev/null nome_da_maquina$
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.
# groupadd ntadmins
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.
Uma vez criado o usuário no sistema operacional chegou a vez de criar a conta no
samba.
# smbpasswd -a laa
Clique em em Iniciar -> Painel de Controle -> Sistema -> Nome do Computador ->
Alterar -> Domínio.
Ex: para criar o usuário João Cabral de Melo Neto no grupo Domain Users do windows
execute:
# smbpasswd -a <username>
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.
# 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.
# mkdir -p /home/samba/netlogon
# cat /home/samba/netlogon/logon.cmd
net use p: \\192.168.10.2\publico
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.
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
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
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.
ou
# 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
backend hdb
database hdb
suffix "dc=nodomain,dc=com"
rootdn "cn=admin,dc=nodomain,dc=com"
rootpw {SSHA}5SPjAVkOdIt7iC72+p9vDi8JJfhZMDT/
directory "/var/lib/ldap"
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
# /etc/init.d/slapd restart
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
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:
$ cd /usr/share/doc/smbldap-tools
# cp smbldap.conf.gz smbldap_bind.conf /etc/smbldap-tools
# gunzip /etc/smbldap-tools/smbldap.conf.gz
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:
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}"
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 suffix indica o sufixo do nosso servidor LDAP. Será necessário alterá-lo
para dc=labespecializa,dc=com,dc=br.
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'.
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
include /etc/ldap/schema/samba.schema
include /etc/ldap/schema/misc.schema
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
# 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.
[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
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
# /etc/init.d/samba restart
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.
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
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.
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.
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.
Para consultar o diretório basta configurar o Address Book para incluir a consulta no
diretório Lab Especializa.
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.
ou
# /etc/init.d/portmap start
esta tarefa foi criado o comando exportfs. Então execute o seguinte comando após
fazer qualquer edição nas configurações:
# exportfs -r
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)
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.
# vi /etc/fstab
192.168.10.2:/compartilhamento /ponto_de_montagem nfs defaults 0 0
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.
# 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
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.
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.
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.
✔ Possui suporte a scripts cgi usando linguagens como Perl, PHP, Shell Script,
ASP, etc;
✔ Personalização de logs;
✔ Mensagens de erro;
✔ Suporte a servidor Proxy ftp e http, com limite de acesso, caching (todas
flexivelmente configuráveis);
$ 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
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.
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.
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
ServerName <seu_hostname>
# /etc/init.d/apache2 start
ou
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.
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.
# 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.
<html>
<head>
<title>Site WWW</title>
</head>
<body>
<h1>Olá! Você está no site www.labespecializa.com.br</h1>
</body>
</html>
<html>
<head>
<title>Site WWW2</title>
</head>
<body>
<h1>Olá! Você está no site www2.labespecializa.com.br</h1>
</body>
</html>
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
NameVirtualHost 192.168.10.2
NameVirtualHost *
memory_limit = 16M
display_errors = Off
No caso do módulo php esteja instalado, porém desabilitado será possível habilitá-lo
executando o comando abaixo:
# a2enmod php5
# /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:
# 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
[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.
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.
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.
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.
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.
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/
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.
ou
Para sistemas baseados em Debian o Debconf fará algumas perguntar para lhe
auxiliar na configuração do correio eletrônico.
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:
É 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.
# vi /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
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
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
# wget
http://ufpr.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin_2.2.1.1_all
.deb
# dpkg -i postfixadmin_2.2.1.1_all.deb
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.
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.
# /etc/init.d/apache2 restart
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:
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:
$ 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'
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;
Ex:
Domínio: labespecializa.com.br
Alias: 0
Contas de e-mail: 0
Ex:
Senha: especial
Limite: 100
Ativo: <marque>
Ex:
Administrador: aluno2@labespecializa.com.br
Senha: especial
Domínio: <escolha_os_domínios_a_serem_administrados>
Ex:
Administrador: aluno2@labespecializa.com.br
Senha: especial
Domínio: <não_é_necessário_escolher>
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'
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
# 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: $*"
# chmod +x script02.sh
# 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
# 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
# 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
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
# vi script07.sh
#!/bin/bash
for X in `cat /root/users.txt`; do
useradd $X
done
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
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.
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.
## 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
# update-grub
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
# sysctl -p
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.
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.
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
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.
# 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.
# cd /usr/src/linux-2.6.24.5
# 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.
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
# dpkg -i kernel-image-xxxxxx.deb
# 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 é
# make dep
# make
# make modules
# 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
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:
# uname -r
2.6.24.5
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.
# modprobe bonding
# lsmod
# 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
fuse
lp
nf_conntrack_netlink
nf_conntrack_ipv4
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
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
# dpkg -i kernel-headers-xxxxxx.deb
Revisão ortográfica
Roberto Baptista Pordeus
Luis Adriano Alves Teixeira