Blog de Carlos Eduardo Mota

Servidor NFS no Scientific Linux

Posted on setembro 22, 2011

O NFS (acrônimo para Network File System) é um sistema de arquivos distribuídos desenvolvido inicialmente pela Sun Microsystems, a fim de compartilhar arquivos e diretórios entre computadores conectados em rede, formando assim um diretório virtual. Em outras palavras, o NFS permite que um sistema compartilhe seus diretórios e arquivos com outros sistemas através de uma rede. Usando NFS, os usuários e programas podem acessar arquivos em sistemas remotos quase como se fossem arquivos locais.

O objetivo deste tutorial é a de mostrar passo-a-passo como montar um servidor NFS. Este servidor NFS é de extrema imoprtancia para diversas ferramentas, tais como a implementação do Network Information Services (NIS) e tambem do Linux Virtual Server.

O NFS consiste de, pelo menos, duas partes principais: um servidor e um ou mais clientes. O cliente acessa remotamente os dados armazenados na máquina servidora. Para que isto funcione direito, alguns poucos processos precisam estar configurados e rodando. O servidor precisa ter rodando os seguintes daemons:

  • nfsd - O daemon NFS, que atende requisições dos clientes NFS.
  • mountd - O daemon de montagem NFS, que executa as solicitações que o nfsd(8) lhe passa.
  • portmap/rpcbind - O daemon portmapper permite que clientes NFS descubram qual porta o servidor NFS está utilizando.

Nota: No Scientific Linux 6, o utilitário portmap foi substituído pelo utilitário rpcbind.

Para a instalação do servidor NFS é necessário executar os seguintes passos:

  1. Configurações de compartilhamento NFS.
  2. Definição de restrições de acesso.
  3. Inicialização do serviço NFS.
  4. Montar os diretórios NFS nos computadores clientes.

Requisitos básicos

  • Dois ou mais computadores interligados em rede, que é definida pela network 192.168.20.0/255.255.255.0.
  • Instalação do pacote nfs-utils no servidos NFS e nos clientes, pelo YUM

Passo 1: Configurações de compartilhamento NFS.

Adicionar as pastas que deseja colocar em compartilhamento no arquivo /etc/exports.

vim /etc/exports
 
# dentro do arquivo
/nfsroot    192.168.20.0/255.255.255.0(rw,async)

Dentro das páginas do manual (man exports), é possível realizar o compartilhamento com acesso irrestrito, limitar à computadores da rede privada, dentro do domínio NIS ou a combinação dos anteriores. Há também uma série de opções para definir os modos de compartilhamento e permissões de acesso aos arquivos. Abaixo está listado algumas das opçoes mais usuais.

  • rw - Acesso de leitura e escrita.
  • ro - Acesso somente leitrua.
  • async - Solicitações assíncronas - maior performance e menor segurança dos dados.
  • sync - Solicitações síncronas - mais seguro, porém mais lento.
  • root-squash - Mapeia todos os uids/gids do servidor no cliente, com exceção de root, que é definido como nobody.
  • no-root-squash - Mapeia todos os uids/gids do servidor no cliente, inclusive root.
  • all-squash - Mapeia todos os uids/gids como nobody

Passo 2: Definição de restrições de acesso.

Firewall: Ao invés de desativar o firewall é uma boa idéia configurar o NFS para funcionar com o iptables. Para NFSv3, por padrão, o portmapper atribui para cada serviço de NFS, uma porta dinamicamente em tempo de inicialização do serviço. E neste caso, portas dinâmicas não podem ser protegidas por firewalls. Com isso, precisamos bloquear vários daemons relacionadas com rpcbind / portmap atribuir portas estaticas ou fixas. Daí, é possível definir regras para estas portas na chain INPUT para o tráfego de entrada. Felizmente para NFSv4 isto é bastante simplificado e, em uma configuração básica, a porta TCP 2049 é o único porto de entrada exigido. A porta 111 também é utilizada pelo portmapper/rpcbind.

Dentro do arquivo /etc/sysconfig/nfs, basta descomentar as linhas abaixo para tornar as portas do NFSv3 estáticas.

