Ситуация:
Мы используем устройство Nexenta для обслуживания файлов NFS (nfs v3). Мы разделяем путь для анонимного доступа для чтения / записи.
У нас есть хост Linux, который мы хотели бы подключить к экспортированному общему ресурсу для чтения / записи, а также разрешить анонимный доступ для чтения / записи к этому смонтированному общему ресурсу на этом клиентском компьютере. К сожалению, в итоге происходит то, что root может писать в общую папку, а непривилегированные пользователи - нет.
Используйте следующие методы для монтирования общего ресурса:
# mount -t nfs -o rw 10:10:xx:xx:/path/to/share /mnt/mounted_path
# mount -t nfs -o rw,users 10:10:xx:xx:/path/to/share /mnt/mounted_path
# mount.nfs 10:10:xx:xx:/path/to/share /mnt/mounted_path -o rw
У нас есть конкретный пользователь, которого мы собираемся использовать для анонимного использования на общей папке. Поэтому я попытался смонтировать том от имени этого пользователя:
# su - shared_user
$ sudo mount.nfs 10:10:xx:xx:/path/to/share /mnt/mounted_path -w -o user=shared_user,rw
mount.nfs: an incorrect mount option was specified
Пошел и прочитал: http://nfs.sourceforge.net/nfs-howto/ar01s06.html.
Решил попробовать следующее, которое дает продолжающиеся ошибки при попытке монтирования:
# mount -t nfs -orw,no_root_squash 10:10:xx:xx:/path/to/share /mnt/mounted_path
mount.nfs: an incorrect mount option was specified
# mount -t nfs -orw,nroot_squash 10:10:xx:xx:/path/to/share /mnt/mounted_path # for grins and giggles.
mount.nfs: an incorrect mount option was specified
$ sudo mount.nfs 10:10:xx:xx:/path/to/share /mnt/mounted_path -w -o user=shared_user,rw,no_root_squash
mount.nfs: an incorrect mount option was specified
Я просто SOL или что-то мне здесь принципиально не хватает? Я пытаюсь найти святой Грааль? Я никогда сильно не использовал NFS, поэтому сейчас я немного растерялся. TIA!
ХОРОШО. Догадаться. Во-первых, я использую версию Nexenta 3.1.3.5. Nexenta - это устройство на основе OpenSolaris, которое продает блочное хранилище через CIFS, NFS, Rsync, WebDAV и FTP. В нашем случае мы используем его исключительно для NFS (по умолчанию v3. V4 недоступен для этой версии).
Итак, tl; dr; на стороне Nexenta:
Войдите в Nexenta как root:
$ ssh root@xx.xx.xx.xx
Password:
Last login: Wed Aug 24 11:17:33 2016 from xx.xx.xx.xx
nmc@nex01:/$ option expert_mode = 1
nmc@nex01:/$ !bash
You are about to enter the Unix ("raw") shell and execute low-level Unix command(s). Warning: using low-level Unix commands is not recommended! Execute? Yes
root@nex01:/volumes#
root@nex01:/volumes# grep nfs /etc/passwd
nfs:x:60001:60001:NFS Anonymous Access User:/:/bin/sh
Обратите внимание на числа после первого x:#####:#####
- это uid и gid соответственно.
на стороне клиента: создать пользователя:
# groupadd nfs -g 60001 && useradd nfs -g 60001 ## untested. I did it the long way through natural process of elimination, so be careful here.
Теперь все хорошо.
Подключите том и убедитесь, что ваш вновь созданный пользователь nfs может писать на том NFS.
Длинная версия:
Насколько я могу судить, сторона NFS настроена правильно. Документация была полезной, но в некотором смысле это было всего лишь разбиение панировочных сухарей.
"Разрешить анонимный доступ к этому общему ресурсу. Общему каталогу верхнего уровня будет предоставлен доступ для чтения и записи для анонимного пользователя nfs. Если для режима рекурсивного общего доступа установлено значение true, это свойство распространяется на существующие подпапки. Обратите внимание, что анонимное чтение Доступ / write не наследуется - анонимный доступ к будущим подпапкам не будет разрешен до тех пор, пока явно не будет запрошено. Имя анонимного пользователя - 'nfs' ».
Мой shared_user
в итоге превратился в "nfs", который все еще не удался (см. OP). Я решил, потому что считал это маловероятным, чтобы мой UID на стороне клиента совпадал с UID для 'nfs' на устройстве. Мне пришлось войти в систему, запустить оболочку bash, а затем запустить id
команда для получения UID, который в моем случае был 60001.
На клиенте переделал nfs
пользователь, чтобы сопоставить UID на устройстве. Очевидно, устройству действительно требуется, чтобы UID / GID соответствовал своему собственному, чтобы это работало. Я полагал, что сервер NFS проигнорирует это. Очевидно, в этом и заключалась суть проблемы.
Теперь устройство использует nfs: nobody для user: group. nobody
на стороне клиента (Linux) другой UID, и изменение UID никому не потребовало бы большего внимания, и я не знаю, на что я мог непреднамеренно повлиять, изменив этот groupid, поэтому я не трогал его. В nfs
Пользователь на клиентской машине не существовал до того, как я начал возиться, поэтому не было риска что-либо сломать. Есть nfsnobody
на стороне клиента. Я не тестировал его, и я почти уверен, что это не сработало бы, так как документация специфична для идентификатора пользователя.
Я также должен указать здесь, что устройство было специально настроено на использование sysauth для аутентификации. Использование auth = none не было вариантом, поскольку NFSv3, похоже, не нравится. :)
вот и все.