Как настроить монтирование NFSv4 таким образом, чтобы владелец файлов, созданных пользователем root на клиенте NFS, отображался как "root:root", а не "nobody:nogroup" на клиенте?

У меня есть сервер Ubuntu 16.04, на котором установлена ​​оснастка Nextcloud (nextcloud.lan) и Ubuntu 16.04 NAS, настроенный для обслуживания файлов через NFSv4 (nas.lan). Я хотел бы смонтировать каталог /var/snap/nextcloud на nextcloud.lan через каталог NFS, экспортируемый из NAS, так что все файлы, используемые Nextcloud, хранятся на NAS.

Проверка подлинности NFS на NAS настроена по умолчанию AUTH_SYS/AUTH_UNIX. Пожалуйста, смотрите следующие файлы конфигурации для nas.lan:

/etc/idmap.conf:

[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = localdomain

/etc/exports:

/vol0/export 192.168.2.0/24(rw,fsid=0,insecure,no_subtree_check,async) /vol0/export/nextcloud 192.168.2.0/24(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

И для nextcloud.lan:

/etc/fstab:

nas:/nextcloud /mnt nfs auto 0 0

/etc/idmap.conf:

[General]

Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = localdomain

В настоящее время, когда пользователь с идентификатором uid, который существует как в nas.lan, так и в nextcloud.lan, создает файл (например, имя пользователя jacob, uid 1000) в смонтированном каталоге на nextcloud.lan, файл создается с соответствующим владельцем в обеих системах. (например, Джейкоб: Джейкоб).

Однако, когда пользователь root создает файлы в экспортированном каталоге на nextcloud.lan, файлы, как представляется, принадлежат "nobody:nogroup" в обеих системах. Снимок Nextcloud может запускаться только от имени пользователя root, и поэтому мой вопрос заключается в том, как сделать так, чтобы файлы, созданные пользователем root на клиенте NFS nextcloud.lan, отображались как "root:root", а не "nobody": nogroup '?

Я читал, что NFS выполняет некоторые специальные действия с правами пользователя root и не отображает идентификатор пользователя root между системами из соображений безопасности. Мне интересно, есть ли способ переопределить это?

Я видел, что есть один вариант под названием no_root_squash, но это не сработало для меня.

Я также попытался установить следующее в /etc/idmapd.conf на nextcloud.local, но это также не работает для меня:

[Mapping]
Nobody-User=root
Nobody-Group=root

До сих пор я пробовал все, что мог придумать, чтобы никого не отобразить: nogroup на root:root в системе nextcloud.lan, но безуспешно.

Буду признателен за любую информацию о том, как это сделать. Спасибо за помощь.

2 ответа

У вас есть две записи в файле экспорта, которые перекрываются:

/vol0/export           192.168.2.0/24(rw,fsid=0,insecure,no_subtree_check,async)
/vol0/export/nextcloud 192.168.2.0/24(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

любой клиент в подсети 192.168.2.0/24 может (и, вероятно, использует) использовать первую запись и в конечном итоге сопоставить root с пользователем никто. Попробуйте сузить диапазон IP:

/vol0/export  192.168.2.0/24(rw,fsid=0,insecure,no_subtree_check,async) 192.168.2.1(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

где 192.168.2.1 предполагается для IP-адреса nextcloud.lan.

Я смог добиться этого с помощью следующей модификации /etc/exports:

/vol0/export           192.168.2.0/24(rw,fsid=0,insecure,no_subtree_check,async,no_root_squash)
/vol0/export/nextcloud 192.168.2.0/24(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

Затем я смог смонтировать /var/snap/nextcloud через NFS в экспортируемый каталог на NAS, и все, кажется, работает хорошо.

Однако я согласен с @AndrewHenle - этот подход кажется опасным и небезопасным, и было бы лучше найти подход, который отобразил бы пользователя root в системе nextcloud.lan пользователем без полномочий root в системе nas.lan. К сожалению, оснастка nextcloud должна быть запущена от имени пользователя root. Я могу породить это в отдельный вопрос.

Другие вопросы по тегам