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

Сопоставление UID для NFS

У меня есть файловый сервер 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.)