Version 15 (modified by cristianocampos, 13 anos atrás) (diff)

--

Servidor de Arquivos/Autenticação? baseado em NIS + NFS + Samba

1 - Introdução

Não tentaremos aqui fazer um tutorial completo sobre o assunto, mesmo porque existem muitos na internet, completos e bons. Buscamos aqui juntar conteúdo ao COLAB, com o intuito de termos em um mesmo ponto soluções sobre todas as nossas necessidades. Espero também que, este documento estando aqui, possa crescer, com o apoio da comunidade.

Buscaremos descrever os serviços necessários, as configurações devidas no servidor, e nas estações, para o funcionamento de uma rede com autenticação centralizada, guarda de arquivos no servidor (de forma a facilitar a operação de salvamento/backup dos dados dos usuários), estando todos estes serviços funcionando de forma transparente ao usuário final. Para tanto, antes descreveremos, sucintamente, as funções de cada serviço que deve ser agregado ao servidor para prover as funcionalidades necessárias ao seu perfeito uso.

NIS: O principal objetivo do serviço é manter todas as contas dos usuários sincronizadas entre servidor e todas as máquinas existentes no domínio, de forma que o usuário não tenha que guardar vários nomes de usuário/senhas e que possa mover-se de estação em estação sem nenhum inconveniente.

Originalmente, NIS era chamado de YP (Yellow Pages ou Páginas Amarelas), que ainda é utilizado para referenciá-lo. Infelizmente, “páginas amarelas” é uma marca registrada da British Telecom™, e portanto a Sun®, desenvolvedora do NIS, descartou este nome. Entretanto, estes nomes são utilizados nos comandos e pacotes utilizados para a configuração do servidor, tais como ypserv e ypbind.

O NIS mantém as informações da base de dados em arquivos chamados mapas, que contêm pares formados por chave-valor. Um exemplo deste par é o nome de usuário mais a senha de acesso criptografada. Os mapas são armazenados em uma máquina que está executando o NIS, da qual os clientes podem recuperar as informações através de chamadas RPC.

NFS: Acrónimo para Network File System. Ele tem por função permitir o compartilhamento de pastas de uma determinado equipamento (Servidor) para outros (Estações) através de uma rede. Através dele o usuário pode a acessar suas pastas, gravadas em um servidor remoto, como se fossem arquivos locais.

SAMBA: O Samba é um servidor que permite a comunicação entre máquinas Windows e Linux. Em nosso caso o samba proverá as estações baseadas em windows a possibilidade de acesso aos arquivos salvos no servidor bem como a autenticação através do servidor Linux. Existem inúmeras funcionalidades que não serão abordadas aqui, e que vale uma pesquisa para possíveis implementações, já que buscamos aqui um texto simples e que permita a montagem/configuração rápida de um servidor de autenticação/arquivos em rede Linux/Linux/Windows?.

Hardware: Não sei realmente qual o hardware necessário para rodar todo este conjunto de serviços de forma a permitir boa performance, então descreverei aqui o hardware existente na Câmara Municipal de Timóteo (CMTimóteo) que tem possibilitado boa performance:

Placa Mãe: A7V600-X
Processador: Athlon Xp 2.4 Ghz
Memória RAM: 2,0 Gb
VGA: 3D Phantom XP3800 – 32 Mb – Pine
Controladora SCSI: Ultra320 SCSI Card – Lsi Logic
Disco Rígido:

  • HD SCSI Seagate – 74 Gb – SO
  • HD SCSI Seagate – 74 Gb – Arquivos de usuários
  • HD Samsung IDE – 80 Gb – Funções auxiliares

Backup: Fita DAT 20/40

2 - Instalação/Configuração?:

2.1 – Instalação do Sistema Operacional no Servidor:

Na CMTimóteo usamos Ubuntu 6.06 LTS, em sua versão Desktop CD, para a instalação do sistema operacional do Servidor. Como não existe nada de novo na instalação do Ubuntu, ainda mais tratando-se de uma versão usada normalmente em desktop's não entraremos aqui em detalhes sobre este passo.

2.2 – NFS

Os seguintes daemons são necessários para o funcionamento do NFS:

nfsd O daemon NFS, que atende as requisições dos clientes
mountd O daemon de montagem do NFS
portmap O daemon portmapper permite que clientes descubram em que porta o servidor esta utilizando
nfsiod Este daemon é opcional e roda no lado do cliente. O nfsiod atende às solicitações do servidor NFS. Apesar de sua existência não obrigatória para a operação correta do NFS ele aumenta o desempenho.

