Blog

Como exportar un directorio mediante NFS para un cliente específico en RHEL7

Como exportar un directorio mediante NFS para un cliente específico en RHEL7
Publicado por: Gerardo Arroyo Arce

En este artículo explicaremos como exportar un directorio a través de la red mediante NFS para un cliente específico, con el fin de que sólo este tenga acceso a los recursos compartidos.

Para esto utilizaremos una configuración básica, además, al final del artículo se discutirá un tema importante sobre cómo implementar más seguridad al utilizar NFS.

Para nuestro laboratorio utilizaremos los siguientes servidores:

  • Servidor NFS: 192.168.2.60 server1
  • Cliente NFS: 192.168.2.70 server2

Configuración para el Servidor NFS (server1)

Procedemos a instalar los paquetes necesarios en el servidor NFS:

{% highlight bash %}
[root@server1 ~]# yum install nfs-utils
{% endhighlight %}

Seguidamente habilitamos e iniciamos el servicio NFS:

{% highlight bash %}
[root@server1 ~]# systemctl enable nfs-server
[root@server1 ~]# systemctl start nfs-server
{% endhighlight %}

Debemos configurar el firewall para permitir el tráfico al puerto NFS, recibir solicitudes de montaje “mountd” y mapear direcciones “rpc-bind”, después de esto se debe recargar el firewall para que los cambios se vean reflejados.

{% highlight bash %}
[root@server1 ~]# firewall-cmd –permanent –add-service={nfs,mountd,rpc-bind}
success
[root@server1 ~]# firewall-cmd –reload
success
{% endhighlight %}

Ahora creamos el directorio que deseamos compartir, en nuestro caso será el directorio /sharenfs.

{% highlight bash %}
[root@server1 ~]# mkdir /sharenfs
{% endhighlight %}

El archivo de configuración para exportar directorios mediante NFS se encuentra en /etc/exports, procedemos a configurar la exportación del directorio /sharenfs para el cliente con la ip 192.168.122.70 con permisos de lectura y escritura.

{% highlight bash %}
[root@server1 ~]# echo “/sharenfs 192.168.2.70(rw,sync,no_root_squash)” >> /etc/exports
{% endhighlight %}

Opciones de configuración:

  • rw: Permiso de escritura y lectura a la carpeta compartida.
  • sync: Sincronización de cambios de inmediato.
  • no_root_squash: El root en el servidor cliente tendrá el mismo nivel de acceso a los archivos compartidos como root en el servidor nfs.

Nota: Si queremos compartir el directorio con una serie de clientes, separamos estos con una coma, también se puede utilizar los nombres de los hosts, por ejemplo:

{% highlight bash %}
[root@server1 ~]# echo “/sharenfs 192.168.2.70,192.168.2.80(rw)” >> /etc/exports
[root@server1 ~]# echo “/sharenfs server2.example.com(rw)” >> /etc/exports
{% endhighlight %}

Después de configurar el archivo exports y luego de cualquier modificación se debe recargar la tabla de exportación con el siguiente comando:

{% highlight bash %}
[root@server1 ~]# exportfs -arv
exporting 192.168.2.70:/sharenfs
{% endhighlight %}

Configuración para el Cliente NFS (server2)

Procedemos a instalar los paquetes necesarios en el servidor cliente:

{% highlight bash %}
[root@server2 ~]# yum install nfs-utils
{% endhighlight %}

Ahora verificamos la lista de recursos exportados por el servidor NFS con el comando showmount.

{% highlight bash %}
[root@server2 ~]# showmount -e 192.168.2.60
Export list for 192.168.2.60:
/sharenfs 192.168.2.70
{% endhighlight %}

Procedemos a crear el punto de montaje donde queremos montar el recurso.

{% highlight bash %}
[root@server2 nfs]# mkdir /mnt/nfs
{% endhighlight %}

Podemos montar el recurso compartido de manera persistente o temporal las diferencias entre ambos métodos son las siguientes:

Temporal: Si realizamos un reinicio del servidor cliente no se montará automáticamente el recurso.

{% highlight bash %}
[root@server2 ~]# mount -t nfs 192.168.2.60:/sharenfs /mnt/nfs
{% endhighlight %}

Persistente: Si realizamos un reinicio del servidor cliente se montará automáticamente el recurso, la opción “_netdev” indica que en caso de reinicio se va a montar el recurso después de cargar la configuración de red, esto evita errores en el montaje.

{% highlight bash %}
[root@server2~]# echo “192.168.2.60:/sharenfs /mnt/nfs nfs _netdev 0 0” >> /etc/fstab
[root@server2~]# mount -a
{% endhighlight %}

Nota: Si desea cambiar el método de montaje de temporal a persistente, debe desmontar primeramente el recurso con el siguiente comando “umount /mnt/nfs”.

Verifique que monto el recurso de manera correcta, ejecutando el comando “df -hT”, este también mostrara el espacio disponible del recurso.

{% highlight bash %}
[root@server2~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/rhel-root xfs 6.2G 3.1G 3.1G 50% /
devtmpfs devtmpfs 482M 0 482M 0% /dev
tmpfs tmpfs 497M 144K 497M 1% /dev/shm
tmpfs tmpfs 497M 7.0M 490M 2% /run
tmpfs tmpfs 497M 0 497M 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 172M 843M 17% /boot
tmpfs tmpfs 100M 12K 100M 1% /run/user/0
192.168.2.60:/sharenfs nfs4 6.2G 3.2G 3.1G 51% /mnt/nfs
{% endhighlight %}

También es importante probar que tenga permisos de escritura sobre él directorio, como se muestra a continuación:

{% highlight bash %}
[root@server2 ~]# cd /mnt/nfs/
[root@server2 nfs]# touch holamundo.txt
[root@server2 nfs]# ls
holamundo.txt
{% endhighlight %}

Esta implementación de NFS es básica, tenga en cuenta que usted también puede realizar exportaciones de NFS con kerberos, esto le permite implementar autentificaciones mediante claves y cifrado para mayor seguridad, ya que por defecto el contenido enviado mediante NFS se transfiere en texto claro y no seguro.

Referencias

Para más información sobre NFS con Kerberos puede consultar el siguiente enlace:

Para mas información sobre opciones y configuración de NFS consulte este enlace:

Como exportar un directorio mediante NFS para un cliente específico en RHEL7

Gerardo Arroyo Arce

CEO & Co-Founder

  • ​AWS Community Builder & Ambassador
  • ​AWS Solution Architect - Professional
  • AWS Certified Database – Specialty
  • AWS Certified Security – Specialty
  • AWS Solution Architect - Associate
  • AWS Certified Developer Associate
  • AWS Certified SysOps Administrator Associate
  • Ingeniero en Software. ITCR.
  • Master en Computación en Informática. UCR.