Configurar un servidor y un cliente NFS en Debian 9 (Stretch)

Esta guía explica cómo configurar un servidor NFS y un cliente NFS en Debian 9. NFS significa Sistema de Archivos en Red; a través de NFS, un cliente puede acceder (leer, escribir) a un recurso compartido remoto en un servidor NFS como si estuviera en el disco duro local. En este Tutorial, te mostraré dos exportaciones NFS diferentes, la exportación de un directorio cliente que almacena los archivos como usuario nobody/nogroup sin preservar los permisos del sistema de archivos y una exportación del directorio /var/www que preserva los permisos y la propiedad de los archivos, tal y como se requiere en la configuración de un servidor de alojamiento.

1 Nota preliminar

Aquí estoy utilizando dos sistemas Debian Wheezy:

  • Servidor NFS: servidor.ejemplo.com, dirección IP: 192.168.1.100
  • Cliente NFS: cliente. ejemplo.com, dirección IP: 192.168.1.101

2 Instalación de NFS

Asegúrate de que el servidor está al día actualizando las listas de paquetes e instala las actualizaciones pendientes en ambos servidores

apt-get update
apt-get upgrade

Luego continúa con la instalación del servidor y del cliente NFS.

servidor:

En el servidor NFS ejecutamos:

apt-get install nfs-kernel-server nfs-common

Luego creamos los enlaces de inicio del sistema para el servidor NFS y lo iniciamos:

cliente:

En el cliente podemos instalar NFS de la siguiente manera (en realidad es lo mismo que en el servidor):

apt-get install nfs-common

3 Exportar directorios en el servidor

servidor:

Quiero que los directorios /home/client1 y /var/www sean accesibles al cliente para mostrar los dos modos de acceso diferentes del servidor NFS. El directorio /home/cliente1 se comparte en modo estándar, por lo que todos los archivos escritos en este directorio se almacenan como usuario nobody y grupo nogroup. Para el directorio /var/www utilizo la opción no_root_squash que indica al servidor NFS que conserve los permisos y la propiedad de los archivos. Esto es necesario, por ejemplo, cuando quieres exportar el directorio /var/www de un servidor web gestionado con ISPConfig 3

Primero, crearé el directorio /home/cliente1

mkdir /home/client1
chown nobody:nogroup /home/client1
chmod 755 /home/client1

Lo más probable es que el directorio /var/www exista en tu servidor. Si no es así, créalo:

mkdir /var/www
chown root:root /var/www
chmod 755 /var/www

Ahora debemos modificar /etc/exports donde «exportamos» nuestros recursos compartidos NFS. Especificamos /home/client1 y /var/www como recursos compartidos NFS y le decimos a NFS que haga los accesos a /home/client1 como usuario nobody (para saber más sobre /etc/exports, su formato y opciones disponibles, echa un vistazo a

man 5 exports

)

nano /etc/exports
/home/client1           192.168.1.101(rw,sync,no_subtree_check)
/var/www        192.168.1.101(rw,sync,fsid=0,crossmnt,no_subtree_check,no_root_squash)

(La opción no_root_squash hace que se acceda a /var/www como root).

Para aplicar los cambios en /etc/exports, reiniciamos el servidor nfs del núcleo

service nfs-kernel-server restart

4 Montar los recursos compartidos NFS en el cliente

cliente:

En primer lugar, creamos los directorios donde queremos montar los recursos compartidos NFS, por ejemplo

mkdir -p /mnt/nfs/home/client1
mkdir -p /var/www

Si el directorio /var/www ya existe en tu servidor, entonces detén apache, renombra el directorio y crea un nuevo directorio vacío como punto de montaje

service apache2 stop
mv /var/www /var/www_bak
mkdir -p /var/www

Después, podemos montarlos de la siguiente manera:

mount 192.168.1.100:/home/client1 /mnt/nfs/home/client1
mount 192.168.1.100:/var/www /var/www

Ahora deberías ver los dos recursos compartidos NFS en las salidas de