Para o funcionamento do NFS em nosso servidor instalamos o pacote nfs-kernel-server (já que o ubuntu é uma distribuição derivada do debian), como segue:

$ sudo -s
Password: *****
# apt-get install  nfs-kernel-server
......

Após a instalação do pacote e suas dependências seguiu-se a configuração do serviço. Para a configuração do serviço basta editar o seguinte arquivo:

/etc/exports: Este arquivo especifica quais sistemas de arquivos o NFS deve exportar, quais máquinas poderão ter acesso a ele na rede e que permissões elas terão (somente leitura, leitura e escrita e etc) sobre este sistema de arquivos. Existem outras opções que poderão ser usadas aqui.

# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
/home            10.3.131.*(rw,sync)
#

No caso estamos exportando a pasta /home, para as máquinas com IP 10.3.131.[1-255], permitindo leitura e gravação nesta pasta.

Após a edição do arquivo basta “startar” o serviço, e para tanto:

# cd /etc/init.d
# ./nfs-kernel-server start
......

Vale lembrar que este tutorial esta tomando por base o Ubuntu, mas caso você esteja realizando a instalação em um sistema operacional que não seja derivado do debian para “startar” o serviço você derá executar os seguintes comandos:

# cd /etc/init.d
# ./portmap start
.....
# ./nfs start
......

Para a configuração do cliente NFS basta instalar o pacote nfs-kernel-server (conforme já foi explicado) e proceder com a montagem do sistema de arquivos. Para tanto execute:

# mount -t nfs <IP do Servidor>:/Caminho/Pasta_Servidor /Ponto_de_Montagem
#

IP do Servidor: IP dá máquina em que foi configurado o servidor NFS
/Caminho/Pasta_Servidor: Uma das pastas relacionadas no arquivo /etc/exports no servidor NFS. No nosso caso /home
/Ponto_de_Montagem: O local em que deseja-se montar a pasta do servidor. No nosso caso, para que a pasta /home seja acessada de forma transparente pelo usuário, usaremos como ponto de montagem a pasta /home da estação.

Para automatizar o processo de montagem da pasta durante o boot basta editar o arquivo /etc/fstab e inserir nele a linha correspondente à pasta em questão, conforme exemplo abaixo:

# cat /etc/fstab
# /etc/fstab: static file system information.
#
# <file system>  <mount point>   <type>        <options>       <dump>  <pass>
proc             /proc            proc         defaults        0       0
/dev/hdd2        /                reiserfs     notail          0       1
/dev/hdd1        none             swap         sw              0       0
/dev/hdc         /media/cdrom0    udf,iso9660  user,noauto     0       0
10.3.131.3:/home /home            nfs          defaults        0       0
#

2.3 – NIS

Para o perfeito funcionamento do NIS os seguintes pacotes devem estar instalados no servidor:

  • ypserv
  • ypbind-mt
  • yp-tools

E para os clientes devem estar instalados

  • ypbind-mt
  • yp-tools

Para tanto no servidor execute (no ubuntu):

$ sudo -s
# Password: ******
# apt-get install nis
.....

No ubuntu instalamos apenas este pacote porque o mesmo já traz todos os daemons necessários a sua execução, conforme podemos ver pelo comando:

# apt-cache search nis
......
nis - Clients and daemons for the Network Information Services (NIS)
......

Para a configuração do NIS seguimos os seguintes tópicos:

  • Edite o arquivo /etc/defaultdomain e insira nele o nome do domínio que irá usar para sua rede
  • Você pode também definir o nome do domínio a usar com o seguinte comando:
        # domainname <Nome_do_Domínio>
    
  • E após a alteração do nome você pode conferir usando o comando:
        # domainname
        nome_do_domínio   # como resposta
        #
    
  • Edite o arquivo /etc/default/nis e altere a seguinte linha:
NISSERVER=false

para:

NISSERVER=master
  • Reinicie o NIS:
            # cd /etc/init.d
            # ./nis restart
            ......
    
  • Após "startar" o NIS devemos “popular” a sua base de dados com o seguinte comando:
    # /usr/lib/yp/ypinit -m
    

