mount.nfs: ¿acceso denegado por el servidor durante el montaje en máquinas Ubuntu?

65

Tengo tres máquinas en producción.

machineA    10.66.136.129
machineB    10.66.138.181
machineC    10.66.138.183

y todas esas máquinas tienen Ubuntu 12.04 instalado y tengo acceso root a todas esas tres máquinas.

Ahora se supone que debo hacer las siguientes cosas en mis máquinas anteriores:

Create mount point /opt/exhibitor/conf
Mount the directory in all servers.
 sudo mount <NFS-SERVER>:/opt/exhibitor/conf /opt/exhibitor/conf/

Ya he creado el /opt/exhibitor/confdirectorio en todas esas tres máquinas como se mencionó anteriormente.

Ahora estoy tratando de crear un punto de montaje. Así que seguí el siguiente proceso:

Instale archivos de soporte NFS y servidor de kernel NFS en las tres máquinas anteriores

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

Cree el directorio compartido en las tres máquinas anteriores.

$ mkdir /opt/exhibitor/conf/

Edité /etc/exportsy agregó la entrada como esta en las tres máquinas anteriores:

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/opt/exhibitor/conf/     10.66.136.129(rw)
/opt/exhibitor/conf/     10.66.138.181(rw)
/opt/exhibitor/conf/     10.66.138.183(rw)

He intentado montar en la máquina A como a continuación desde la máquina B y la máquina C y me da este error:

root@machineB:/# sudo mount -t nfs 10.66.136.129:/opt/exhibitor/conf /opt/exhibitor/conf/
mount.nfs: access denied by server while mounting 10.66.136.129:/opt/exhibitor/conf

root@machineC:/# sudo mount -t nfs 10.66.136.129:/opt/exhibitor/conf /opt/exhibitor/conf/
mount.nfs: access denied by server while mounting 10.66.136.129:/opt/exhibitor/conf

¿Mi /etc/exportsarchivo se ve bien? Estoy bastante seguro, he estropeado mi exportsarchivo. Como tengo el mismo contenido en las tres máquinas en el archivo de exportaciones.

¿Alguna idea de qué mal estoy haciendo aquí? ¿Y cuál será el /exportsarchivo correcto aquí?

arsenal
fuente
1
Para su información, verifique los permisos en el host / cliente. Si el host NFS tiene permisos 0750o 0700el cliente que intenta montar es muy probable que falle con este mismo mensaje de error. Cambié el host de 0750a 0755y luego el error desapareció y todo estuvo bien.
Trevor Boyd Smith

Respuestas:

72

exportfs

Cuando crea un /etc/exportsarchivo en un servidor, debe asegurarse de exportarlo. Por lo general, querrás ejecutar este comando:

$ exportfs -a

Esto exportará todas las entradas en el archivo de exportaciones.

showmount

La otra cosa que haré a menudo es desde otras máquinas. Comprobaré cualquier máquina que esté exportando recursos compartidos NFS a la red usando el showmountcomando.

$ showmount -e <NFS server name>

Ejemplo

Digamos, por ejemplo, que he iniciado sesión en scully.

$ showmount -e mulder
Export list for mulder:
/export/raid1/isos     192.168.1.0/24
/export/raid1/proj     192.168.1.0/24
/export/raid1/data     192.168.1.0/24
/export/raid1/home     192.168.1.0/24
/export/raid1/packages 192.168.1.0/24

fstab

Para montar estos en las botas, agregaría esta línea a sus máquinas cliente que desean consumir los montajes NFS.

server:/shared/dir /opt/mounted/dir nfs rsize=8192,wsize=8192,timeo=14,intr

montaje automático

Si va a reiniciar estos servidores, le sugiero que busque configurar el montaje automático ( autofs) en lugar de agregar estas entradas /etc/fstab. Es un poco más de trabajo pero vale la pena el esfuerzo.

Hacerlo le permitirá reiniciar los servidores de manera más independiente entre sí y también creará el montaje NFS cuando sea realmente necesario y / o esté siendo utilizado. Cuando esté inactivo, se desmontará.

Referencias

slm
fuente
Gracias por la sugerencia Acabo de hacer eso y ahora funciona bien. En lugar de correr exportfs -a, corrí exportfs -rv. ¿Hay alguna diferencia entre esos? Y en mi caso, showmount -e 10.66.136.129lo haré desde machineB y machineC. ¿derecho?
arsenal
1
@TechGeeky, en realidad no. exportfs -rvsolo hace una reexportación + es detallado. El -aexportará todo. En cuanto a showmount -esí, puede ejecutarlo desde esas máquinas o la que sirve las acciones.
slm
ok ... Gracias, tiene sentido ahora ... Una última cosa. Creo que hay una cosa más en este punto de montaje, el archivo fstab ... ¿correcto? ¿Ahora qué archivo fstab de máquina debo modificar? ¿Y qué contenido se supone que debo agregar allí? ¿Alguna idea?
arsenal
@TechGeeky ver actualizaciones. Agrega entradas a los clientes que desean consumir los recursos compartidos NFS.
slm
1
En Ubuntu, primero debe instalar nfs-kernel-server para que exportfs esté disponible. Fuente: manpages.ubuntu.com/manpages/trusty/man8/exportfs.8.html
flickerfly
40

