У меня есть файловый сервер Mac OS X, который обслуживает через SMB / CIFS и AFP. Сервер является клиентом домена по принципу золотого треугольника, но это приводит к очень большому UID для пользователей. Это нормально для моей текущей настройки, но я бы хотел, чтобы NFS тоже работала. Очевидно, мне нужно выполнить сопоставление UID, но я не знаю, как это сделать. Любой совет?
В большинстве реализаций NFSv3, особенно на серверах уровня ядра, это невозможно, за исключением некоторых ограниченных сопоставлений, таких как root to none. В NFS v4 у вас есть rpc.idmapd, который выполняет сопоставление идентификатора NFSv4 <-> UID на сервере и позволяет вам стать более гибкими.
Если вы не можете использовать NFSv4, рекомендуемый способ справиться с этим для NFSv3 - это сделать так, чтобы ваши пользователи переходили из службы каталогов, такой как LDAP, или из другой общей базы данных. Обычно все системные пользователи демонов и т. Д. Происходят из /etc/passwd
в то время как все пользователи происходят из внешнего источника. Это обеспечит единообразие UID по всем направлениям и устранит необходимость в каких-либо сопоставлениях.
Я хочу добавить, что есть серьезная ошибка в подходе NFSv4 к отображению UID (см. Комментарий Камила): он не работает для AUTH_SYS
/ AUTH_UNIX
аутентификация, которая у вас есть, если разные компьютеры не используют LDAP, Kerberos или какую-либо другую общую систему контроля доступа.
Вот в чем загвоздка: NFSv4 будет использовать текстовые (то есть нечисловые) идентификаторы при описании владения файлом по сети, что, по вашему мнению, вам нужно, но уровень RPC по-прежнему использует числовые значения UID и GID. просто AUTH_SYS
аутентификация возвращается к RPC, и вы снова застреваете. Вот пример того, как это выглядит (tshark-захват пакета клиент-> сервер, захваченный на стороне сервера):
Frame 26 (306 bytes on wire, 306 bytes captured)
...
Remote Procedure Call, Type:Call XID:0x2790a46d
...
Credentials
Flavor: AUTH_UNIX (1)
Length: 48
Stamp: 0x00419c55
Machine Name: localhost.localdomain
length: 21
contents: localhost.localdomain
fill bytes: opaque data
UID: 500
GID: 500
Auxiliary GIDs
GID: 500
Verifier
Flavor: AUTH_NULL (0)
Length: 0
Network File System
...
Что ж, после дальнейших исследований я обнаружил, что nfs-user-server позволяет выполнять такое сопоставление. Это своего рода облом, потому что основной причиной, по которой я хотел использовать NFS вместо CIFS, была скорость. nfs-user-server работает в пользовательском пространстве, поэтому он не такой быстрый, как nfs-kernel-server. Не кажется оптимальным решением.
Я не настраивал его на OSX, но то, что вы ищете, называется idmapd. В системе OSX демон фактически называется rpc.idmapd. (Примечание: НЕ imapd.)