A primeira pergunta diz respeito aos servidores NIS escravos. Na configuração com somente um servidor digite Ctrl+d e confirmw com “y”.

  • Com a execução do script será criado os mapas que ficarão armazenados no diretório /var/yp/<nome_do_domínio>
  • A partir deste ponto o servidor NIS já esta em funcionamento, e qualquer alteração realizada na base de dados de usuários do servidor devemos refazer os mapas do NIS, de forma a disponibilizar as informações para as estações. Para tanto executamos (após a criação de usuários/alteração de senha/criação de grupos)
    # cd /var/yp
    # make
    .......
    

Para a configuração o cliente NIS seguimos os seguintes passos:

  • Primeiro instalamos o NIS:
           $ sudo -s
           # Password: ******
           # apt-get install nis
           .....
    
  • Editamos o arquivo /etc/yp.conf e adicionamos a seguinte linha:
    ypserver <endereço_ip_servidor>
    
  • Depois editamos o arquivo /etc/nsswitch.conf e alteramos as seguintes linhas, deixando-as conforme abaixo:
    passwd:   files nis
    group:    files nis
    shadow:   files nis
    
  • Altere o arquivo /etc/defaultdomain informando o nome do seu domínio.
  • Após as alterações é necessário reiniciar o NIS.
    # cd /etc/init.d
    # ./nis restart
    .....
    
  • Para checar se as modificações ocorreram de forma satisfatória podemos verificar se o /etc/passwd do servidor NIS esta disponível na estação, executando o seguinte comando:
# getent passwd
.......

Este comando deverá listar o conteúdo do /etc/passwd do servidor e não da estação.

2.4 – SAMBA

Na instalação do SAMBA devemos instalar o pacote no servidor:

# apt-get install samba
.....

Uma vez instalado o pacote devemos editar o arquivo /etc/samba/smb.conf. Já que no samba existem muitas opções, e que seria demasiadamente longo a explicação de todos, será listado abaixo um smb.conf e caso ocorra a necessidade de novas funções basta fazer uma busca na internet que será encontrado vários tutoriais sobre o assunto.

/etc/samba/smb.conf

[Global]
log file = /var/log/samba/log.%m
smb passwd file = /etc/smbpasswd
admin users = administrador                      # Administrador do domínio
local master = yes
domain master = yes
domain logons = yes
#unix password sync = yes
null passwords = no
load printers = yes
name resolve order = host wins bcast
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
hosts equiv = /etc/hosts
#hostname lookups = yes
username map = /etc/smbusers
encrypt passwords = yes
hosts allow = 10.3.131.0/24                      #
logon drive = c:
logon script = logon.bat
logon path = \\%L\profiles
logon home = \\%L\profiles
password level = 0
wins support = true
dns proxy = no
netbios name = samba
server string = Servidor de Arquivos PDC
remote announce = 10.3.131.0                                   #
workgroup = camara                                                   #
os level = 65
debug level = 1
printcap name = /etc/printcap
security = user
max log size = 100
domain logons = yes
domain logons = yes
#-----------------------------------SHARES-------------------------------#
[netlogon]
    writeable = yes
    path = /home/netlogon
    force create mode = 0777
    create mask = 0777
    comment = Network Logon Service
    public = yes

[profiles]
    comment = %u
    path = /home/%u
    public = yes
    writable = yes
    browseable = yes
    printable = no
    create mask = 0777
    force create mode = 0777

[home]
    comment = Home
    path = /home
    public = yes
    writable = yes
    browseable = yes
    printable = no
    create mask = 0777
    force create mode = 0777

[usuarios]
    comment = Arquivos Pessoais
    path = /home/usuarios/%u
    public = no
    writable = yes
    browseable = yes
    printable = no
    create mask = 0777
    force create mode = 0777

[grupos]
    comment = Pasta do grupo
    path = /home/grupos/%g
    public = no
    writable = yes
    browseable = yes
    printable = no
    create mask = 0777
    force create mode = 0777

[Publico]
    path = /home/publico
    public = yes
    writable = yes
    browseable = yes
    printable = no
    create mask = 0777
    force create mode = 0777
    force directory mode = 0777

O arquivo listado acima é uma cópia (não 100% exata) do arquivo usado na CMTimóteo e nele estão mapeados a estrutura de rede com as pastas:

  • /home/<usuário>
  • /home/usuarios/<usuário>
  • /home/grupos/<grupo>
  • /home/publico

Para o mapeamento das pastas no windows criamos o script logon.bat em /home/netlogon com o seguinte conteúdo:

