mount.nfs: acesso negado pelo servidor durante a montagem em máquinas Ubuntu?

64

Eu tenho três máquinas em produção -

machineA    10.66.136.129
machineB    10.66.138.181
machineC    10.66.138.183

e todas essas máquinas têm o Ubuntu 12.04 instalado e eu tenho acesso root a todas essas três máquinas.

Agora devo fazer as coisas abaixo nas minhas máquinas acima -

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

Eu já criei o /opt/exhibitor/confdiretório em todas essas três máquinas, como mencionado acima.

Agora estou tentando criar um ponto de montagem. Então eu segui o processo abaixo -

Instale os arquivos de suporte NFS e o servidor do kernel NFS nas três máquinas acima

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

Crie o diretório compartilhado em todas as três máquinas acima

$ mkdir /opt/exhibitor/conf/

Editou /etc/exportse adicionou a entrada desta maneira em todas as três máquinas acima -

# /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)

Eu tentei montar na máquinaA, como abaixo, da máquinaB e da máquinaC e isso me dá esse erro-

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

Meu /etc/exportsarquivo ficou bom? Tenho certeza de que estraguei meu exportsarquivo. Como eu tenho o mesmo conteúdo em todas as três máquinas no arquivo de exportações.

Alguma idéia do que estou fazendo errado aqui? E qual será o /exportsarquivo correto aqui?

arsenal
fonte
11
Para sua informação, verifique as permissões no host / cliente. Se o host NFS tiver permissões 0750ou 0700o cliente que estiver tentando montar provavelmente falhará com a mesma mensagem de erro. Mudei o host de 0750para 0755e então o erro foi embora e tudo estava bem.
Trevor Boyd Smith

Respostas:

71

exportfs

Ao criar um /etc/exportsarquivo em um servidor, você precisa exportá-lo. Normalmente, você deseja executar este comando:

$ exportfs -a

Isso exportará todas as entradas no arquivo de exportação.

showmount

A outra coisa que frequentemente faço é a partir de outras máquinas, verificarei qualquer máquina que exporte compartilhamentos NFS para a rede usando o showmountcomando

$ showmount -e <NFS server name>

Exemplo

Digamos, por exemplo, que estou logado.

$ 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 montá-las nas botas, você adicionaria essa linha às máquinas clientes que desejam consumir as montagens NFS.

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

montagem automática

Se você estiver reinicializando esses servidores, sugiro que você configure a automounting ( autofs) em vez de adicionar essas entradas a /etc/fstab. É um pouco mais trabalhoso, mas vale a pena.

Isso permitirá que você reinicie os servidores de forma mais independente um do outro e também criará a montagem NFS quando for realmente necessário e / ou em uso. Quando ficar ocioso, será desmontado.

Referências

slm
fonte
Obrigado pela sugestão. Acabei de fazer isso e agora funciona bem. Em vez de correr exportfs -a, eu corri exportfs -rv. Existe alguma diferença entre esses? E no meu caso, showmount -e 10.66.136.129eu vou estar fazendo da máquina B e da máquina C. direito?
arsenal
11
@ TechGeeky - na verdade não. exportfs -rvapenas reexporta + é detalhado. O -aexportará tudo. Quanto a showmount -esim, você pode executá-lo a partir dessas máquinas ou da que serve os compartilhamentos.
slm
ok .. Obrigado, sentido makese agora .. Uma última coisa. Eu acredito que há mais uma coisa nessa coisa do ponto de montagem, o arquivo fstab .. correto? Agora, qual arquivo fstab da máquina, devo modificar? E que conteúdo devo adicionar lá? Qualquer ideia?
arsenal
@TechGeeky ver atualizações. Você adiciona entradas aos clientes que desejam consumir os compartilhamentos NFS.
slm
11
No Ubuntu, você deve primeiro instalar o nfs-kernel-server para que o exportfs esteja disponível. Fonte: manpages.ubuntu.com/manpages/trusty/man8/exportfs.8.html
flickerfly
40

Eu vi o mesmo erro ( mount.nfs: access denied by server while mounting...) e o problema foi corrigido por -o v3opção da seguinte maneira:

$ sudo mount -o v3 a-nfs-server:/path/to/export /path/to/mount
  • O servidor é o Ubuntu 14.04 64bit LTS.
  • O cliente é o CentOS 6.5 de 64 bits.
