Servidor NFS no Scientific Linux
![]()
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:
- Configurações de compartilhamento NFS.
- Definição de restrições de acesso.
- Inicialização do serviço NFS.
- 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.allowSELinux: 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 -aPara 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://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/