Yellow Pages 3: O lado do servidor

ArticleCategory:

System Administration

AuthorImage:

[Frederic]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

Original in fr Frédéric Raynal

fr to de Bernhard Spanyar

de to en Guido Socher

en to en Lorne Bailey

en to pt Patrick Carpalhoso

AboutTheAuthor:

Frédéric Raynal está actualmente a preparar a sua tese final no INRIA na area da computação cientifica. Oiço frequentemente o último album de "16 Horse Power" (muito bom, mas igualmente muito potente) e "The for carnation", um pouco frio mas também muito bom.

Abstract:

Neste artigo vamos ver a instalação passo a passo de um servidor NIS. Iremos ver qual é o software necessário, os ficheiros de configuração e a criação da base de dados.

ArticleIllustration:

[Illustration]

ArticleBody:

Introdução

Vimos no artigo anterior como configurar um cliente NIS. Salientamos os riscos de segurança quando temos esse serviço esta activo. É questionável se podemos realmente considerar isso como risco de segurança. Os criadores do NIS tinham em mente uma LAN fechada ou rede separada por firewalls por esse motivo eles não estavam realmente preocupados com a segurança.

Neste artigo iremos ver como configurar o servidor e veremos umas dicas sobre a forma de usar o NIS.

NIS e NYS

Existem duas variantes do NIS: o "NIS tradicional" e o NYS. Mas a maior parte das pessoas trata ambos por NIS. Para um administrador dificilmente existe uma diferença entre os dois, ambos configuram clientes e servidores da mesma forma. A nova versão, o NYS, suporta coisas como as "shadow passwords".

Neste artigo iremos falar da versão mais recente de ypserv. Recomendamos uma versão posterior à 1.3.2 visto que já suporta as "shadow passwords". Por outras palavras, estamos realmente a falar de NYS e não do "NIS tradicional" ainda que utilisamos a palavra NIS ao longo do artigo.

O servidor NIS

Existem dois servidores : ypserv e yps. Segundo o autor do NIS-HOWTO não existem diferenças significativas entre eles, mas yps não é mais continuado pelo seu autor, então iremos ver unicamente o ypserv.

Primeiro iremos explicar os passos necessários para a instalação do servidor. Neste artigo trabalhamos com um host chamado "charly". O domínio NIS é "bosley" e os servidores escravos são "iron1", "iron2" e "iron3".

Instalação

Como primeiro passo, temos de nos certificar que o demónio portmap está a funcionar. Se não for o caso, ele tem de ser activado.

A seguir, tem de escolher um nome para o domínio NIS. Não é um dominio DNS mas sim um nome para uma região YP. Por questões de segurança, o nome tem de ser diferente do nome do servidor NIS.

O domínio é definido com o comando domainname :-) No nosso caso é:

root@charly >> /bin/domainname bosley
Esse comando só inicializa o domínio NIS em RAM. Para que seja permanente é necessário a linha seguinte no ficheiro/etc/sysconfig/network:
NISDOMAIN=bosley
Isto ira inicializar o domínio NIS automaticamente no próximo reboot.

Antes de poder iniciar o demónio ypserv necessitamos configura-lo editando o ficheiro/etc/ypserv.conf. É um ficheiro ASCII com a seguinte sintaxe:

  1. Comentários: são linhas começando com o caracter #.
  2. Opções para o demónio: A sintaxe é a seguinte.
    option: [yes|no]
    As opções possíveis são: dns, o servidor ira pedir ao DNS para localizar os clientes que não estão no hosts-maps, sunos_kludge, obsoleto e xfr_check_port para utilizar uma porta após 1024 para o servidor (por defeito é "yes").
  3. Regras adicionais: O formato para é o seguinte:
    host:map:security:mangle[:field]
    Essas regras decidem quem pode ver que informação.
A página man-page de ypserv.conf fornece explicações claras sobre todas as opções e possibilidades.

Agora podemos iniciar o servidor:

