você está aqui: Home  → Arquivo de Mensagens

Servidor NFS no OpenBSD

Colaboração: André Luiz Facina

Data de Publicação: 04 de September de 2008

NFS, Network File System, é usado para compartilhar o sistema de arquivos através da rede.

Essa dica seguirá os passos para uma configuração simples do NFS. O exemplo detalha um servidor na rede LAN, com os clientes acessando o NFS.

Não falarei sobre a segurança no NFS presumindo que você já tenha instalado o packet filter ou outra proteção de firewall, prevenindo assim acessos de fora da rede.

Se você precisar liberar o NFS para fora da rede, sugiro que utilize algum método de acesso via VPN. De outra maneira, pessoas poderão capturar o seu tráfego NFS. Poderiam também forjar o endereço IP que está autorizado a acessar o servidor NFS.

Configurando um servidor NFS

Esses serviços devem estar ativados e rodando no servidor:

  • portmap
  • mountd
  • nfsd

Por padrão cada um deles está desativado no OpenBSD. Adicione as seguintes linhas em /etc/rc.conf.local para habilitá-los.

  portmap=YES
  nfs_server=YES

O próximo passo é colocar a lista de arquivos que serão disponibilizados para a montagem pelos clientes.

Nesse exemplo, temos um servidor NFS com o endereço IP 10.0.0.1, que compartilha apenas para os clientes que estão na mesma subrede. Tudo isso é configurado no arquivo /etc/exports.

Nesse arquivo você coloca as pastas que deseja tornar acessíveis via NFS e define quem pode acessá-las. Há muitas opções que podem ser usadas em /etc/exports. Para o nosso exemplo de servidor, o arquivo de configuração do /etc/exports se parecesse com esse:

  ## NFS exports Database
  # See exports(5) for more information. Be very careful, misconfiguration
  # of this file can result in your filesystems being readable by the world.
  /work -alldirs -ro -network=10.0.0 -mask=255.255.255.0

Isso significa que a pasta /work foi disponibilizada via NFS. A opção -alldirs, especifica que os clientes serão capazes de montar em qualquer ponto dentro de /work, bem como o próprio /work. Por exemplo:

  1. se dentro de /work tiver um diretório chamado /work/monday, os clientes poderiam montar /work e ter acesso a todos os arquivos e subdiretórios;

  2. ou eles poderiam montar /work/monday e ter acesso apenas aos arquivos e diretórios contidos nele.

    A opção -ro especifica que será concedido aos clientes apenas acesso de leitura.

    Os dois últimos argumentos especificam que apenas os clientes que estão na rede 10.0.0.0 e usando a máscara 255.255.255.0 serão autorizados a montar pasta. Isso é importante para servidores que são acessados por diferentes redes.

    Agora você pode iniciar o serviço ou reiniciar (após habilitá-los com as opões acima) ou executá-los manualmente.
      # /usr/sbin/portmap
      # echo -n >/var/db/mountdtab
      # /sbin/mountd
      # /sbin/nfsd -tun 4
    
    Argumentos passados para o nfsd para habilitá-lo com conexões TCP ( -t ) e UDP ( -u ) e habilitá-lo com 4 instancias ( -n ). Você deve setar apropriadamente o número de instâncias do NFS, para lidar com o número máximo de clientes.

    Agora está pronto para montar o sistema de arquivos a partir dos clientes.

    Lembre-se: se você fizer alterações em /etc/exportfs enquanto o NFS estiver rodando, será preciso reiniciar o serviço. Para isso basta um sinal de HUP e as alterações entrarão em vigor:

      # kill -HUP `cat /var/run/mountd.pid`
    

    ==Montando o sistema de arquivos NFS==

    O sistema de arquivos NFS pode ser montando nos clientes, sem a necessidade de qualquer serviço ou daemon, e também como qualquer outro sistema de arquivos.

    O NFS deve ser montando com o comando mount, ou mais especificamente com o comando mount_nfs.

    Para montar o sistema de arquivos /work no computador 10.0.0.1 e na pasta /mnt, siga o exemplo abaixo. Note que você não precisa utilizar o endereço ip, se estiver utilizando um servidor de DNS (named ou bind) por exemplo:

      # mount -t nfs 10.0.0.1:/work /mnt
    

    Para que o NFS seja montando no boot, adicione a seguinte linha no /etc/fstab:

      10.0.0.1:/work   /mnt   nfs   rw   0 0
    

    É importantíssimo que você use 0 0 no final dessa linha, para que o sistema não tente usar o fsck na inicialização.

    Outra opção de segurança, tal como o noexec, nodev,nosuid também devem ser usadas se for preciso:

      10.0.0.1:/work   /mnt   nfs   rw,nodev,nosuid   0 0
    

    Dessa forma, nenhum dispositivo ou programa com setuid bit no servidor NFS possa subverter as medidas de seguranças nos clientes NFS.

    Se você não for executar programas nos clientes NFS, pode-se adicionar a opção noexec.

    Quando acessar um ponto de montagem NFS com o usuário root, o servidor automaticamente mapeará o root para o usuário e grupo nobody . Isso é importante quando se leva em conta as permissões de arquivos. Por exemplo, ter um arquivo com essas permissões:

      -rw----- 1 root wheel 0 Dec 31 03:00 _daily.B20143
    

    Se esse arquivo foi compartilhado com o NFS e o usuário root tentar acessar esse arquivo a partir de um cliente NFS, o acesso será negado.

    Isso ocorre por que o servidor usa as credenciais do usuário nobody quando o usuário root tenta acessar o arquivo. Uma vez que nobody não tem permissão de acessar o arquivo, o acesso é negado.

    ==Checando o status do NFS== A fim de verificar se o NFS está funcionando corretamente e que todos os daemons estejam registrados em RCP, use o rpcinfo:
      # rpcinfo -p 10.0.0.1
      program vers proto port
      100000 2 tcp 111 portmapper
      100000 2 udp 111 portmapper
      100005 1 udp 633 mountd
      100005 3 udp 633 mountd
      100005 1 tcp 916 mountd
      100005 3 tcp 916 mountd
      100003 2 udp 2049 nfs
      100003 3 udp 2049 nfs
      100003 2 tcp 2049 nfs
      100003 3 tcp 2049 nfs
    
    Em condições normais de uso, existem outros utilitários que permitem ver o que está acontecendo com o NFS. Um deles é o showmount, que permite visualizar o que está montando atualmente e quem está montando o NFS.

    Há também o nfsstat, que mostra mais detalhes e estatísticas.

    Para utilizar o showmount tente /usr/bin/showmount -a host. Por exemplo:
      # /usr/bin/showmount -a 10.0.0.1
      All mount points on 10.0.0.1:
      10.0.0.37:/work
    
    A saída mostra que o cliente 10.0.0.37 tem montando o /work que foi exportado a partir do servidor 10.0.0.1.

OpenBSD -> ( Free, Functional & Secure )


Veja a relação completa dos artigos de André Luiz Facina

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script