Вопрос или проблема
Мне удалось настроить сервер и клиент NFSv4.
Я могу создавать права ACL на файл “test” через
# nfs4_setfacl -a A::[email protected]:rwaDxtTcCy test
“user1” аутентифицируется через SSSD/AD, и его UID определяется учетной записью AD. “user1” НЕ является локальным пользователем на сервере NFS. Это означает, что аутентификация SSSD/AD работает как на клиенте, так и на сервере и разрешается до одинакового uid=500128331.
При чтении ACL я вижу правильный uid – но я хочу видеть имя пользователя “[email protected]“
# nfs4_getfacl test
# file: test
A::OWNER@:rwaDxtTcCy
A::500128331:rwaDxtcy
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
Я пробовал несколько конфигураций с “/etc/idmap.conf” и “sudo systemctl start nfs-idmapd” – но без успеха.
Я прошу поддержки в получении правильной привязки uid и отображении в списке ACL. Я ожидаю достижения этого:
# nfs4_getfacl test
# file: test
A::OWNER@:rwaDxtTcCy
A::[email protected]:rwaDxtcy
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
Благодаря этому обсуждению [https://unix.stackexchange.com/questions/438939/how-to-get-nfsv4-idmap-working-with-sec-sys/464950#464950][1]
Я смог решить проблему, и теперь я вижу правильное отображение, как и ожидалось. Далее приводится в основном копирование и вставка из вышеприведенной ссылки – но я думаю, что не повредит иметь дублирование решения.
Как указано в вышеприведенном посте, оказывается, что домены в “/etc/idmapd.conf” могут быть произвольно выбранным текстом (например, “Domain = mytestdomain.xyz”), если они одинаковы на обоих серверах:
На клиенте:
# sudo /sbin/nfsidmap -d
mytestdomain.xyz
На сервере:
# sudo /sbin/nfsidmap -d
mytestdomain.xyz
После этого изменения требуется перезапуск сервера idmapd на клиенте И сервере:
sudo systemctl daemon-reload; sudo systemctl restart nfs-idmapd; nfsidmap -c
Предупреждение: между перезапуском сервера и видимым эффектом в ответе “nfs4_getfacl” на стороне клиента может быть задержка – у меня это иногда было больше 1 минуты, и я думал, что эффекта нет – но я просто был недостаточно терпелив.
Самое важное, что нужно было сделать – это включить привязку идентификаторов в ядре. Потому что ядро по умолчанию отключает привязку идентификаторов для NFSv4 sec=sys монтирований. Установка параметра nfs4_disable_idmapping в значение false включает привязку идентификаторов для sec=sys монтирований.
На сервере:
echo "N" > /sys/module/nfsd/parameters/nfs4_disable_idmapping
и на клиенте(ах):
echo "N" > /sys/module/nfs/parameters/nfs4_disable_idmapping
А затем очистите кэш idmap на клиенте:
sudo /sbin/nfsidmap -c
Теперь я вижу имя пользователя@домен, указанное для NFS ACL:
# nfs4_getfacl test
# file: test
A::OWNER@:rwaDxtTcCy
A::[email protected]:rwaDxtcy
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
Чтобы сделать эти изменения постоянными, создайте файлы конфигурации в /etc/modprobe.d/,
на сервере (modprobe.d/nfsd.conf):
options nfsd nfs4_disable_idmapping=N
на клиенте(ах) (modprobe.d/nfs.conf):
options nfs nfs4_disable_idmapping=N
Перевод UID в имена пользователей в данном случае является ответственностью сервера, а не клиента. Согласно архитектуре NFSv4, такие имена, как [email protected]
, – это то, что сервер NFS на самом деле отправляет по сети – числовые идентификаторы не должны отправляться вообще – и инструмент Linux nfs4_getfacl
просто показывает все, что он находит в атрибуте system.nfs4_acl
.
Так что вам нужно убедиться, что на сервере NFS запущен rpc.idmapd
(nfs-idmapd.service), и что он может переводить UID в имена – и убедитесь, что он настроен для использования одного и того же имени домена idmap, что и клиент (не обязательно совпадает с именем AD).
Проверьте отображения (закэшированы в ядре) через /proc/net/rpc/nfs4.idtoname/content
:
server> sudo cat /proc/net/rpc/nfs4.idtoname/content
#domain type id [name]
gss/krb5p group 100 [email protected]
gss/krb5p user 2001 [email protected]
gss/krb5p user 510 [email protected]
gss/krb5p user 33 [email protected]
На стороне клиента rpc.idmapd больше не используется; ядро вместо этого запускает nfsidmap
для каждого отображения, которое необходимо выполнить, и отображения кэшируются в другом месте (используя ‘keyring’, nfsidmap -l
).
Ответ или решение
Настройка и управление ACL (Access Control Lists) в NFSv4 могут быть вызовом, особенно когда требуется отображение имен пользователей вместо числовых UID. Проблема, описанная в вопросе, часто связана с неправильной настройкой системы имён или отсутствием необходимых служб на сервере и клиенте NFS. Здесь я предложу теоретическое объяснение, пример с решений и его практическое применение.
Теоретическая часть
Система управления именами и идентификаторами в NFSv4 отличается от предыдущих версий, поскольку она полагается на доменные именования пользователей и групп. Это позволяет использовать централизованные сервисы для аутентификации, такие как Active Directory (AD), через SSSD, как указано в вопросе.
Распознавание и отображение имен пользователей в NFSv4 зависят от сервиса rpc.idmapd
, который преобразует числовые UID и GID в текстовые имена и наоборот. Для этого сервиса критически важно, чтобы на сервере и клиенте были одинаково настроены конфигурационные файлы, в частности, /etc/idmapd.conf
, который определяет домен имен, используемый для отображения идентификаторов.
Пример решения
Ваши шаги по настройке, которые вы описали, корректны, и они следуют лучшим практикам. Важно удостовериться, что ID mapping включен как на сервере, так и на клиенте. Без этой настройки NFSv4 по умолчанию выключает преобразование для sec=sys
монтирований:
-
Проверьте соответствие доменов в
/etc/idmapd.conf
:[General] Domain = mytestdomain.xyz
Одинаковая конфигурация должна быть и на сервере, и на клиенте.
-
Перезапуск
idmapd
-сервера на обеих сторонах:sudo systemctl restart nfs-idmapd
-
Настройте сервер и клиент для разрешения ID mapping в ядре:
На сервере:echo "N" > /sys/module/nfsd/parameters/nfs4_disable_idmapping
На клиенте:
echo "N" > /sys/module/nfs/parameters/nfs4_disable_idmapping
-
Очистите кэш ID mapping на клиенте:
sudo /sbin/nfsidmap -c
Применение на практике
Эти шаги должны успешно обеспечить отображение имен пользователей, вместо UID в списках ACL. Важно понимать, что конфигурация должна выполняться на обеих сторонах NFS соединения. Когда все нужные настройки применены, убедитесь в их актуальности, проверив содержимое /proc/net/rpc/nfs4.idtoname/content
на сервере для удостоверения, что отображение действительно работает:
sudo cat /proc/net/rpc/nfs4.idtoname/content
Эта команда проверяет, какие пользователи и группы сопоставлены через текущие настройки сервиса idmap
. Если после всех изменений проблема не решается, стоит провести диагностику сетевых взаимодействий и увериться, что служба rpc.idmapd
правильно запущена и функционирует.