root@charly >> /etc/rc.d/init.d/ypserv start
Para iniciar o servidor automaticamente é necessário editar o ficheiro rc.d ou com Redhat executar o comando:
root@charly >> /sbin/chkconfig --level 345 ypserv on
Para verificar se tudo esta a funcionar digitar:
root@charly >> /usr/sbin/rpcinfo -u localhost ypserv
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
Antes de ver os pormenores temos que lembrar-nos o que aprendemos no primeiro artigo. Existem 2 tipos de servidor: mestre e escravo. Os servidores escravos só tem uma copia da base de dados do servidor mestre. Eles auxiliam o servidor mestre quando este leva muito tempo para atender os pedidos dos clientes ou quando não esta em funcionamento. A base de dados é unicamente mantida pelo servidor mestre. Ela é sobreposta sobre a base de dados dos clientes.

Agora esta tudo pronto ... excepto a base de dados. Em primeiro temos de a gerar. Gerar significa utilizar o Makefile ;-] O Makefile esta pré-preparado só precisamos de alterar umas linhas. O Makefile esta no /var/yp e esta claramente comentado. A linha mais importante é aquela onde os maps são definidos. No host charly é:

all: passwd group hosts rpc services netid protocols mail shadow
# netgrp publickey
# networks ethers bootparams printcap \
# amd.home auto.master auto.home passwd.adjunct
Deve-se adicionar a possibilidade de manipular os "shadows passwords". Para poder efectuar isso é necessário adicionar "passwd" e "shadow" na lista de ficheiros e atribuir o valor verdadeiro a variável MERGE_PASSWD. MERGE_PASSWD determina se os ficheiros /etc/passwd e /etc/shadow estão unidos.

Antes de iniciar o servidor temos de verificar um último pormenor: direitos de escrita. Existam duas formas para controlar os direitos. Os próprios métodos do ypserv ou via tcp_wrapper. Iremos ver os próprios métodos de segurança do ypserv.

Se possuir unicamente os binários de ypserv, então a opção -v ira imprimir as opções de configuração com que ypserv foi compilado. Necessitamos da opção "securenets" para utilizar o próprio control de acesso do ypseerv.

root@charly >> /usr/sbin/ypserv -v
ypserv - NYS YP Server version 1.3.9 (with securenets)
O ficheiro /var/yp/securenets contêm os pares de numeros netmask/network que podemos utilizar para controlar o acesso ao servidor. Por defeito é o seguinte:
0.0.0.0          0.0.0.0
Isto autoriza o acesso a qualquer pessoa no mundo. Temos de substituir isso. Para utilizar qualquer ligação de qualquer host para a rede 131.234.223.0 tem de escrever:
255.255.255.0      131.234.223.0
Podemos reparar que temos unicamente endereços IP neste ficheiro. Não é possível utilizar o nome dos hosts.

Agora podemos criar a base de dados NIS utilizando o comando ypinit. Por defeito (definido no Makefile) ele ira ler os fricheiros de /etc e escrever no /var/yp. Os ficheiros que irão na nossa base de dados serão /etc/passwd, /etc/group, /etc/hosts, /etc/networks, /etc/services, /etc/protocols, /etc/netgroup e /etc/rpc.

A opção -m permita-lhe inicializar o servidor com "raw data" (-m para mestre), a opção -s copia a base de dados do mestre para o escravo (-s como escravo).

No Charly inicializamos a nossa base de dados da seguinte forma:

root@charly >> /usr/lib/yp/ypinit -m

Chegando a este ponto, já construimos a lista dos hosts que irão correr os servidores NIS.
  Localhost esta na lista dos servidores NIS. nbsp; Continua a adicionar
O nome de os outros hosts, um por linha.  Depois de introduzir a
lista, faça <control D>.
        next host to add:  localhost
        next host to add:  iron1
        next host to add:  iron2
        next host to add:  iron3
        next host to add:
A actual lista de servidor NIS, fica da seguinte forma:

localhost
iron1
iron2
iron3

