mount.nfs: odmowa dostępu przez serwer podczas montowania na maszynach Ubuntu?

64

Mam trzy maszyny w produkcji -

machineA    10.66.136.129
machineB    10.66.138.181
machineC    10.66.138.183

i na wszystkich tych komputerach jest zainstalowany Ubuntu 12.04, a ja mam dostęp do roota na tych wszystkich trzech komputerach.

Teraz powinienem wykonać poniższe czynności na moich powyższych maszynach -

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

Utworzyłem już /opt/exhibitor/confkatalog na wszystkich tych trzech komputerach, jak wspomniano powyżej.

Teraz próbuję utworzyć punkt montowania. Postępowałem zgodnie z poniższym procesem -

Zainstaluj pliki obsługi NFS i serwer jądra NFS na wszystkich powyższych trzech komputerach

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

Utwórz wspólny katalog na wszystkich powyższych trzech komputerach

$ mkdir /opt/exhibitor/conf/

Zmodyfikowałem /etc/exportsi dodałem ten wpis we wszystkich powyższych trzech komputerach -

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

Próbowałem zamontować na maszynie A jak poniżej z maszyny B i maszyny C i to daje mi ten błąd -

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

Czy mój /etc/exportsplik wygląda dobrze? Jestem całkiem pewien, że popsułem mój exportsplik. Ponieważ mam tę samą zawartość na wszystkich trzech komputerach w pliku eksportu.

Masz pojęcie, co tutaj robię źle? A jaki będzie /exportstutaj poprawny plik?

Arsenał
źródło
1
FYI podwójnie sprawdź uprawnienia na hoście / kliencie. Jeśli host NFS ma uprawnienia 0750lub 0700klient próbujący zamontować najprawdopodobniej zakończy się niepowodzeniem z tym samym komunikatem o błędzie. Zmieniłem hosta z 0750na, 0755a następnie błąd zniknął i wszystko było dobrze.
Trevor Boyd Smith

Odpowiedzi:

70

exportfs

Podczas tworzenia /etc/exportspliku na serwerze musisz upewnić się, że go eksportujesz. Zazwyczaj będziesz chciał uruchomić to polecenie:

$ exportfs -a

Spowoduje to wyeksportowanie wszystkich wpisów w pliku eksportu.

showmount

Inną rzeczą, którą często robię, jest na innych komputerach. Za pomocą showmountpolecenia sprawdzę każdy komputer, który eksportuje udziały NFS do sieci .

$ showmount -e <NFS server name>

Przykład

Powiedz na przykład, że jestem zalogowany w 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

Aby zamontować je przy rozruchu, dodaj tę linię do komputerów klienckich, które chcą korzystać z podłączeń NFS.

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

automounting

Jeśli masz zamiar zrestartować te serwery, to wysoce sugeruję, abyś zajął się konfiguracją automounting ( autofs) zamiast dodawania tych wpisów /etc/fstab. To trochę więcej pracy, ale jest warte wysiłku.

Pozwoli to na ponowne uruchomienie serwerów bardziej niezależnie od siebie, a także utworzy montaż NFS tylko wtedy, gdy jest on rzeczywiście potrzebny i / lub używany. Gdy stanie się bezczynny, zostanie odmontowany.

Bibliografia

slm
źródło
Dziękuję za sugestie. Właśnie to zrobiłem i teraz działa dobrze. Zamiast biegać exportfs -a, pobiegłem exportfs -rv. Czy jest jakaś różnica między nimi? I w moim przypadku showmount -e 10.66.136.129będę robił z maszyny B i maszyny C. dobrze?
arsenał
1
@TechGeeky - nie bardzo. exportfs -rvpo prostu robi reexport + jest pełny. -aWyeksportuje wszystko. Jeśli showmount -etak, możesz go uruchomić z tych maszyn lub z tego, który obsługuje udziały.
slm
ok .. Dzięki, teraz ma sens. Jeszcze jedna rzecz. Wierzę, że jest jeszcze jedna rzecz w tym punkcie montowania, plik fstab .. prawda? Teraz który plik fstab maszyny mam zmodyfikować? A jakie treści mam tam dodać? Dowolny pomysł?
arsenał
@TechGeeky zobacz aktualizacje. Dodajesz wpisy do klientów, którzy chcą korzystać z udziałów NFS.
slm
1
W systemie Ubuntu musisz najpierw zainstalować serwer jądra nfs, aby funkcja eksportu była dostępna. Źródło: manpages.ubuntu.com/manpages/trusty/man8/exportfs.8.html
flickerfly
40

Widziałem ten sam błąd ( mount.nfs: access denied by server while mounting...) i problem został rozwiązany przez -o v3opcję w następujący sposób:

$ sudo mount -o v3 a-nfs-server:/path/to/export /path/to/mount
  • Serwer to Ubuntu 14.04 64bit LTS.
  • Klientem jest CentOS 6.5 64bit.
