mount.nfs: доступ запрещен сервером при монтировании на компьютерах с Ubuntu?


65

У меня три машины в производстве -

machineA    10.66.136.129
machineB    10.66.138.181
machineC    10.66.138.183

и на всех этих машинах установлена ​​Ubuntu 12.04, и у меня есть root-доступ ко всем этим трем машинам.

Теперь я должен делать вещи ниже, в моих машинах выше -

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

Я уже создал /opt/exhibitor/confкаталог на всех этих трех машинах, как указано выше.

Сейчас я пытаюсь создать точку монтирования. Итак, я следовал за процессом ниже -

Установите файлы поддержки NFS и сервер ядра NFS на всех трех указанных машинах.

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

Создайте общий каталог на всех трех вышеперечисленных машинах

$ mkdir /opt/exhibitor/conf/

Отредактировал /etc/exportsи добавил запись, как это во всех трех вышеупомянутых машинах -

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

Я попытался установить на машине A, как показано ниже, от machineB и machineC, и это дает мне эту ошибку:

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

Мой /etc/exportsфайл выглядит хорошо? Я почти уверен, что испортил мой exportsфайл. Так как у меня одинаковое содержимое на всех трех машинах в файле экспорта.

Есть идеи, что я здесь не так делаю? И какой /exportsфайл здесь будет правильным ?


1
К вашему сведению, дважды проверьте разрешения на хосте / клиенте. Если у хоста NFS есть разрешения 0750или 0700клиент, пытающийся смонтировать, вполне может потерпеть неудачу с этим же сообщением об ошибке. Я изменил хост с 0750на, 0755а затем ошибка ушла, и все было хорошо.
Тревор Бойд Смит

Ответы:


72

Exportfs

Когда вы создаете /etc/exportsфайл на сервере, вы должны быть уверены, что экспортируете его. Обычно вы хотите выполнить эту команду:

$ exportfs -a

Это позволит экспортировать все записи в файле экспорта.

showmount

Другая вещь, которую я часто делаю, это с других машин я проверяю любую машину, которая экспортирует NFS-ресурсы в сеть, используя showmountкоманду.

$ showmount -e <NFS server name>

пример

Скажем, например, я вошел в Скалли.

$ 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

Чтобы смонтировать их при загрузке, вы должны добавить эту строку на свои клиентские машины, которые хотят использовать монтирование NFS.

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

автомонтирование

Если вы собираетесь перезагружать эти серверы, я настоятельно рекомендую вам autofsвместо этого добавить записи для автоматического монтирования ( ) /etc/fstab. Это немного больше работы, но оно того стоит.

Это позволит вам перезагружать серверы более независимо друг от друга, а также будет создавать монтирование NFS только тогда, когда это действительно необходимо и / или используется. Когда он простаивает, он отключается.

Рекомендации


Спасибо за предложение. Я только что сделал это, и теперь он отлично работает. Вместо того чтобы бежать exportfs -a, я побежал exportfs -rv. Есть ли разница между ними? А в моем случае showmount -e 10.66.136.129я буду делать из machineB и machineC. правильно?
Арсенал

1
@TechGeeky - не совсем. exportfs -rvпросто реэкспорт + многословен. -aБудет экспортировать все. Что касается showmount -eда, вы можете запустить его с тех машин или тех, которые обслуживают акции.
SLM

хорошо .. спасибо, теперь все понятно .. И последнее. Я верю, что есть еще одна вещь в этой точке монтирования, файл fstab .. правильно? Теперь, на каком компьютере файл fstab, я должен изменить? И какой контент я должен добавить туда? Любая идея?
Арсенал

@TechGeeky смотрите обновления. Вы добавляете записи клиентам, которые хотят использовать общие ресурсы NFS.
SLM

1
В Ubuntu вы должны сначала установить nfs-kernel-server, чтобы был доступен exportfs. Источник: manpages.ubuntu.com/manpages/trusty/man8/exportfs.8.html
flickerfly

40

Я увидел ту же ошибку ( mount.nfs: access denied by server while mounting...), и проблема была решена с помощью -o v3параметра следующим образом:

