NFS en Debian

O obxetivo será montar un servidor NFS en Debian, e a compartición de arquivos pola a través do sistema Net File System NFS.

NFS é un sistema de compartición de arquivos que pode supoñer un gran risco de seguridade da rede, pois entre outros contras dispón dos seguintes:

A maior vantaxe, é poder compartir arquivos non privados na rede local sen ter que configurar contas de acceso, por exemplo distribuir software ou outros arquivos que non requiran de protección.

Instalación

No lado do servidor temos que instalar o seguinte:
sudo apt-get install nfs-kernel-server nfs-common
No lado do cliente se temos un fedora 21 teremos nfs instalado por defecto, se temos un Debian instalamos o seguinte:
sudo apt-get install nfs-common

Configurando directorio para NFS

Creamos un directorio para compartir por NFS:
sudo mkdir /home/nfs_compartidos
sudo chown nobody:nogroup /home/nfs_compartidos
sudo chmod 755 /home/nfs_compartidos
Para ver como configurar o arquivo exports usamos o seguinte:
man 5 exports
Unha vez teñamos claro o que queremos compartir e como, editamos /etc/exports
sudo vi /etc/exports
Para a edición do arquivo se sigue o seguinte esquema:
RECURSO_A_COMPARTIR EQUIPOS_COS_QUE_COMPARITLO (PERMISOS_DA_COMPARTICIÓN)

Opcións de permisos (a maioria ):

Opción: Explicación:
rw Para permitir a escritura/lectura do volume.
ro Para permitir só a lectura do volume.
async Permite máis optimización da escritura, pero pode producir erros de escritura en caso de reinicio do server, etc… Xa que confirma a recepción dos datos antes de comprobrar que están ben escritos na unidade.
sync Fai que o servidor responda as peticións de escritura unha vez que os cambios han sido comiteados e están ben gardados na unidade.
no_subtree_check Esta opción deshabilita a comprobración de rutas dos arquivos.
root_squash Pasa as UID/GID ao anonymous UID/GID.
no_root_squash Anula o root_squash esta opción é útil para os clientes sen disco.
all_squash Mapea todas as UID/GID ao usuario anónimo. Útil para a exportación de directorios NFS para FTP públicos, etc… O oposto a esta opción sería no_all_squash, esta é a opción por defecto.

Crear taboas extra pra exports

Se queremos definir máis normas podemos facelas en arquivos separados, en /etc/exports.d.

Arquivo de exemplo do exports:
# sample /etc/exports file
/               master(rw) trusty(rw,no_root_squash)
/projects       proj*.local.domain(rw)
/usr            *.local.domain(ro) @trusted(rw)
/home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
/pub            *(ro,insecure,all_squash)
/srv/www        -sync,rw server @trusted @external(ro)
/foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
/build          buildhost[0-9].local.domain(rw)
Liña: Explicación:
2 Exporta o sistema de arquivos enteiro as máquinas master e trusty. Engade acceso de escritura, todas as comprobacións de UID están deshabilitadas para o host trusty. (Obviamente non é recomendable usar esta configuración xD )
3,4 Amosa o exemplo pra nomes incompletos de nomes de host e nomes de grupos ( é a entrada ‘@trusted’).
5 Amosa a entrada aplicada pra ese host pc001, donde se mapean os usuarios, e teñen que ter a uid equivalente a 150 e o gid 100.
6 Exporta o directorio público FTP para calquer host no mundo, executando tódalas peticións baixo a conta “nobody”. A opción insecure nesta entrada permite a clientes con NFS non usar o porto reservado para NFS.
7 Exporta o directorio de escritura e lectura a máquina “server” mentres esté no grupo “@trusted”, e só lectura o grupo “@external”, nos tres montaxes coa opción “sync” activa.
8 Exporta o directorio a un rango de ipv6 e un rango de ipv4 para as suas subnets.
9 Mostra como compartir con un nome de host con variables.

Exemplo práctico de uso

Compartir un directorio coa rede local

Para a compartición dun directorio nunha rede local podemos usar:
  /home/shares 192.168.0.0/24(rw)

Onde poremos o directorio /home/shares compartido cos equipos da rede 192.168.0.0, quenes podrán leer e escribir o directorio.

Montalo directorio remoto NFS

Agora como clientes se nos interesa montar o directorio remoto dun server NFS, temos que facer o seguinte:
mount <ip_server>:/ruta/no/server/do/directorio /ruta/no/host/onde/montar

Con iso montaría o directorio remoto nese directorio, permitíndonos dipoñer del coma se de un directorio local se tratase.

Automontar un directorio remoto por NFS dende o arrinque

Nun fedora podemos poñer no /etc/fstab o seguinte:
# ...
<ip_nome_ou_nomehost_server_nfs>:<ruta_do_directorio> <ruta/local/para/montar/o/directorio> nfs4 soft,x-systemd.device,timeout=2,udp     0 0
# ...
Para aplicar os cambios no fstab ou probalos, usamos:
# mount -a

Con isto xa teríamos tódolo preciso pra usar un directorio en rede a través de NFS, se procuras algo máis seguro é mellor usar sshfs, mais ese xa sería outro tema pra un novo post.