При использовании NFSv3 UID & GID в RPC заголовки от клиента неожиданно изменяются
Я использую NFS в течение нескольких лет и принял ее ограничения с точки зрения безопасности и отсутствия аутентификации и т. Д. Это было прекрасно, поскольку я использую его только в небольшой и безопасной сетевой среде. Недавно я обновил свой сервер до 18.04 LTS и решил поближе взглянуть на NFS с целью перехода на использование NFSv4. Это оказалось головной болью по нескольким причинам, я использую клиенты Ubuntu, Mac и Windows, поэтому я ожидал смесь NFSv3 и NFSv4, но это оказалось намного сложнее, чем я ожидал. Теперь я потратил несколько дней, тщательно пытаясь понять тонкости работы обмена клиентом и сервером по проводам. Я столкнулся с проблемой, что я просто не могу гуглить ответ тоже. Может быть, кто-то еще может объяснить.
У меня есть сервер Ubuntu (18.04) под управлением NFSv3 и 4. Я настроил экспорт и делюсь им с: (rw,insecure,subtree_check,no_root_squash). Я специально не использую корневую сквош, так как я хотел наблюдать точное поведение при попытке монтировать с клиента. Когда я вошел в систему как root на клиенте, я запускаю команду mount:
mount -t nfs -o vers = 3 mx: / mnt / shared_sun_NAS / Videos / mnt / Videos
конечно же он монтируется.... Когда я смотрю на обмен по проводам, я вижу ожидаемые обмены:
- Portmap - GETPORT Вызов NFS TCP
- Portmap - GETPORT Ответить Порт 2049
- NFS - NULL Call
- NFS - NULL Ответить успешно
- Portmap - GETPORT Вызов MOUNT UDP
- Portmap - GETPORT Reply Port 65500 (я выбираю этот порт на сервере)
- MOUNT - NULL Call
- MOUNT - NULL Ответить успешно
- MOUNT - NULL Call
- MOUNT - NULL Ответить успешно
- MOUNT - MNT Call /mnt/shared_sun_NAS/ Видео
- MOUNT - MNT Успех ответа
- Карта порта - GETPORT NFS TCP
- Portmap - GETPORT Ответить Порт 2049
- NFS - NULL Call
- NFS - NULL Ответить успешно
- NFS - FSINFO Вызов FH: xxxx
- NFS - FSINFO Ответ успешен
- NFS - PATHCONF Вызов FH: xxxx
- NFS - PATHCONF Успешный ответ
- NFS - GETATTR Call FH: xxxx
- NFS - GETATTR Успешный ответ: режим Dir 3770 uid:0 gid:5000 (точно так же, как на сервере)
- NFS - NFSACL Call
- NFS - NFSACL Успешный ответ
- NFS - FSINFO Вызов FH: xxxx
- NFS - FSINFO Ответ успешен
- NFS - GETATTR Call FH: xxxx
- NFS - GETATTR Успешный ответ: режим Dir 3770 uid: 0 gid: 5000
- NFS - ACCESS Call DH: xxxx [Проверка: RD LU MD XT DL]
- NFS - ACCESS Успешный ответ [Разрешено: RD LU MD XT DL]
Здесь я остановлюсь и задам свой вопрос: в каждом кадре из 1-28 заголовок RPC показывает:Machine Name: Laplace
UID: 0
GID: 0
Aux GIDs [0, 5000] just exactly as my root user on the client.
Затем, как только клиент переходит к командам ACCESS, заголовок RPC изменяется следующим образом:
Machine Name: Laplace
UID: 1000
GID: 1000
Aux GIDs [4...... 5000] just exactly as my user account on the client.
Почему это происходит?
Команда монтирования выполняется от имени пользователя root, я монтирую на точку монтирования, принадлежащую пользователю root. Сервер обслуживает каталог, принадлежащий root. У меня не настроено отображение нигде на клиенте или сервере. Почему эта команда ACCESS запускается как моя учетная запись пользователя, а не как root.
Если я изменю команду монтирования на NFSv4, эти запросы доступа выдаются как UID: 0 и GID:0 (как и ожидалось. Root!)
Что заставляет клиента переключаться таким образом? Кажется, я не могу это контролировать.
Любая информация поможет высоко ценится.