df -h
root@server1:/tmp# df -h
Filesystem Size Used Avail Use% Mounted on
udev 990M 0 990M 0% /dev
tmpfs 201M 6.0M 195M 3% /run
/dev/sda1 28G 1.2G 25G 5% /
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/1000
192.168.1.100:/home/client1 28G 1.2G 25G 5% /mnt/nfs/home/client1
192.168.1.100:/var/www 28G 1.2G 25G 5% /var/www
root@server1:/tmp#

y

mount
root@server1:/tmp# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1012912k,nr_inodes=253228,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204804k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9848)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=204800k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
192.168.1.100:/home/client1 on /mnt/nfs/home/client1 type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
192.168.1.100:/var/www on /var/www type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
root@server1:/tmp#

5 Prueba

En el cliente, ahora puedes intentar crear archivos de prueba en los recursos compartidos NFS:

cliente:

touch /mnt/nfs/home/client1/test.txt
touch /var/www/test.txt

Ahora ve al servidor y comprueba si puedes ver los dos archivos de prueba:

servidor:

ls -l /home/client1/
root@server1:/tmp# ls -l /home/client1/
total 0
-rw-r--r-- 1 nobody nogroup 0 Nov 16 10:52 test.txt
root@server1:/tmp#
ls -l /var/www
root@server1:/tmp# ls -l /var/www
total 0
-rw-r--r-- 1 root root 0 Nov 16 10:52 test.txt
root@server1:/tmp#

(Ten en cuenta las diferentes titularidades de los archivos de prueba: al recurso compartido NFS /home/client1 se accede como nobody / nogroup y es propiedad de nobody / nogroup; al recurso compartido /var/www se accede como root, por lo que /var/www/test.txt es propiedad del usuario y grupo root).

6 Montar los recursos compartidos NFS en el momento del arranque

En lugar de montar los recursos compartidos NFS manualmente en el cliente, puedes modificar el archivo /etc/fstab para que los recursos compartidos NFS se monten automáticamente al arrancar el cliente.

cliente:

Abre /etc/fstab y añade las siguientes líneas:

nano /etc/fstab
[...]
192.168.1.100:/home/client1  /mnt/nfs/home/client1   nfs      rw,sync,hard,intr  0     0
192.168.1.100:/var/www  /var/www   nfs      rw,sync,hard,intr  0     0

En lugar de rw,sync,hard,intr puedes utilizar diferentes opciones de montaje. Para saber más sobre las opciones disponibles, echa un vistazo a

man nfs

Para comprobar si tu /etc/fstab modificado funciona, desmonta los recursos compartidos y ejecuta mount -a:

umount /mnt/nfs/home/client1
umount /var/www
mount -a

Ahora deberías ver los dos recursos compartidos NFS en las salidas de

df -h
root@server1:/# df -h
Filesystem Size Used Avail Use% Mounted on
udev 990M 0 990M 0% /dev
tmpfs 201M 6.0M 195M 3% /run
/dev/sda1 28G 1.2G 25G 5% /
tmpfs 1001M 0 1001M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 1001M 0 1001M 0% /sys/fs/cgroup
tmpfs 200M 0 200M 0% /run/user/1000
192.168.1.100:/home/client1 28G 1.2G 25G 5% /mnt/nfs/home/client1
192.168.1.100:/var/www 28G 1.2G 25G 5% /var/www
root@server1:/#

y

mount
root@server1:/# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1012912k,nr_inodes=253228,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204804k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=33,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=9848)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=204800k,mode=700,uid=1000,gid=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
192.168.1.100:/home/client1 on /mnt/nfs/home/client1 type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
192.168.1.100:/var/www on /var/www type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.100,mountvers=3,mountport=57821,mountproto=udp,local_lock=none,addr=192.168.1.100)
root@server1:/#

7 Créditos

Este tutorial se basa en el tutorial del servidor NFS de Centos de Falko Timme.

8 Enlaces

También te podría gustar...