Fumisky Wells
fonte
2
Nenhum dos outros ajudou, esta foi a solução, no meu caso.
Urhixidur 7/03/16
11
Eu tentei este e consegui mount.nfs: Connection timed out. (Cliente é o Ubuntu 14.04 LTS 64-bit Server é um QNAP NFS com QTS 4.0.2 2016/01/09..)
Steve
Sim, quando atualizei meu servidor para o Ubuntu 16, esse era o problema e a solução.
Sridhar Sarnobat
2
Tenha cuidado com isso. O NFSv3 é antigo e obsoleto há muito tempo; realmente não deveria mais ser usado (e isso era verdade mesmo quando este post foi escrito).
Michael Hampton
7

No meu caso funciona usando nfs4 fazendo:

$ sudo mount -t nfs4 nome do servidor: / / path / to / mount

No /etc/exportarquivo no servidor

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

fsid=0cria o /Path/to/exportdiretório raiz quando você monta o compartilhamento.

crossmnt, porque tenho outras unidades no sistema de arquivos exportado que também quero acessar.

no_root_squash, porque eu quero acessar como usuário root (su) no lado do cliente. Tenho certeza de que sou o único que pode fazer isso na minha rede local.

Servidor e clientes são Ubuntu 14.04 64bit.

Se você quiser usar o nfs3, a resposta do @ fumisky-wells também funciona para mim.

victe
fonte
Você ganhou um voto positivo, senhor; Eu tenho um NAS, portanto, modificar o arquivo / etc / export não é uma opção, mas especificar o caminho completo foi o suficiente. bem feito.
MDMoore313
4

Eu estava recebendo a mesma mensagem de erro e o problema ocorreu devido à máquina cliente ter duas interfaces de rede conectadas à mesma LAN. O servidor foi configurado para esperar um endereço IP específico e o tráfego estava saindo na segunda interface que possui um endereço IP DHCP. Então, acabei de configurar a segunda interface para ter um endereço IP estático e também adicionei o segundo endereço IP estático à configuração do servidor.

majjinator
fonte
Cara, eu gostaria que isso fosse mais para o topo, é exatamente o que estava acontecendo no meu caso
Brian Leishman
3

/etc/exportsprecisa ser editado na máquina do servidor NFS , não nos clientes, como você disse, como é verificado pelo servidor NFS quando um cliente solicita acesso a um compartilhamento.

Se você colocar o seguinte no /etc/exportsservidor NFS, ele 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
fonte
Eu já tenho isso no meu arquivo de exportações na máquinaA. E então estou montando a partir de machineB e machineC e não funciona de alguma maneira. É possível que eu tenha adicionado as mesmas informações em todas as três máquinas no arquivo de exportação? Isso será um problema? Eu deveria estar adicionando apenas no machineA?
arsenal
11
@TechGeeky Você recarregou as exportações do NFS depois de fazer isso, usando exportfs -a?
Chris Baixo
Acabei de fazer isso e agora funciona bem. Estou tentando entender tudo isso da melhor maneira, então minha primeira pergunta é: machineA é servidor NFS e machineB e machineC são clientes .. Correto? A segunda pergunta é: se machineA for meu servidor NFS, somente no arquivo / etc / export da machineA, adicionarei as três linhas acima, como você mencionou na sua solução, e não tocaremos no arquivo de exportação da machineB e machineC? Corrigir?
arsenal
@TechGeeky Desde que você esteja montando um compartilhamento na máquina A, isso é correto nos dois casos.
Chris Baixo
Obrigado. Agora eu entendo isso muito melhor. Por que fiz essa pergunta porque também tenho coisas semelhantes no ambiente de preparação. E o que fiz nessas três máquinas no ambiente de armazenamento temporário, adicionei as mesmas três linhas em todos os meus arquivos / etc / exports de três máquinas, em vez de adicioná-lo apenas na máquina A, mas ainda assim funciona bem. E agora entendi todo o conceito mais claramente. Obrigado pela ajuda.
arsenal
2

Se o nfs-client estiver tentando montar o compartilhamento exportado dentro do contêiner linux, o contêiner deverá ser executado no modo privilegiado.

Em caso de estivador;

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