$ sudo mount -o v3 a-nfs-server:/path/to/export /path/to/mount
  • Сервер Ubuntu 14.04 64bit LTS.
  • Клиент CentOS 6.5 64bit.

2
Никто из остальных не помог, это было решением, в моем случае.
Urhixidur

1
Я попробовал это и получил mount.nfs: Connection timed out. (Клиент - Ubuntu 14.04 LTS 64-bit. Сервер - NFS QNAP с QTS 4.0.2 2016/01/09.)
Стив

Да, когда я обновил свой сервер до Ubuntu 16, это была проблема и решение.
Шридхар Сарнобат

2
Будьте осторожны с этим. NFSv3 древний и давно устарел; это действительно не должно больше использоваться (и это было даже верно, когда этот пост был написан).
Майкл Хэмптон

7

В моем случае работает с использованием nfs4:

$ sudo mount -t nfs4 имя-сервера: / / путь / к / mount

В /etc/exportфайле на сервере

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

fsid=0делает /Path/to/exportкорневой каталог при монтировании общего ресурса.

crossmntпотому что у меня есть несколько других дисков в экспортированной файловой системе, к которым я также хочу получить доступ.

no_root_squash, потому что я хочу получить доступ как пользователь root (su) со стороны клиента. Я уверен, что я единственный, кто может сделать это в моей локальной сети.

Сервер и клиенты Ubuntu 14.04 64bit.

Если вы хотите использовать nfs3, ответ @ fumisky-wells также работает для меня.


Вы заработали себе поддержку, сэр; У меня есть NAS, поэтому изменение файла / etc / export не вариант, но указание полного пути помогло. отлично сработано.
MDMoore313

4

Я получаю одно и то же сообщение об ошибке, и моя проблема связана с тем, что клиентский компьютер имеет два сетевых интерфейса, подключенных к одной локальной сети. Сервер был настроен на ожидание определенного IP-адреса, и трафик направлялся на второй интерфейс, имеющий IP-адрес DHCP. Поэтому я только что настроил второй интерфейс на статический IP-адрес, а также добавил второй статический IP-адрес в конфигурацию сервера.


Человек, я хотел бы, чтобы это было больше к вершине, это именно то, что происходило в моем случае
Брайан Лейшман

3

/etc/exportsдолжно быть отредактировано на NFS сервера машины, а не клиенты, как Вы заявляете вы сделали, как это проверяется сервером NFS , когда клиент запрашивает доступ к общему ресурсу.

Если вы добавили следующее /etc/exportsна сервер NFS, оно должно работать:

/opt/exhibitor/conf 10.66.136.129(rw)
/opt/exhibitor/conf 10.66.138.181(rw)
/opt/exhibitor/conf 10.66.138.183(rw)

У меня уже есть это в моем файле экспорта на машине. И затем я монтирую его с machineB и machineC, и он как-то не работает .. Возможно ли, что я добавил одну и ту же информацию во все три машины в файле экспорта, это будет проблемой? Я должен добавить только в машине?
Арсенал

1
@TechGeeky Перезагружали ли вы экспорт NFS после этого, используя exportfs -a?
Крис Даун

Я только что сделал это, и теперь он отлично работает. Я пытаюсь понять все это лучше, поэтому мой первый вопрос: машина A - это сервер NFS, а машина B и машина C - клиенты. Правильно? Второй вопрос: если machineA - это мой NFS-сервер, то только в файл / etc / exports на machineA я добавлю три вышеупомянутые строки, как вы упомянули в своем решении, и мы не будем касаться файла экспорта machineB и machineC? Верный?
Арсенал

@TechGeeky Пока вы монтируете общий ресурс на машине A, это верно в обоих случаях.
Крис Даун

Благодарю. Теперь я понимаю это намного лучше. Почему я задал этот вопрос, потому что у меня также есть подобные вещи в промежуточной среде. И что я сделал на этих трех машинах в промежуточной среде, я добавил те же три строки во все мои файлы / etc / exports на трех машинах вместо того, чтобы добавлять их только на machineA, но все же он работает нормально. И теперь я поняла всю концепцию более четко. Спасибо за помощь.
Арсенал

