Я пытаюсь настроить NFSv4 с аутентификацией KRB5 в соответствии с RedHat's текущие рекомендации, используя SSSD для доступа к Active Directory. Сервер NFS в этом случае представляет собой устройство NAS, которое обрабатывает сопоставление пользователей между учетными записями user @ domain и UID / GID, полученными из AD / LDS. Я отключил сопоставление идентификаторов в SSSD, так как NAS не имеет того же метода хеш + модуль, доступного для расчета «самодельных» идентификаторов.
В своем текущем состоянии NAS распознает права собственности пользователя и группы на права доступа к файлам и применяет их должным образом. Тем не мение, ls
вывод из клиентских дисплеев nobody nobody
на любые файлы / папки, принадлежащие пользователю домена.
[root@nfsclient ~]# ls -al /mnt/nfs4test/
total 0
drwxr-xr-x. 1 nobody nobody 0 Jul 17 10:46 .
drwxr-xr-x. 3 root root 22 Jul 17 10:47 ..
При максимальном уровне детализации журнала для idmapd и sssd единственное событие, которое я видел, указывающее на наличие проблемы: Jul 17 11:48:23 nfsclient nfsidmap[10601]: nss_getpwnam: name 'nfsadmin' not found in domain 'testdomain.local'
Я также подтвердил с помощью захвата пакетов, что ожидаемые строки имени пользователя / группы возвращаются для владельца и группы (не идентификаторов) в ответе поиска:
fattr4_owner: nfsadmin@testdomain.local
fattr4_owner_group: Domain Admins@testdomain.local
Среда состоит из DC 2012R2, клиента CentOS 7.3 и проприетарного устройства NAS (на базе CentOS), выступающего в качестве сервера. Помимо установки необходимых пакетов и конфигурации IP / NTP, это мои шаги по настройке на клиенте:
Domain = testdomain.local
в /etc/idmapd.confrealm join testdomain.local -U nfsadmin
ldap_id_mapping = False
в /etc/sssd/sssd.confsec=sys
передать право собственности на пользователя доменаНезависимо от того, используется ли sec = sys или sec = krb5, root или учетная запись домена, вывод ls одинаков.
Единственные подходящие решения, которые я нашел при поиске, указали на необходимость создания локальных учетных записей для пользователей, но похоже, что это нарушит цель интеграции AD. Я ожидал, что можно будет создать нового пользователя AD, добавить его в соответствующие группы для разрешений на доступ, установить UID / GID, после чего этот пользователь должен иметь доступ к файлам при экспорте после того, как они подключились по SSH к клиентская машина.
Конфигурация клиента просто извлекает данные из Active Directory (только сервер / NAS использует AD / LDS). UID / GID в активном каталоге были заполнены вручную через PowerShell (например, Get-ADUser "nfsadmin" | Set-AdUser -replace @{uidNumber=10001}
- пытаюсь сделать этот 2016 совместимым и избегать использования adminui / nis или вкладки атрибутов UNIX, хотя в данный момент я тестирую 2012R2)
Как я могу заставить NSS / nfsidmap правильно переводить имена пользователей / групп домена, возвращаемые сервером?
Я бы очень предпочел что-то, что не требует ручного создания локальной учетной записи для каждого отдельного пользователя, поэтому масштабирование до тысяч пользователей не станет большой проблемой. Кроме того, невозможно заставить сервер (в данном случае NAS-устройство) возвращать идентификаторы вместо имен.
В этом случае idmapd использовал nsswitch по умолчанию, но методы интеграции AD, подробно описанные в упомянутом выше документе, не имеют ссылок на какие-либо модификации idmapd.conf.
Комментарии в idmapd.conf говорят: «Распределенные методы включают nsswitch, umich_ldap и static». Однако это не полный список плагинов, и в этом случае следует использовать службы безопасности системы (sss).
/etc/idmapd.conf:
[General]
Domain = testdomain.local
[Translation]
Method = sss
Это стало для меня очевидным, когда я понял, что sss отлично обрабатывает сопоставление, когда ldap_id_mapping все еще включен (но вызывает проблемы сопоставления на стороне сервера с устройством NAS), а ошибка "не может быть найдена в домене" сообщается nss_getpwnam .
Я до сих пор не понимаю, почему NSS не смог выполнить работу, когда sss
является одним из перечисленных баз данных для passwd и group в nsswitch.conf, но вышеуказанное изменение, похоже, работает.