efesaid
fonte
2

Para mim, o problema era que eu estava usando o endereço IP do servidor em /etc/exports/vez do endereço do cliente .

O problema é que você deve colocar todos os ips aos quais concede acesso no servidor /etc/exports/

Vanuan
fonte
1

Depois de lutar com a mesma mensagem de erro por horas, meu problema acabou sendo nada mais complicado do que as boas e antigas permissões de arquivo Linux no host NFS.

A pasta que eu estava tentando compartilhar ( /home/foo/app/share) tinha as permissões corretas, mas como o diretório inicial do usuário ( /home/foo) tinha o 0750modo, o NFS não pôde atravessá-lo para acessar o diretório compartilhado.

Assim que eu defini o diretório inicial do usuário para o modo 0751, o serviço NFS pôde entrar nele e eu consegui montar o compartilhamento na minha máquina cliente.

Dale Anderson
fonte
0

Para mim, o problema era que meu roteador alterava o endereço IP usado do cliente, de forma que a entrada na /etc/exportsmáquina do servidor permitia apenas o acesso a um endereço IP que não era mais usado.

Alex
fonte
0

O mesmo poderia acontecer se você tentar montar um compartilhamento NFS na instância do Virtual Box com o adaptador de rede configurado como NAT.

Escolher Bridged Adapternas configurações de rede da máquina virtual corrige esse problema.

mkaptur
fonte
0

Eu sei que esse é um thread antigo, mas meu problema estava relacionado ao LXC e ao AppArmor .

Matar o AppArmor , ou adicionar um perfil de exceção, o corrigiu.

Josh
fonte
ver também unix.stackexchange.com/q/396678/231113 no caso de você estiver usando Proxmox
myrdd
0

Este erro também pode ser causado ao tentar montar um caminho criptografado. (Por exemplo, no seu diretório pessoal, se você optar por criptografá-lo)

user3737396
fonte
0

A única solução que funcionou para mim foi exportar sistemas de arquivos começando com /srv. Parece que essa é uma limitação (ou opção padrão, pelo menos) do NFSv4.

Como eu estava tentando exportar uma unidade USB para /mediaa qual é montada automaticamente , eu precisava de uma maneira de montá-la /srv. Para conseguir isso:

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

E em /etc/exports:

/srv/videos 192.168.0.200(ro)

Quando eu exportava /media/jim/wdportable/videosdiretamente, a tentativa de montar no cliente sempre resultava mount.nfs: access denied by server.

A -o v3solução funcionou, mas eu não queria forçar a v3.

Jim Stewart
fonte
2
Eu quase posso garantir que isso ocorreu devido a permissões na /media/jimpasta. Se o diretório que você está tentando compartilhar for (ou estiver dentro de) um diretório com only 700ou 750mode, o NFS não poderá atravessá-lo. Se você mudou /media/jimpara 751, provavelmente funcionaria.
Dale Anderson
@DaleAnderson está certo. Depois de um sucesso sudo mount -o v3 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-share(raspbian no Raspi 3 B +), eu também tentei sudo chmod 751 /media/pi. Depois, não precisei -o v3mais: sudo mount 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-sharefiz o trabalho (após desmontar). Muito obrigado a @DaleAnderson.
Thomas Praxl 15/04
Este é provavelmente o problema. Acho que estou acostumado aos dias antigos em que o servidor NFS era executado como root e exportava cegamente o que havia sido dito. Vou testar isso.
Jim Stewart
0

Note-se que uma página vinculada que me levou até aqui tinha a minha resposta correta: NÃO é possível usar * curinga no endereço IP na exportação. É * (todos os IPs) ou usado como curinga nos nomes de domínio IE: * .domain.com.

Por exemplo: isso está correto

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

Isso não funcionará (ou está incorreto, pelo menos), mas funcionou para mim por anos até eu tentar montar a exportação de uma VM do Fedora.

/Path/to/export 192.168.1.*(flags)
FreeSoftwareServers
fonte
Eu acho que o motivo pelo qual ele falhou é possivelmente o NFSv4, porque eu sei que o Fedora está inovando com coisas novas e minha VM antiga funcionou bem, mas provavelmente usou a versão mais antiga do NFS. Apenas um palpite.
FreeSoftwareServers