Я использую следующую настройку:
Сервер NFS (Ubuntu 16.04 LTS)
Клиент NFS
На стороне клиента пользователь test
существует с тем же UID, что и на стороне сервера. Но мне нужно использовать пользователя testmf
а не test
один.
Я прочитал много документации и ответов от StackOverflow / StackExchange, и по некоторым причинам у меня ничего не работает.
Один из многих ответов - изменить файл /etc/idmapd.conf
.
Итак, вот оно с обеих сторон:
Сервер
[General]
Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
# Domain = localdomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
На стороне клиента:
[General]
Verbosity = 9
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if it differs from FQDN minus hostname
# Domain = localdomain
Domain = example.com
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
[Translation]
Method = static
[Static]
test@nfsserver.example.com = testmf
test@192.168.0.1 = testmf
test@nfsserver = testmf
И я использую такую команду для монтирования каталога на клиенте:
mount 192.168.0.1:/home/test/my_exp_dir /home/testmf/my_imp_dir
И когда я делаю ls -l /home/testmf/my_imp_dir
Получаю что-то вроде этого:
-rw-r--r-- 1 test test 326025780 May 9 2017 allCountries.zip
и нет
-rw-r--r-- 1 testmf testmf 326025780 May 9 2017 allCountries.zip
Если я сделаю это touch testfile
Я понимаю:
-rw-r--r-- 1 test test 326025780 May 9 2017 allCountries.zip
-rw-r--r-- 1 testmf testmf 0 Jun 9 18:57 testfile
Или ls -ln
-rw-r--r-- 1 1300 1300 326025780 May 9 2017 allCountries.zip
-rw-r--r-- 1 1350 1350 0 Jun 9 18:57 testfile
Я попытался повысить уровень детализации, и нигде в моих журналах я не вижу сопоставления пользователей от одного UID к другому, как я мог видеть в некоторых ответах. Я заметил две вещи: настройки ядра /sys/module/nfs/parameters/nfs4_disable_idmapping
был установлен на Y
и даже после перехода на N
, похоже, ничего не работает.
Второе, что я обнаружил, это двух записей, которых нет на моем клиентском сервере:
И я не знаю, как его добавить, особенно если nfsidmap недоступен.
Я прочитал, что мне также нужно перезапустить idmapd
обслуживание после этого изменения. Но в Debian 9 это невозможно ... Или, по крайней мере, я не нашел, как это сделать ...
Я также изменил файл /etc/default/nfs-common
установить переменную NEED_IDMAPD=yes
и ничего не делает даже после перезагрузки ...
Так что мой вопрос может быть довольно глупым, но как я могу активировать nfsidmapd в Debian Stretch? У меня действительно нет возможности, ключевые слова для поиска и официальная документация Debian здесь не очень полезны, за исключением случаев, когда я полностью слеп!
Спасибо заранее за вашу помощь.
Существует большая путаница с отображением идентификаторов nfs. Отображение используется, когда субъект строковой формы, например test@example.com, необходимо преобразовать в числовой идентификатор и наоборот. Однако, когда вы монтируете с помощью sec = sys, что вы, очевидно, делаете, тогда все запросы аутентифицируются с использованием локального UID и GID клиента. IOW, на прикоснуться UID клиентского процесса будет владельцем файла на сервере.
Вторая путаница заключается в том, что Статический может использоваться для определения статического сопоставления. Согласно странице руководства:
«Статический» метод перевода использует статический список имен, прошедших проверку подлинности GSS, в имена локальных пользователей.
Который буквально ожидает участников, прошедших проверку подлинности GSS:
if (strcmp(secname, "krb5") != 0 && strcmp(secname, "spkm3") != 0)
return -EINVAL;
Поскольку слишком многим людям требуется статическое сопоставление, это, вероятно, придется исправить, однако вы не можете исправить использование UID процесса.
Чтобы решить эту проблему дружественным к NFS способом, лучшим вариантом будет использование kerberos и монтирование с sec = krb5. В этом случае вы можете запускать процесс с билетом kerberos для одного пользователя, но локально иметь другой UID. В таком сценарии можно использовать статическое сопоставление, чтобы избежать использования LDAP.
Ну, это мой ответ, возможно, не совсем то, что я хотел, но, по крайней мере, он решил мою проблему, и я продолжаю.
По сути, я обеспечил, чтобы все пользователи входили в одну группу с одним и тем же GID на всех задействованных серверах. Затем я установил идентификатор группы для всех каталогов в общем каталоге с помощью:
find /share-dir -type d -exec chmod g+s {} \;
Я также проверил, что umask был установлен на 007 вместо 022, 027.