Vi el mismo error ( mount.nfs: access denied by server while mounting...) y el problema se solucionó mediante la -o v3opción siguiente:

$ sudo mount -o v3 a-nfs-server:/path/to/export /path/to/mount
  • El servidor es Ubuntu 14.04 64bit LTS.
  • El cliente es CentOS 6.5 de 64 bits.
Fumisky Wells
fuente
2
Ninguno de los demás ayudó, esta fue la solución, en mi caso.
Urhixidur
1
Probé este y lo conseguí mount.nfs: Connection timed out. (El cliente es Ubuntu 14.04 LTS de 64 bits. El servidor es un QNAP NFS con QTS 4.0.2 2016/01/09.)
Steve
Sí, cuando actualicé mi servidor a Ubuntu 16, este era el problema y la solución.
Sridhar Sarnobat
2
Ten cuidado con esto. NFSv3 es antiguo y obsoleto desde hace mucho tiempo; realmente ya no debería usarse (y esto fue incluso cierto cuando se escribió esta publicación).
Michael Hampton
7

En mi caso funciona usando nfs4 haciendo:

$ sudo mount -t nfs4 nombre-servidor: / / ruta / a / mount

En el /etc/exportarchivo en el servidor

/Path/to/export 192.168.1.0/24(rw,sync,fsid=0,no_root_squash,crossmnt,no_subtree_check,no_acl)

fsid=0crea el /Path/to/exportdirectorio raíz cuando monta el recurso compartido.

crossmnt, porque tengo algunas otras unidades en el sistema de archivos exportado a las que también quiero acceder.

no_root_squash, porque quiero acceder como usuario root (su) desde el lado del cliente. Estoy bastante seguro de que soy el único que puede hacer eso en mi red local.

Servidor y clientes son Ubuntu 14.04 64bit.

Si quieres usar nfs3, la respuesta de @ fumisky-wells también funciona para mí.

victe
fuente
Usted se ganó un voto a favor, señor; Tengo un NAS, por lo que modificar el archivo / etc / export no es una opción, pero especificar la ruta completa funcionó. bien hecho.
MDMoore313
4

Recibía el mismo mensaje de error y mi problema se debió a que la máquina del cliente tenía dos interfaces de red conectadas a la misma LAN. El servidor se había configurado para esperar una dirección IP específica y el tráfico salía en la segunda interfaz que tiene una dirección IP dhcp. Así que acabo de configurar la segunda interfaz para que tenga una dirección IP estática y también agregué la segunda dirección IP estática a la configuración del servidor.

majjinator
fuente
Hombre, desearía que esto fuera más hacia la cima, eso es exactamente lo que estaba sucediendo en mi caso
Brian Leishman
3

/etc/exportsnecesita ser editado en la máquina del servidor NFS , no en los clientes, como usted dice, ya que el servidor NFS lo verifica cuando un cliente solicita acceso a un recurso compartido.

Si coloca lo siguiente en /etc/exportsel servidor NFS, debería funcionar:

/opt/exhibitor/conf 10.66.136.129(rw)
/opt/exhibitor/conf 10.66.138.181(rw)
/opt/exhibitor/conf 10.66.138.183(rw)
Chris Down
fuente
Ya tengo esto en mi archivo de exportaciones en machineA. Y luego lo estoy montando desde machineB y machineC y no funciona de alguna manera ... ¿Es posible que haya agregado la misma información en las tres máquinas en el archivo de exportaciones, será un problema? ¿Debería agregar solo en la máquinaA?
arsenal
1
@TechGeeky ¿Volviste a cargar las exportaciones NFS después de hacer eso, usando exportfs -a?
Chris Down
Acabo de hacer eso y ahora funciona bien. Estoy tratando de entender todo esto de una mejor manera, así que mi primera pregunta es, machineA es servidor NFS y machineB y machineC son clientes. ¿Correcto? La segunda pregunta es, si machineA es mi servidor NFS, entonces solo en el archivo / etc / exports de machineA, agregaré las tres líneas anteriores como mencionó en su solución y no tocaremos el archivo de exportaciones de machineB y machineC. ¿Correcto?
arsenal
@TechGeeky Mientras esté montando un recurso compartido en la máquina A, eso es correcto en ambos casos.
Chris Down
Gracias. Ahora entiendo esto mucho mejor. Por qué hice esta pregunta porque también tengo cosas similares en el entorno de ensayo. Y lo que hice en esas tres máquinas en el entorno de ensayo, agregué las mismas tres líneas en todos mis archivos / etc / export de tres máquinas en lugar de agregarlo solo en la máquina A, pero aún funciona bien. Y ahora he entendido todo el concepto más claramente. Gracias por la ayuda.
arsenal
2

