Назад | Перейти на главную страницу

NFSv4 с idmap

На сервере NFS появляются следующие ошибки. Не могли бы вы посоветовать, как это исправить?

Подробности:

Система: CentOS версии 6.4, NFS: nfs-utils-1.2.3-36

# cat /etc/idmapd.conf

[General]
Domain = domain.com

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

[Translation]
Method = nsswitch

Sep  3 08:25:28 snode1 rpc.idmapd[1382]: nss_getpwnam: name '0' does not map into domain 'domain.com'
Sep  3 08:25:29 snode1 rpc.idmapd[1382]: nss_getpwnam: name '500' does not map into domain 'domain.com'

РЕДАКТИРОВАТЬ: 03 сентября 2013 10:41

Обратите внимание, что я использую NFSv4, и эти ошибки появляются только на сервере NFS (а не на клиентах NFS).

Сервер:

# cat /etc/sysconfig/nfs

MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
...
RPCNFSDARGS="-N 2 -N 3"

Клиенты:

# cat /etc/fstab

server:/     /data  nfs4    defaults,hard,intr,timeo=15,_netdev,noatime,nodiratime,nosuid    0 0

Изменить: среда, 11 июня, 14:52:50 BST 2014

# getent passwd "0" | cut -d: -f1
root
# getent passwd "500" | cut -d: -f1
user1

-

# grep "^passwd" /etc/nsswitch.conf 
passwd:     files

Я собираюсь немного предположить. Что вы получите, если разрешите UID «0» или «500» на своем сервере NFS? Это случайно не локальные учетные записи?

Причина, по которой я предлагаю это, заключается в том, что NFSv4 по своей конструкции ссылается на имена учетных записей в домене и пытается избежать «локальной аутентификации» из предыдущих версий NFS. Поэтому он использует idmapd, который переводит имена учетных записей, передаваемые в пакетах NFS, для преобразования имени пользователя в UID / GID.

Как вы правильно определили, похоже, что здесь сломано, поэтому мой вопрос будет в том, какой домен аутентификации вы используете, и когда вы его запрашиваете, получаете ли вы ответ для UID 0 и 500?

Я видел подобное, когда, например, сервер смотрел неправильную ветку каталога LDAP (ну, активный каталог) по сравнению с клиентом. Поскольку он не смог разрешить отношения UID / имя пользователя, он сломался и в результате перевел этих пользователей в «никого».

У вас настроено разрешение с помощью nsswitch - что nsswitch говорит для 'passwd'? (В первую очередь на сервере, поскольку там, кажется, существует проблема).

Изменить: ОК, поэтому в соответствии с вашим 'passwd' у вас есть 'files' в качестве локальной базы данных - например, /etc/passwd. Это означает, что вы сопоставляете UID / GID через локальные учетные записи. Вы не должен использовать UID с NFSv4 - это должны быть имена пользователей.

Однако поиск в Google дает мне: http://www.spinics.net/lists/linux-nfs/msg38598.html

Поэтому следующий вопрос - используете ли вы аутентификацию sys? Я предполагаю, основываясь на вашем fstab, что вы есть, и в этот момент - это кажется ожидаемым поведением - ваши клиенты используют sys и, следовательно, передают UID / GID. idmapd жалуется, потому что они недействительные пользователи (это UID).

Если на вашем клиенте вы «касаетесь» файла как UID 500 или 0, как он будет выглядеть на клиенте и сервере (ls -l для получения имени пользователя, ls -ln для получения uid)? Если это работает правильно, похоже, это артефакт обратной совместимости между NFSv3 Auth sys и NFSv4, и сообщения безвредны.

Вы можете подумать об обновлении до аутентификации Kerberos или аналогичного, но по опыту это нетривиальное упражнение. (Хотя и с некоторыми довольно удобными преимуществами). Связанное мной сообщение (след) означает, что это сообщение об ошибке перестает появляться в более поздних версиях ядра.

Похоже, вы используете NFSv3, который отправляет по сети только числовые идентификаторы пользователей и групп.

Чтобы idmapd работал, вам нужно будет использовать NFSv4, который отправляет идентификаторы user @ domain, понятные idmapper и сопоставленные с локальными учетными записями (так что вам не нужны одинаковые uid / gid как на сервере, так и на клиенте).

Попробуйте смонтировать этот общий ресурс с параметром -t:

mount -t nfs4 server:/path /mountpoint

пожалуйста, проверьте, получены ли следующие решения из форум Gentoo помочь тебе:

 1. On the NFS server, /etc/hostname did not contain the FQDN, just the local hostname.
 2. This particular client had an unconfigured /etc/idmapd.conf. It had Domain = localdomain instead of Domain = FQDN-minus-hostname. 

Для вашей настройки это похоже на второй вариант.

Google для точного сообщения об ошибке «nss_getpwnam: имя '0' не отображается в домен» дает вам множество результатов, которые также могут помочь вам (просто указал на наиболее многообещающие)