vim /etc/sysconfig/nfs
 
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020

Adicionar as novas regras no firewall e salvar.

iptables -A[-I] INPUT [num] -s 192.168.20.0/24 -m multiport -p tcp --dport 111,662,875,892,2049,32803 -j ACCEPT
iptables -A[-I] INPUT [num] -s 192.168.20.0/24 -m multiport -p udp --dport 111,662,875,892,2049,32769 -j ACCEPT
service iptables save
service iptables restart

TCP Wrappers: Permite um maior controle para que computadores acessem certos serviços/daemons, diferentemente da utilização isolada de IPTABLES. O sistema irá analisar, nesta ordem, os arquivos /etc/hosts.allow e /etc/hosts.deny. O primeiro arquivo será usado para liberar o acesso ao serviço pela rede e o segundo, para restringir o acesso. Se não houver correspondência em nenhum destes arquivos, o acesso ao serviço será permitido. Deve-se adicionar uma regra com um nome de sub-rede ou de domínio apropriado para o seu ambiente para restringir o acesso permitido. A sub-rede também pode ser especificado como 192.168.20., se desejado ao invés de incluir a máscara de rede.

Configuração de /etc/hosts.allow

vim /etc/hosts.allow
 
# Dentro do arquivo
ALL: localhost
mountd: 192.168.20.0/255.255.255.0

Configuração de /etc/hosts.deny

vim /etc/hosts.deny
 
# Dentro do arquivo
rpcbind:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL

Mais detalhes da configuração de /etc/hosts.allow e /etc/hosts.deny em:

man hosts.allow

SELinux: Deverá ser configurado o acesso remoto a diretórios NFS, atribuindo valores às configurações do SELinux, ao invés de definí-lo como permissivo, ou até mesmo desabilitado. Para isso basta executar um do comandos abaixo, de acordo com as necessidades:

setsebool -P nfs_export_all_rw 1 # Exportar NFS para leitura e escrita
setsebool -P nfs_export_all_ro 1 # Exportar NFS para somente leitura
setsebool -P use_nfs_home_dirs 1 # Exportar diretório diretório /home

Passo 3: Inicialização do serviço NFS.

Habilitar a inicialização automática dos serviços RPCBind e NFS com chkconfig e os inicialize, através deste laço FOR.

for SRVC in rpcbind nfs nfslock;
do
chkconfig $SRVC on;
service $SRVC start;
done;

Se for o caso de precisar adicionar ou remover compartilhamentos NFS, pela edição do arquivo /etc/exports basta executar o comando abaixo para atualizar a tabela de compartilhamentos:

exportfs -a

Para checar a atividade e ver as difermtes versões de NFS (v3 e v4), basra executar o comando abaixo:

nfsstat

Passo 4: Montar os diretórios NFS nos computadores clientes.

Admitindo que o diretório /mnt/nfs será o ponto de montagem do compartilhamento NFS:

Montar compartilhamento via comando mount

mount -t nfs nome_do_servidor:/nfsroot /mnt/nfs

Montar compartilhamento na inicialização do sistema via arquivo /etc/fstab:

vim /etc/fstab
 
# dentro do arquivo
nome_do_servidor:/nfsroot    /mnt/nfs     nfs   users,exec,hard,intr    0  0

Desmontar compartilhamento NFS:

umount /mnt/nfs

Referências:

http://pt.wikipedia.org/wiki/Network_File_System

http://aaronwalrath.wordpress.com/2011/03/18/configure-nfs-server-v3-and-v4-on-scientific-linux-6-and-red-hat-enterprise-linux-rhel-6/

http://www.hardware.com.br/dicas/usando-nfs.html

http://nfs.sourceforge.net/nfs-howto/

http://www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports/

http://openskill.info/infobox.php?ID=677

http://www.cyberciti.biz/faq/tcp-wrappers-hosts-allow-deny-tutorial/

Comentários (0) Trackbacks (0)

Sem comentários


Leave a comment

(required)


*

Sem trackbacks