Is this correct?  [y/n: y]  y
We need some  minutes to build the databases...
Building /var/yp/bosley/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/bosley'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
Updating shadow.byname...
# shadow publickey # networks ethers bootparams printcap \
# amd.home auto.master auto.home passwd.adjunct
gmake[1]: Leaving directory `/var/yp/bosley'

E já esta. A base de dados esta pronta :). Para cada um dos servidores escravos o commando ypinit tem de ser executado:
root@iron3 >> /usr/lib/yp/ypinit -s charly
Para testar o sistema utiliza um dos servidores como cliente e executa a partir deste ultimo um pedido:
root@iron3 >> ypcat passwd mulder:x:500:100::/home/mulder:/bin/csh scully:x:501:100::/home/scully:/bin/bash
Pode ver igualmente que as shadow passwords estão a funcionar. Temos um "x" onde deveriam estar as passwords :)
Instalação de um servidor NIS
  1. Inicializar o portmap
  2. Definir o nome do dominio NIS
  3. Preparar os ficheiros de configuração do servidor NIS: /etc/ypserv.conf
  4. Executar o demonio ypserv
  5. Definir os maps no /var/yp/Makefile
  6. Definir os direitos de acesso para o servidor NIS no /var/yp/securenets
  7. Criar uma base de dados mestre utilizando o comando ypinit -m
  8. Criar uma base dados escrava utilizando o comando ypinit -s <servidor mestre >

Actualizar a base de dados NIS

Logo que haja uma alteração nos maps (por exemplo mais um servidor ou utilizador) deve-se actualizar a base de dados de NIS.

Para adicionar um novo servidor escravo, executa o comando
/usr/lib/yp/ypinit -s charly
no novo servidor e adiciona o nome no ficheiro /var/yp/ypservers no servidor mestre.

Se adicionar um novo utilizador varios maps serão alterados (passwd, shadow, alias, etc ...).

Depois dos maps terem sido alterados deve simplesmente executar make no /var/yp/ no servidor mestre. Isto ira actualizar a base de dados e colocar os dados nos escravos (utilizando yppush).

O programa rpc.ypxfrd pode acelerar a transacção entre o mestre e escravo copiando unicamente os dados do mestre em vez de os recriar no escravo. rpc.ypxfrd deve de iniciar ao mesmo momento que ypserv e unicamente no mestre. Estre programa só é necessario se tiver grandes maps.

Algumas dicas

Toda a gente sabe que o NIS não é muito seguro. Mas apesar de tudo os seus serviços são muito uteis quando aumenta a sua rede para mais de um host. Portanto, deve de implementar medidas adicionais de segurança.

Como existem passwords que são fáceis de adivinhar existem também nomes de dominios NIS previsíveis. Os candidatos óbvios são nomes de maquinas e é possivel testar o dominio NIS com ypwhich.

O nome do dominio NIS esta visivel en varios lugares, especialmente na directoria /var/yp e nas suas subdirectorias. Ninguêm pode ter os direitos de leitura excepto o root e não pode ser exportado via NFS.

Não magoa utilizar tcp_wrapper em complemento ao /var/yp/securenets para controlar o processo do portmap.

É também uma vantagem o facto de não ter um encaminhamento por defeito no servidor NIS e, utilizar unicamente encaminhamentos estaticos para os clientes e os servidores escravos. Dessa forma o servidor não responde a pedidos que vêm de hosts desconhecidos.

Regras de firewall no router são medidas muitas eficientes para controlar acessos nos servidores NIS.

Essas medidas de segurança não aumentam a segurança no NIS em si mesmo mas sim a infrastrutura à volta dele. Dependentemente destes problemas o NIS é uma ferramente valiosa.

Documentação

  1. NIS-HOWTO : como todos os HOWTOs documentação muita boa e muita completa
  2. http://www.suse.de/~kukuk/ : Funciona com NIS e NIS+. A sua pagina contêm varias FAQs
  3. O Network Administrators' Guide que podemos encontrar em http://www.linuxdoc.org/LDP/nag