Fumisky Wells
źródło
2
Żadna reszta nie pomogła, w moim przypadku było to rozwiązanie.
Urhixidur,
1
Próbowałem tego i dostałem mount.nfs: Connection timed out. (Klientem jest Ubuntu 14.04 LTS 64-bit. Serwer to QNAP NFS z QTS 4.0.2 2016/01/09.)
Steve
Tak, kiedy uaktualniłem swój serwer do Ubuntu 16, na tym polegał problem i rozwiązanie.
Sridhar Sarnobat,
2
Uważaj na to. NFSv3 jest starożytny i długo przestarzały; to naprawdę nie powinno być już używane (i było to nawet prawdą, kiedy ten post został napisany).
Michael Hampton
7

W moim przypadku działa przy użyciu nfs4 wykonując:

$ sudo mount -t nfs4 nazwa-serwera: / / path / to / mount

W /etc/exportpliku na serwerze

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

fsid=0tworzy /Path/to/exportkatalog główny podczas montowania udziału.

crossmnt, ponieważ mam kilka innych dysków w wyeksportowanym systemie plików, do których chcę również uzyskać dostęp.

no_root_squash, ponieważ chcę uzyskać dostęp jako użytkownik root (su) po stronie klienta. Jestem pewien, że tylko ja mogę to zrobić w mojej sieci lokalnej.

Serwer i klient to Ubuntu 14.04 64bit.

Jeśli chcesz użyć nfs3, odpowiedź @ fumisky-wells również działa dla mnie.

zwyciężyć
źródło
Zasłużyłeś sobie na panią; Mam serwer NAS, więc zmodyfikowanie pliku / etc / export nie wchodzi w grę, ale podanie pełnej ścieżki pomogło. dobra robota.
MDMoore313,
4

Otrzymywałem ten sam komunikat o błędzie i mój problem okazał się spowodowany tym, że komputer kliencki ma dwa interfejsy sieciowe podłączone do tej samej sieci LAN. Serwer został skonfigurowany tak, aby oczekiwał określonego adresu IP, a na drugim interfejsie, który ma adres IP dhcp, wychodził ruch. Właśnie skonfigurowałem drugi interfejs, aby miał statyczny adres IP, a także dodałem drugi statyczny adres IP do konfiguracji serwera.

majjinator
źródło
Człowieku, chciałbym, żeby to było bardziej na szczyt, dokładnie tak się działo w moim przypadku
Brian Leishman
3

/etc/exportsmusi być edytowany na komputerze serwera NFS , a nie na klientach, jak to stwierdziłeś, ponieważ jest sprawdzany przez serwer NFS, gdy klient żąda dostępu do udziału.

Jeśli umieścisz następujące elementy /etc/exportsna serwerze NFS, powinien on działać:

/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
źródło
Mam to już w pliku eksportu na komputerze A. A potem montuję go na maszynie B i maszynie C i jakoś to nie działa .. Czy to możliwe, że dodałem te same informacje do wszystkich trzech maszyn w pliku eksportu, czy to będzie problem? Powinienem dodawać tylko w maszynie?
arsenał
1
@TechGeeky Czy po ponownym załadowaniu ponownie załadowałeś eksport NFS exportfs -a?
Chris Down,
Właśnie to zrobiłem i teraz działa dobrze. Próbuję zrozumieć to wszystko w lepszy sposób, więc moje pierwsze pytanie brzmi: machineA to serwer NFS, a machineB i machineC są klientami. Prawidłowo? Drugie pytanie brzmi: jeśli maszyna A jest moim serwerem NFS, to tylko w pliku / etc / export maszyny A dodam powyższe trzy wiersze, jak wspomniałeś w swoim rozwiązaniu, i nie dotkniemy pliku eksportu maszyny B i maszyny C? Poprawny?
arsenał
@TechGeeky Tak długo, jak montujesz udział na komputerze A, jest to poprawne w obu przypadkach.
Chris Down,
Dzięki. Teraz rozumiem to znacznie lepiej. Dlaczego zadałem to pytanie, ponieważ mam również podobne rzeczy w środowisku scenicznym. I to, co zrobiłem na tych trzech komputerach w środowisku pomostowym, dodałem te same trzy wiersze we wszystkich moich plikach / etc / export trzech komputerów zamiast dodawać je tylko na maszynie A, ale nadal działa dobrze. A teraz zrozumiałem całą koncepcję jaśniej. Dzięki za pomoc.
arsenał
2

Jeśli klient nfs próbuje zamontować wyeksportowany udział w kontenerze linux, wówczas kontener powinien działać w trybie uprzywilejowanym.

W przypadku dokera;

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

efesaid
źródło
2

