Я успешно настроил клиент и сервер NFSv4, примерно следуя руководству по настройке NFS HOWTO . Оба работают под управлением Ubuntu Linux 14.04. Это небольшая тестовая среда без сложной аутентификации; два сервера просто используют один и тот же файл passwd. Кажется, все работает правильно; файлы видны на клиенте, и права доступа / идентификаторы пользователей верны.
Теперь я хотел бы использовать списки управления доступом NFSv4 для управления доступом к файлам на сервере NFSv4. Я установил необходимые инструменты командной строки на клиенте и смог увидеть что-то похожее на ACL NFSv4:
Однако, хотя я могу получить список ACL просто отлично, я не могу установить какие-либо ACL. Каждая попытка приводит к Invalid argumentошибке из setxattr.
$ nfs4_setfacl -a A::OWNER@:rxtncy . Failed setxattr operation: Invalid argument
Я использовал strace, чтобы увидеть, что происходит. Согласно разреженной документации, которую я смог найти, ACL NFSv4 хранятся в виде двоичных данных XDR в расширенном атрибуте, вызываемом system.nfs4_aclв файле. И конечно же, это то, что происходит; setxattвозвращается EINVAL.
И клиент, конечно, использует протокол NFSv4; используя, mountчтобы показать смонтированные диски:
$ mount ... 192.168.55.103:/primary/home on /primary/home type nfs4 (rw,rsize=8192,wsize=8192,timeo=14,intr,nfsvers=4,acl,addr=192.168.55.103,client addr=192.168.55.101) ...
Я попытался переключить все флаги отладки на nfsd, чтобы увидеть, приведет ли это к полезному журналу.
$ sudo rpcdebug -m nfsd -s all
Это подтверждает, что сервер получает запрос на установку атрибута.
Что такое "статус 22"? Почему, 22 = EINVAL, неверный аргумент, который setxattrвозвращается клиенту. К сожалению, похоже, ничего не говорится о том, почему аргумент считается недействительным.
Некоторые другие вещи, которые я пробовал:
Одна возможность состоит в том, что сервер думает, что ACL искажен. Чтобы проверить это, я использовал nfs4_setfacl -e ., который открывает существующий ACL в текстовом редакторе для манипуляции. Сохранение файла без изменений по-прежнему приводит к появлению ACL-списка, который выдается Invalid argumentпри применении.
Отображение идентификатора пользователя - еще одна распространенная проблема с NFSv4. Я подтвердил, что идентификаторы пользователей выстроены правильно и что биты владения / режима файла являются правильными с точки зрения клиента NFSv4. Я также попытался создать домен NFSv4, установив Domain = localdomainв /etc/idmapd.confна обоих серверах, никакого эффекта.
Если вы используете списки управления доступом NFSv4 на серверах NFS на базе Linux, мне было бы интересно услышать ваше мнение; Я нашел много учебных пособий по настройке самой NFSv4 (см. Ссылку вверху этой тирады), но практически ни в одном из них не упоминается использование ACL.
1 ответ на вопрос
1
Jonathan
Что бы это ни стоило, я, наконец, отказался от этих усилий после нескольких ударов в темноте, которые в основном включали в себя попытку хоста Ubuntu с ZFS.
Поскольку все, что мне было нужно для моей тестовой среды, - это виртуальная машина, которая может предоставлять NFSv4-сервер с ACL, я отказался от своих усилий по запуску Linux-сервера и вместо этого использовал образ FreeBSD 10.3. Попытка заставить его работать с NFSv4 также была трудной, но, по крайней мере, возможной. На странице руководства FreeBSD для nfsv4 есть довольно приличное руководство (4) .