Как я могу сделать сопоставление UID NFSv4 между системами с несоответствиями UID?

11

Я работаю в лаборатории с тремя системами Ubuntu и хотел бы подключить некоторые файловые системы через NFS. Однако, хотя системы имеют одни и те же имена пользователей, UID и GID не совпадают, поскольку эти три системы были настроены отдельно. Когда я монтирую файловую систему NFS из одной системы в другую, право собственности обнаруживается неправильно. Например, если UID 1000 является alice на сервере server1 и тот же UID 1000 является bob на сервере server2, то, когда server1 монтирует экспортированную файловую систему server2, файлы bob, по-видимому, принадлежат Алисе.

Так есть ли способ заставить NFS (v4) конвертировать UID между серверами через их имена пользователей? В поисках этого я видел множество ссылок на Kerberos, LDAP или NIS, что кажется огромным излишним для такой простой задачи и может оказаться невозможным, поскольку эти системы не управляются централизованно. Эта ссылка, кажется, указывает на то, что то, что я спрашиваю, невозможно. Это правильно?

Изменить: я попробовал каждую конфигурацию для /etc/idmapd.confэтого я могу найти или найти в Интернете, и хотя процесс idmapd явно работает, до сих пор я не видел никаких доказательств того, что NFS делает какие-либо попытки использовать его вообще, и это никогда не оказывало никакого влияния на идентификаторы пользователей, сообщаемые при монтировании NFS.

Райан К. Томпсон
источник
1
Я считаю, что самое простое для вас - привести все свои вещи в порядок. Вы можете остаться с вашей текущей схемой аутентификации, поскольку у вас есть только три блока, но вам нужно синхронизировать все пользовательские UID / GID по вашим боксам. это не сложная задача на самом деле.
Серж
Да, это то, что я наконец-то сделал.
Райан К. Томпсон

Ответы:

5

Без централизованного администрирования пользователей «лучший» способ, который я вижу, - заставить все серверы использовать одинаковые GID и UID для каждого пользователя. Теперь ... Я говорю только о файлах и / или каталогах.

Что бы я сделал в этом случае:

  • Зарегистрируйте каждый UID и GID, используемый в данный момент.
  • Отредактируйте /etc/passwdи /etc/groupсопоставьте группы на всех серверах. Желательно, чтобы новые UID и GID, так что следующий шаг будет быстрее
  • Запустите это (это займет некоторое время):

    find / -group <OLD_GID> -exec chgrp <NEW_GID> '{}' \+
    find / -user  <OLD_UID> -exec chown <NEW_UID> '{}' \+
    
BitsOfNix
источник
Хм, оператор "find" начинается с корневого каталога. Команда меняет владельца каждого каталога в системе. Предлагаемые изменения этих команд будут включать все файлы в системе. Я предлагаю вам ограничить, с какими каталогами работает эта команда, иначе у вас будет очень плохой день.
2
From find man: -group gname Истинно, если файл принадлежит группе gname. Если gname является числовым и не отображается в базе данных group (4), оно принимается как идентификатор группы.
BitsOfNix
1

NFSv4 поддерживает отображение идентификаторов. При включении NFS будет передавать имена пользователей вместо числовых идентификаторов. Хосты, имеющие разные числовые идентификаторы uid для одного и того же пользователя, не являются проблемой, поскольку имена пользователей сопоставляются с идентификаторами uid на хосте.

Сопоставление идентификаторов всегда используется с режимами безопасности Kerberos ( sec=krb5).

Сопоставление идентификаторов также можно использовать в режиме AUTH_UNIX (по умолчанию sec=sys). Я объяснил детали конфигурации в ответе: Как заставить NFSv4 idmap работать с sec = sys .

sebasth
источник