net use k: \\samba\usuarios
net use l: \\samba\grupos
net use m: \\samba\Publico

3 – Dicas Finais

Antes de colocar em prática não deixe de considerar o seguinte:

  • Não deixe de ler o tópico estrutura de rede é mesmo muito importante para a segurança da rede;
  • Não se esqueça de criar a pasta /home/netlogon e criar a rotina logon.bat dentro dela;
  • Dê permissão de leitura/execução para dono/grupo/outros para a pasta /home/netlogon;
  • Para cadastrar um grupo os comandos abaixo devem ser seguidos:
    groupadd <NOME-DO-GRUPO>                              # Cria o grupo de usuário (Setor de trabalho, e etc)
    mkdir /home/grupos/<NOME-DO-GRUPO>                    # Cria uma pasta para salvamento de arquivos comuns ao grupo
    chown root /home/grupos/<NOME-DO-GRUPO>               # Determina um dono para o grupo, não deve ser nenhum dos usuários de acesso normal
    chgrp <NOME-DO-GRUPO> /home/grupos/<NOME-DO-GRUPO>    # Determina o grupo de acesso à Pasta
    chmod 770 /home/grupos/<NOME-DO-GRUPO>                # Dá permissão total a todos os usuários cadastrados no grupo
    
  • Para cadastrar um usuário os comandos abaixo devem ser seguidos:
    useradd -g <NOME-DO-GRUPO> <NOME_DO_USUARIO>                                      # Cria um usuário para um grupo já existênte
    mkdir /home/<NOME-DO-USUARIO> /home/usuarios/<NOME-DO-USUARIO>                    # Cria as pastas do usuário
    chmod 700 /home/<NOME-DO-USUARIO> /home/usuarios/<NOME-DO-USUARIO>                # Determina permissão de acesso apenas ao usuário
    chown <NOME-DO-USUARIO> /home/<NOME-DO-USUARIO> /home/usuarios/<NOME-DO-USUARIO>  # Determina o dono das pastas do usuário
    chgrp <NOME-DO-GRUPO>  /home/<NOME-DO-USUARIO> /home/usuarios/<NOME-DO-USUARIO>   # Determina o grupo das pastas do usuário
    
  • No arquivo /etc/profile (nas estações) altere a linha com o comando umask para umask 000, e isso fará que os arquivos criados pelos usuários tenham permissão de leitura/escrita para dono/grupo/outros. Isto não significa nenhuma quebra de segurança uma vez que as pastas /home/<NOME-DO-USUARIO>, /home/usuarios/<NOME-DO-USUARIO> e /home/<NOME-DO-GRUPO> já tem as permissões necessárias para que apenas os usuários habilitados tenham acesso aos arquivos. Isto é necessário para que os arquivos criados nas pastas /home/<NOME-DO-GRUPO> e /home/publico sejam acessados por todos que tiverem direitos de acesso a elas.

4 – Considerações Finais

Acreditamos que com este texto a equipe da CMTimóteo possa ter ajudo a contribuir para o crescimento da comunidade. Sabemos que existem outras pessoas tão, ou mais capacitadas que nós, mas acreditamos que este documento irá crescer e permitir que criemos padrões de redes cada vez melhores e que permitam assim que possamos prestar melhores serviços a nossos usuários.

Vale salientar por último que devemos atentar para segurança dos dados dos usuários, e que as permissões de pastas é um tópico importante para isto. É um assunto extenso e não cabe neste texto, mas já existem outros tópicos aqui tratando disto. Um deles é o de estrutura de rede já citado anteriormente.

Esperamos que a leitura tenha sido informativa e tenha trazido benefícios a todos, agradecemos o apoio que sempre tivemos da comunidade e reinteramos nossa inteira disposição em auxiliar quando estiver ao nosso alcance.

Cristiano Lage Campos
Analista - Responsável pelo C.P.D.

Luciano Coutinho
Responsável pela Rede

Luciano Taveira
Suporte Técnico

4 – Fontes

Principais fontes de informação usadas para a compilação deste texto em:

http://www.conectiva.com/doc/livros/online/10.0/servidor/pt_BR/ch13s03.html
http://pt.wikipedia.org/wiki/Network_File_System
http://www.openit.com.br/freebsd-hb/network-nfs.html
http://www.guiadohardware.net/artigos/315/
http://focalinux.cipsga.org.br/guia/avancado/ch-s-samba.htm

 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.