Si nfs-client está tratando de montar el recurso compartido exportado dentro del contenedor de Linux, el contenedor debería ejecutarse en modo privilegiado.

En caso de estibador;

$ docker run -it --rm --privileged ubuntu:14.04

efesaid
fuente
2

Para mí, el problema era que estaba usando la dirección IP del servidor en /etc/exports/lugar de la del cliente .

La cuestión es que debe poner todos los ips a los que concede acceso en el servidor /etc/exports/

Vanuan
fuente
1

Después de luchar con este mismo mensaje de error durante horas, mi problema resultó ser nada más complicado que los buenos permisos de archivos Linux en el host NFS.

La carpeta que estaba tratando de compartir ( /home/foo/app/share) tenía los permisos correctos, pero debido a que el directorio de inicio del usuario ( /home/foo) tenía 0750modo, NFS no pudo atravesarla para acceder al directorio compartido.

Tan pronto como configuré el directorio de inicio del usuario en modo 0751, el servicio NFS pudo atravesarlo y pude montar el recurso compartido desde mi máquina cliente.

Dale Anderson
fuente
0

Para mí, el problema era que mi enrutador cambió la dirección IP usada del cliente, de modo que la entrada en /etc/exportsla máquina del servidor solo permitía el acceso a una dirección IP que ya no se usaba.

Alex
fuente
0

Lo mismo podría suceder si intenta montar un recurso compartido NFS en la instancia de Virtual Box con el adaptador de red configurado como NAT.

Elegir Bridged Adapteren la configuración de red de la máquina virtual soluciona este problema.

mkaptur
fuente
0

Sé que este es un hilo viejo, pero mi problema tenía que ver con LXC y AppArmor .

Matar AppArmor , o agregar un perfil de excepción, lo reparó.

Josh
fuente
vea también unix.stackexchange.com/q/396678/231113 en caso de que esté usando proxmox
myrdd
0

Este error también puede ser causado al intentar montar una ruta encriptada. (Por ejemplo, en su directorio de inicio, si elige encriptarlo)

usuario3737396
fuente
0

La única solución que funcionó para mí fue exportar sistemas de archivos a partir de /srv. Parece que esto es una limitación (o una opción predeterminada, al menos) de NFSv4.

Como estaba tratando de exportar una unidad USB /mediaa la que se monta automáticamente , necesitaba una forma de "montarla" /srv. Para lograr eso:

sudo mkdir /srv/videos
sudo mount --bind /media/jim/wdportable/videos /srv/videos

Y en /etc/exports:

/srv/videos 192.168.0.200(ro)

Cuando exportaba /media/jim/wdportable/videosdirectamente, siempre intentaba montar en el cliente mount.nfs: access denied by server.

La -o v3solución funcionó, pero no quería forzar v3.

Jim Stewart
fuente
2
Casi puedo garantizar que esto se debió a los permisos en la /media/jimcarpeta. Si el directorio que está intentando compartir es (o está dentro de) un directorio con solo 700o 750modo, NFS no podrá atravesarlo. Si cambiaras /media/jima 751, probablemente funcionaría.
Dale Anderson
@DaleAnderson tiene razón. Después de un éxito sudo mount -o v3 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-share(raspbian en Raspi 3 B +), también lo intenté sudo chmod 751 /media/pi. Después, ya no necesitaba -o v3: sudo mount 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-sharehice el trabajo (después de desmontar). Muchas gracias a @DaleAnderson.
Thomas Praxl
Este es probablemente el problema. Supongo que estoy acostumbrado a los viejos tiempos cuando el servidor NFS simplemente se ejecutaba como root y exportaba a ciegas lo que se le decía. Probaré esto.
Jim Stewart
0

Cabe señalar que una página vinculada que me llevó aquí tenía mi respuesta correcta, que era que NO se puede usar el comodín * en la dirección IP en la exportación. Es * (todas las IP) o se usa como comodín en los nombres de dominio IE: * .domain.com.

Por ejemplo: esto es correcto

/Path/to/export 192.168.1.0/24(flags)

Esto no funcionará (o al menos es incorrecto), pero funcionó para mí durante años hasta que intenté montar la exportación desde una VM de Fedora.

/Path/to/export 192.168.1.*(flags)
FreeSoftwareServers
fuente
Creo que la razón por la que falló es posiblemente NFSv4 porque sé que Fedora está haciendo cosas nuevas y mi VM anterior funcionó bien, pero probablemente usó una versión NFS anterior. Solo una suposición.
FreeSoftwareServers