2

Если nfs-client пытается смонтировать экспортированный общий ресурс внутри контейнера linux, тогда контейнер должен работать в привилегированном режиме.

В случае докера;

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


2

Для меня проблема заключалась в том, что я использовал IP-адрес сервера /etc/exports/вместо клиентского .

Дело в том, что вы должны поместить все ips, к которым вы предоставляете доступ, на сервер /etc/exports/


1

После нескольких часов борьбы с этим же сообщением об ошибке моя проблема оказалась не более сложной, чем старые добрые разрешения для файлов Linux на хосте NFS.

Папка, к которой я пытался поделиться ( /home/foo/app/share), имела правильные разрешения, но поскольку в домашнем каталоге пользователя ( /home/foo) был установлен 0750режим, NFS не смогла перейти в нее для доступа к общему каталогу.

Как только я установил домашний каталог пользователя в режим 0751, служба NFS смогла перейти в него, и я смогла смонтировать общий ресурс со своего клиентского компьютера.


0

Для меня проблема была в том, что мой маршрутизатор изменил используемый IP-адрес клиента, так что вход /etc/exportsна серверном компьютере разрешил доступ только для того IP-адреса, который больше не использовался.


0

То же самое может произойти, если вы попытаетесь смонтировать общий ресурс NFS на экземпляре Virtual Box с сетевым адаптером, настроенным как NAT.

Выбор Bridged Adapterв настройках сети виртуальной машины решает эту проблему.



0

Эта ошибка также может быть вызвана попыткой смонтировать зашифрованный путь. (Например, в вашем домашнем каталоге, если вы решили зашифровать его)


0

Единственное решение, которое работало для меня, было экспортировать файловые системы, начиная с /srv. Похоже, что это ограничение (или опция по умолчанию, по крайней мере) NFSv4.

Так как я пытался экспортировать USB-накопитель, к которому автоматически /mediaмонтируется, мне нужен был способ его «монтирования» /srv. Для этого:

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

И в /etc/exports:

/srv/videos 192.168.0.200(ro)

Когда я экспортировал /media/jim/wdportable/videosнапрямую, попытка монтирования на клиенте всегда приводила к mount.nfs: access denied by server.

-o v3Решение работало, но я не хочу , чтобы заставить v3.


2
Я могу почти гарантировать, что это было бы связано с разрешениями для /media/jimпапки. Если каталог, которым вы пытаетесь поделиться, является (или находится внутри) каталогом только с режимом 700или 750режимом, NFS не сможет перейти в него. Если бы вы изменились /media/jimна 751, это, вероятно, будет работать.
Дейл Андерсон

@DaleAnderson прав. После успешного sudo mount -o v3 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-share(распбиан на Raspi 3 B +) я тоже попытался sudo chmod 751 /media/pi. После этого я больше не нуждался -o v3: sudo mount 192.168.0.200:"/media/pi/mydrive" /mnt/nfs-shareсделал работу (после размонтирования). Большое спасибо @DaleAnderson.
Томас Праксл

Это, наверное, проблема. Я думаю, что я привык к древним временам, когда сервер NFS просто работал от имени пользователя root и слепо экспортировал то, что ему было сказано. Я проверю это.
Джим Стюарт

0

Следует отметить, что на связанной странице, которая привела меня сюда, был мой правильный ответ: вы НЕ можете использовать * символ подстановки в IP-адресе при экспорте. Он либо * (все IP-адреса), либо используется в качестве подстановочного знака в доменных именах IE: * .domain.com.

Например: это правильно

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

Это не будет работать (или, по крайней мере, неправильно), но работало у меня годами, пока я не попытался смонтировать экспорт с виртуальной машины Fedora.

/Path/to/export 192.168.1.*(flags)


Я думаю, что причиной этой ошибки, возможно, является NFSv4, потому что я знаю, что Fedora использует новейшие технологии, и моя старая виртуальная машина работала нормально, но, вероятно, использовала старую версию NFS. Просто предположение.
FreeSoftwareServers
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.