ACL NFSv4: getfacl отображает UID, но требуется имя пользователя

Вопрос или проблема

Мне удалось настроить сервер и клиент 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 монтирований:

  1. Проверьте соответствие доменов в /etc/idmapd.conf:

    [General]
    Domain = mytestdomain.xyz

    Одинаковая конфигурация должна быть и на сервере, и на клиенте.

  2. Перезапуск idmapd-сервера на обеих сторонах:

    sudo systemctl restart nfs-idmapd
  3. Настройте сервер и клиент для разрешения ID mapping в ядре:
    На сервере:

    echo "N" > /sys/module/nfsd/parameters/nfs4_disable_idmapping

    На клиенте:

    echo "N" > /sys/module/nfs/parameters/nfs4_disable_idmapping
  4. Очистите кэш 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 правильно запущена и функционирует.

Оцените материал
Добавить комментарий

Капча загружается...