Yellow Pages 2 : Do lado do cliente
ArticleCategory:
System Administration
AuthorImage:
TranslationInfo:
Original in fr Frédéric Raynal
fr to pt Patrick Carpalhoso
AboutTheAuthor:
Frederic Raynal prepara uma tese em informática no
INRIA. Ele gosta também ler (tanto Tolkien como
Balzac) e ouvir musica (de Mozart a Philip Glass e de Led Zeppelin a Massive
Attack passando por Björk e Boris Vian, mas evitando cautelosamente o rap, a
techno e outros ruídos ;-)
Abstract:
O artigo anterior era uma introdução aos conceitos girando a
volta das yellow pages (YPs). Neste artigos iramos ver como configurar o
cliente, um exemplo pratico de funcionamento do cliente e uma apresentação das
diferentes ferramentas que vem juntas. Por fim, veremos um pouco o NIS+
ArticleIllustration:
ArticleBody:
Introdução
O lado cliente dos serviços ligados as yellow pages é baseado
essencialmente sobre o demónio ypbind :
ele emite os pedidos para o servidor das YPs. Em primeiro veremos ao pormenor o
seu funcionamento e explicaremos como configura-lo. Depois veremos também como
funciona o protocolo NIS. E na ultima parte deste artigo mostrara as diferentes
ferramentas presentes no lado do cliente das YPs (as yp-tools).
Configurar o seu cliente NIS
A única coisa a fazer para por a funcionar
um cliente NIS numa maquina é de executar o demónio ypbind.
ypbind
ypbind estabelece uma ligação entre o
cliente e o servidor NIS (to bind significa, entre outra coisa, ligar ou atar em
inglês). Essa ligação é visível na directoria /var/yp/binding1
pelo o ficheiro convencional chamado domainname.version. A única versão
actualmente suportada é a versão 2. Então se o nome do meu domínio NIS é
"messie", o ficheiro sera messie.2
O programa ypbind pertence ao
super-utilizador (i.e. root), ele deve de estar então no /sbin, ou no
/usr/sbin.
Quando é executado, ypbind vai
buscar as suas instruções no ficheiro
/etc/yp.conf. As entradas nesse ficheiro são :
- domain nisdomain server hostname : o cliente dirige-se ao
hostname para o domínio nisdomain ;
- domain nisdomain broadcast : o cliente faz um broadcast sobre
a rede local para o que diz respeito ao domínio nisdomain ;
- ypserver hostname : o cliente dirige-se directamente ao
hostname para o domínio local. Nessa configuração o endereço IP do servidor
tem de estar no ficheiro /etc/hosts.
Se esse ficheiro de configuração esta incorrecto ou não existe, ypbind broadcast2
sobre toda a rede local a pesquisa de um servidor NIS para o domínio local.
Algumas operações básicas permitam de verificar que ypbind esta correctamente configurado.
- criar o seu ficheiro /etc/yp.conf ;
- verificar que portmap funciona
(ps aux | grep portmap). Se não for o caso, executa-lo. Esse programa
associa as ports TCP/IP (ou UDP/IP) do computador aos programas. A
inicializações de um servidor RPC, este assinala ao portmap as portas que ele escuta e
os números dos programas que ele é susceptível de executar. Quando um cliente
faz um pedido RPC para um numero de programa, ele contacta em primeiro
portmap para saber a porta
para a qual os pacotes RPC devem ser enviados. Como o descreve o funcionamento
anterior, é então necessário que portmap
seja inicializado antes
ypbind ;
- criar o directório /var/yp ;
- executar ypbind ;
- utilizar o comando rpcinfo para se assegurar que ypbind funciona correctamente :
- "rpc -p localhost" deveria dar :
program |
vers |
proto |
port |
|
100000 |
2 |
tcp |
111 |
portmapper |
100000 |
2 |
udp |
111 |
portmapper |
100007 |
2 |
tcp |
637 |
ypbind |
100007 |
2 |
udp |
639 |
ypbind |
ou
program |
vers |
proto |
port |
|
100000 |
2 |
tcp |
111 |
portmapper |
100000 |
2 |
udp |
111 |
portmapper |
100007 |
2 |
udp |
758 |
ypbind |
100007 |
1 |
udp |
758 |
ypbind |
100007 |
2 |
tcp |
761 |
ypbind |
100007 |
1 |
tcp |
761 |
ypbind |
ou então
- "rpcinfo -u localhost ypbind" tem de mostrar :
program 100007 version 2 ready and waiting |
ou
program 100007 version 1 ready and waiting |
program 100007 version 2 ready and
waiting |
em função da versão de ypbind. A mensagem importante é
aquela sobre a versão 2.
Agora que ypbind funciona correctamente, a vossa maquina
passou a cliente NIS. Você já pode utiliza-lo para efectuar pedidos a vosso
servidor. Por exemplo, "ypcat passwd.byname" renvio todas as palavras-chave,
ordenado por nome de utilizador presente na map correspondente.
Ultimos detalhes
Alguns ficheiros devem ainda ser ligeiramente alterados
para que as YPs funcionam de maneira eficaz :
- /etc/host.conf : adicionar "nis" para a pesquisa dos hosts ;
- /etc/passwd : é necessário adicionar a linha
+::::::
Isso autoriza todas as
pessoas presentes na map do servidor a conectar-se sobre o cliente.
Podemos afinar essas autorizações com a ajuda dos símbolos + e - para autorizar
ou proibir o acesso ao cliente. Por exemplo, para proibir o utilizador
guest, é necessário adicionar a linha
-guest::::::
Os campos que não
desejamos para modificar devem ficar vazios. Todavia podemos sobrecargar
:
+moi::::::/bin/ksh
O utilizador "moi" utilizara ksh em vez do seu
shell habitual (definido no /etc/passwd do servidor NIS).
Ultimo ponto
importante, NIS suporta perfeitamente a utilização das netgroups3
+@sysadmins:::::::
autorizara
as conexões dos membros do netgroup sysadmin.
- /etc/group (e/ou /etc/shadow para algumas versões da libc) : como
para /etc/passwd, é necessário adicionar
+:
Podemos igualmente brincar com as
autorizações sobre os grupos com a ajuda de + et -.
- /etc/nsswitch.conf : o Network Services Switch permita de definir a ordem
na qual as informações devem ser pesquisadas, da mesma maneira que
/etc/host.conf. As escolhem são entrem :
nisplus |
pesquisar via NIS+ (i.e. NIS versão 3, uma versão segura de
NIS) |
nis |
pesquisa via NIS (NIS version 2, alias as YPs |
dns |
pesquisa via um DNS (Domain Name Server) |
files |
pesquisar nos ficheiros locais |
db |
pesquisar na base /var/db |
|
Após cada opção de pesquisa, podemos utilizar
um comando da forma
`[' ( `!'? STATUS `=' ACTION )+ `]'
com :
- STATUS => "success" ou "notfound" ou "unavail" ou "tryagain"
- ACTION => "return" ou "continue"
Em função da libc
utilizada, as pesquisas não são todas as mesmas. Por exemplo, as shadow
passwords não são geradas com a libc5. Os serviços suportados sobre uma
maquina utilizam uma libraria /lib/libnss_SERVICE.so.X Para mais informação
sobre esse serviço, ver a pagina man de nsswitch.conf
O que diz respeito
as shadow passwords via NIS, o seu suporte só é possível com a glibc2.x.
É então necessário pensar a especificá-lo no ficheiro nsswitch.conf
O protocolo NIS
Agora que o nosso cliente NIS esta completamente operacional, vamos ver como ele
faz para recuperar as informações que ele necessita.
Quando um cliente necessita uma informação numa map das YPs, ele
começa por pesquisar no servidor YP. Para o encontrar, ele abre uma conexão TCP
para o ypbind local. O cliente
informe-o do domínio (falamos aqui do domínio NIS) onde ele pertence ypbind broadcast via a função RPC
YPPROC_DOMAIN_NOACK. Os servidores NIS que servem esse domínio respondem com um
ACK, os outros fazem de orelhas surdas.
ypbind reenvia ao cliente o resultado
da pesquisa (falhanço ou sucesso) e, se ele a tiver, o endereço do primeiro servidor
YP que lhe respondeu. O cliente pode agora fazer o pedido a esse servidor,
composto do domínio, da map e da chave.
Esse protocolo é relativamente lente porque ele utiliza as conexões RCP. Ainda mais, ele
utiliza também muitas sockets. Para evitar essa situação, ypbind não espera que o cliente o contacta
para encontrar os servidores. Na realidade ele guarda no ficheiro
/var/yp/binding/. uma lista de servidor para cada domínio
e verifica regularmente que eles funcionam correctamente.
As yp-tools
Esta secção apresenta muito rapidamente algumas ferramentas do package yp-tools.
Para saber mais, cada uma das instruções dispõem de uma página man muita detalhada ;-P
- domainname : reenvia (ou fixa segunda a opção) o nome do domínio NIS ;
- ypcat : mostra os valores de todas as chaves de uma map NIS ;
- ypmatch : mostra os valores de uma ou varias chaves de uma map NIS ;
- ypset : permite de definir a que servidor NIS ypbind
tem de se conectar ;
- ypwhich : reenvia o nome do servidor NIS. Com o argumento -m seguido do nome
do map, reenvia o nome da map master.
- yppoll : pega numa map em argumento e reenvia o nome do domínio e o servidor master.
Algumas palavras sobre NIS+
Ao longo deste artigo, em nenhum momento abordamos uma variante de NIS, a saber NIS+.
Numa rede, NIS causa enormes problemas em termo de segurança. Por exemplo, se o servidor NIS
esta mal protegido e que uma pessoa mal intencionada descobre :
- o nome do domínio NIS
- o endereço IP de um cliente NIS
só lhe resta então fazer passar-se
por a maquina com o IP do cliente e enviar um ypcat passwd
para recuperar de uma forma descansada o ficheiro das palavras-chave :-(
NIS+ ofereça uma camada suplementar de segurança integrando um protocolo
de autentificação baseado sobre uma troca de chaves e suportando a numeração dos dados.
Os dados são armazenados em tabelas, que são por elas colocadas em directorias diferentes.
Cada coluna de uma tabela dispõem de um qualificativo definindo, por exemplo, se os dados são
"case sensitive", em formato binário, etc ...
A estrutura descrita permita simplesmente gerir os direitos de acceso sobre as directorias
e as tabelas, mas também sobre as colunas das tabelas. Isso implica que podemos proibir o
acesso a tabelas das palavras-chaves a todos os utilizadores que não são autenticados
no servidor NIS+, mas autorizar a todos os utilizadores certificados a aceder a toda a
tabela das palavras-chaves, excepto os campos "passwd". Só o proprietário do campo "passwd"
podera vê-lo.
Existem 4 niveis de direitos :
- Nobody (ninguém) : o utilizador não é autenticado ;
- Owner (proprietário) : o utilizador é autenticado e ele é o proprietario ;
- Group (groupe) : o utilizador é autenticado e ele esta no grupo para esse
objecto ;
- World (mondo) : o utilizador é autenticado mas ele não é nem
proprietatio, nem no grupo para esse objecto.
Nessa configuração, root é um utilizador como os outros ... enfim, quase ;-)
Se ele não tiver as permissões adequadas, ele não pode mais ver as palavras-chaves
dos outros utilizadores. Ele não poderá mais se autentificar como um outro utilizador
... mas, ele poderá sempre fazer descansadamente um su :)
Os dados que transitam pela a rede não serão cryptados, a exepção das
palavras-chaves : nenhuma palavra-chave transita em claro sobre a rede.
NIS+ é uma ferramenta potente ... mas complicado a implementar. Como
Thorsten Kuduk (ele trabalha sobre NIS, NIS+, NIS-HOWTO ... enfim, uma pessoa
que sabe do que se trata ;-) escreve :
"A escolhe emtre NIS e NIS+ é
fácil de fazer : utiliza NIS quando não tem necessidade de segurança importante.
NIS+ é bem mas problemático a administrar (particularmente do lado do servidor)"
Conclusão
Agora sabemos como inserir uma nova maquina numa rede existente e tendo
um servidor NIS. Veremos, no próximo episódio, como configurar o servidor
e o seu funcionamento.
Footnotes
- ... var/yp/binding1
- As localizações dos ficheiros são raramente especificadas porque elas varient
de uma distribuição a outra. Por exemplo, para ter um demónio ypbind inicializado ao arranque : /etc/init.d/nis,
/sbin/init.d/ypclient, /etc/rc.d/init.d/ypbind, /etc/rc.local
- ... broadcast2
- isso significa que a mensagem é emitida sobre todo a sub-rede sem
destinatário especifico com um endereço do tipo X.Y.0.0
- ... netgroup3
- O ficheiro /etc/netgroup define os grupos compostos dos triplets (host,
user, domain) servem para verificar as permissões quando se utiliza os
comandos "a distancia" (remote logins, shells ou mount por exemplo). Ver a
página man para mais pormenor.