Для выполнения некоторой задачи временной миграции данных мне нужно настроить сервер NFS. UID на обеих машинах не совпадают, поэтому мне как-то нужно избегать проблем с разрешениями.
К счастью, подумал я, есть all_squash
вариант. Он говорит:
all_squash: Сопоставьте все uid и gid анонимному пользователю. Полезно для экспортируемых через NFS общедоступных каталогов FTP, каталогов новостей и т. Д. Противоположный параметр - no_all_squash, который является настройкой по умолчанию.
Для сопоставления с желаемым пользователем и группой я дополнительно указал anonuid=12345
и anongid=15101982
:
анонид и анонгид: Эти параметры явно устанавливают uid и gid анонимной учетной записи. Эта опция в первую очередь полезна для клиентов PC / NFS, где вы можете захотеть, чтобы все запросы поступали от одного пользователя. В качестве примера рассмотрим запись экспорта для / home / joe в приведенном ниже разделе примеров, которая отображает все запросы на uid 150 (который предположительно является идентификатором пользователя joe).
Создайте файл на клиент подключен к общему ресурсу NFS, и, как и ожидалось, я вижу следующее поведение (uid / gid были изменены на 12345
):
$ touch test && ls -l test
-rw-rw-r-- 1 12345 12345 0 Aug 25 18:10 test
Однако файлы, которые уже существуют на общем ресурсе, по-прежнему имеют свои исходные uid и gid:
$ ls -l existing-file
-rw-rw-r-- 1 98765 98765 0 Aug 25 18:11 existing-file
Я что-то неправильно понимаю? Я предполагал, что all_squash
просто раздавить все файлы uids и gids? Если это не так, можно ли этого добиться?
Протокол NFS использует учетные данные на основе RPC при создании нового файла. Устанавливая all_squash + anonuid, вы меняете учетные данные, связанные с этим конкретным клиентом. IOW, он влияет только на проверку разрешений для запросов пользователей и владение вновь созданными файлами и каталогами. Право собственности на существующие файлы не изменяется.