Dla mnie problem polegał na tym, że /etc/exports/zamiast adresu klienta korzystałem z adresu IP serwera .

Chodzi o to, że powinieneś umieścić wszystkie IP, którym udzielasz dostępu na serwerze /etc/exports/

Vanuan
źródło
1

Po wielu godzinach walki z tym samym komunikatem o błędzie mój problem okazał się niczym bardziej skomplikowanym niż staromodne dobre uprawnienia do plików Linuksa na hoście NFS.

Folder, który próbowałem udostępnić ( /home/foo/app/share), miał odpowiednie uprawnienia, ale ponieważ katalog domowy użytkownika ( /home/foo) miał 0750w nim tryb, NFS nie był w stanie przejść do niego, aby uzyskać dostęp do udostępnionego katalogu.

Gdy tylko ustawiłem katalog 0751osobisty użytkownika na tryb , usługa NFS była w stanie przejść do niego i mogłem zamontować udział z mojego komputera klienckiego.

Dale Anderson
źródło
0

Dla mnie problemem było to, że mój router zmienił używany adres IP klienta, tak że wpis /etc/exportsna maszynie serwera pozwalał na dostęp tylko dla adresu IP, który nie był już używany.

Alex
źródło
0

To samo może się zdarzyć, jeśli spróbujesz zamontować udział NFS w instancji Virtual Box z kartą sieciową skonfigurowaną jako NAT.

Wybór Bridged Adapterustawień sieciowych maszyny wirtualnej rozwiązuje ten problem.

Mkaptur
źródło
0

Wiem, że to stary wątek, ale mój problem dotyczył LXC i AppArmor .

Naprawiono to zabijając AppArmor lub dodając profil wyjątku.

Josh
źródło
zobacz także unix.stackexchange.com/q/396678/231113 w przypadku korzystania z proxymox
myrdd
0

Ten błąd może być również spowodowany próbą zamontowania zaszyfrowanej ścieżki. (Na przykład w katalogu domowym, jeśli zdecydujesz się go zaszyfrować)

użytkownik3737396
źródło
0

Jedynym rozwiązaniem, które działało dla mnie, było eksportowanie systemów plików od /srv. Wygląda na to, że jest to ograniczenie (lub przynajmniej domyślna opcja) NFSv4.

Ponieważ próbowałem wyeksportować dysk USB, na którym automatycznie się instaluje /media, potrzebowałem sposobu, aby uzyskać to „zamontowanie” /srv. Aby to osiągnąć:

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

I w /etc/exports:

/srv/videos 192.168.0.200(ro)

Kiedy eksportowałem /media/jim/wdportable/videosbezpośrednio, próba zamontowania na kliencie zawsze kończyła się mount.nfs: access denied by server.

-o v3Rozwiązanie działało, ale nie chcę, aby wymusić v3.

Jim Stewart
źródło
2
Mogę prawie zagwarantować, że byłoby to spowodowane uprawnieniami do /media/jimfolderu. Jeśli katalog, który próbujesz udostępnić, jest (lub znajduje się w nim) katalogiem zawierającym tylko tryb 700lub 750, NFS nie będzie mógł przejść do niego. Jeśli zmienisz /media/jimna 751, prawdopodobnie będzie działać.
Dale Anderson
@DaleAnderson ma rację. Po udanym sudo mount -o v3 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-share(raspbian na Raspi 3 B +) też próbowałem sudo chmod 751 /media/pi. Potem już nie potrzebowałem -o v3: sudo mount 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-sharewykonałem robotę (po odmontowaniu). Ogromne podziękowania dla @DaleAnderson.
Thomas Praxl
To prawdopodobnie problem. Chyba przyzwyczaiłem się do dawnych czasów, kiedy serwer NFS działał jako root i ślepo eksportował to, co mu powiedziano. Przetestuję to.
Jim Stewart
0

Należy zauważyć, że linkowana strona, która mnie tu zaprowadziła, miała moją prawidłową odpowiedź, która brzmiała, że ​​NIE możesz używać * symbolu wieloznacznego w adresie IP w eksporcie. Jest to * (wszystkie adresy IP) lub jest używany jako symbol wieloznaczny w nazwach domen IE: * .domain.com.

Np .: jest to poprawne

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

To nie zadziała (a przynajmniej jest niepoprawne), ale działało dla mnie przez lata, dopóki nie spróbowałem zamontować eksportu z maszyny wirtualnej Fedory.

/Path/to/export 192.168.1.*(flags)
FreeSoftwareServers
źródło
Wydaje mi się, że przyczyną niepowodzenia jest prawdopodobnie NFSv4, ponieważ wiem, że Fedora wprowadza nowe, nowatorskie rozwiązania, a moja stara maszyna wirtualna działała dobrze, ale prawdopodobnie używała starszej wersji NFS. Tylko zgadnij.
FreeSoftwareServers