LINUX.ORG.RU

[NFS] ACL на стороне клиента

 


0

1

Привет ЛОР!

Пытаюсь сделать образ бездисковой системы на основе Debian Squeeze. Предполагается, что образ будет распаковываться на произвольный linux-based сервер (от RedHat 6 до OpenSuse 11.4), директория содержащая распакованные файлы будет экспортироваться по NFS. Далее клиент стандартным образом грузится через PXE и получает в качестве корневого раздела NFS-шару. Хочется, чтобы он мог независимо от сервера принимать решения о доступе к файлам на корневом разделе. Как я понимаю, для решения проблемы есть два пути:
1. mapping uid и gid
2. использование опции no_acl для соответствующей шары в /etc/exports на сервере

Первый путь я неосилил. Для NFS версий 2 и 3 были опции map_* и специальный демон ugidd, для NFS версии 4 есть демон idmapd. ugidd из современных дистрибутивов выпилен. idmapd отсутствует в старых системах. И я не смог заставить его работать: если я говорю ядру бездисковой системы

APPEND root=/dev/nfs rootfstype=nfs4 initrd=initrd.img nfsroot=x.x.x.x:/srv/diskless_root ip=dhcp rw vga=791
то idmapd не реагирует вообще. При этом, при монтировании той же шары с уже загруженной бездисковой станции через
mount -t nfs4 ... 
idmapd отзывается и даже пытается что-то мапить (правда криво).

Про второй путь man exports говорит, что опция no_acl работает только на специально пропатченных ядрах. Следов этого патча в интернетах почти нет. Просто добавить эту опцию в exports не помогает.

В общем выхода я пока не вижу, так что буду рад услышать советы.

P.S.
Возможно есть другая сетевая файловая система, распространенная примерно так-же как и NFS, которая лучше подходит для моей задачи?

P.P.S.
Основная проблема даже не в различии uid и gid на сторонах клиента и сервера, а в том, что содержимое /etc/group на клиенте теряет силу.



Последнее исправление: ifred (всего исправлений: 3)

Я правильно понял, что проблема в том, что при распаковывании образа файлам назначаются другие uid/gid? Может просто разворачивать tar с опцией --numeric-owner или админ сервера должен что-то изменять на этой NFS-шаре?

mky ★★★★★
()
Ответ на: комментарий от mky

Нет, все распаковывается корректно. Проблема в другом:
Пусть в образе клиента есть пользователь someuser и группа somegroup. Им соответствуют uid=102 и gid=105. В файле client:/etc/group прописано, что someuser принадлежит somegroup. А на сервере uid=102 может не принадлежать к gid=105.
Один из негативных эффектов от такого несовпадания: на клиенте someuser не сможет писать в директорию /path/dir принадлежащую otheruser:somegroup и имеющую права доступа 0775, т.к. решение о разрешении доступа будет произведено на сервере, а там uid, соответствующий someuser, в группу, соответствующую somegroup не входит.

ifred
() автор топика
Ответ на: комментарий от ifred

Может стоит посмотреть в сторону централизованного хранения учёток? LDAP например. Тогда на всех клиентах и серверах у одинаковых пользователей и групп будут одинаковые ID'ы.

Deleted
()
Ответ на: комментарий от Deleted

К сожалению, такой вариант нежелателен. Образ нужно будет ставить на разных машинах с дистрибутивами разной разных лет, разворачивать на каждой LDAP - лениво.
Функционал клиента сильно урезан, на нем вертится nginx и один самописный демон. Проще забить на красивое управление правами доступа и ограничится прямым владением файлами - это, по крайней мере, nfs-ом не убивается.

ifred
() автор топика

Нашел причину проблем с группами. Это опция --manage-gids, которая по умолчанию (точнее через /etc/default/...) передается mountd.

    -g  or  --manage-gids
              Accept requests from the kernel to map user id numbers into  lists of group id numbers for use in access control.   An  NFS  request  will
              normally  (except when using Kerberos or other cryptographic authentication) contains a user-id and a list of group-ids.  Due to a limita‐
              tion in the NFS protocol, at most 16 groups ids can be listed.  If you use the -g flag, then the list  of  group  ids  received  from  the
              client  will be replaced by a list of group ids determined by an appropriate lookup on the server. Note that the 'primary' group id is not
              affected so a newgroup command on the client will still be effective.  This function requires a Linux Kernel with version at least 2.6.21.
Надеюсь, 16 gid-ов на пользователя мне хватит. Но я бы не отказался от более красивого решения.

ifred
() автор топика
25 мая 2011 г.
Ответ на: комментарий от ifred

А теперь вопрос к знающим OpenSUSE: почему вышеуказанный фокус там не работает? Т.е. вроде как в системном скрипте, запускающем mountd, опция --manage-gids нигде не значится, а проблемы с правами доступа присутствуют.

ifred
() автор топика
19 октября 2011 г.

Продолжаем разговор. Запустил виртуальную машину с Debian testing, попробовал из нее смонтировать NFS-шару размещенную на сервере с Ubuntu 11.04. Автоматически была выбрана NFS версии 4. И когда в idmapd.conf на сервере я задал правильный домен, то он начал корректно сопоставлять uid-ы пользователей с одинаковыми именами, а остальных превращать в nobody.
Вопрос, бывает ли полноценный NFS4 на этапе загрузки (т.е. в ситуации, когда корневой раздел на NFS)?
Пока что у меня монтирование корня происходит в nfs3 и попытки задать другую версию через опции загрузки ни к чему не привели.

ifred
() автор топика
22 марта 2012 г.
Ответ на: комментарий от ifred

Здесь дело было не в nfs, а в tar и кривых руках: при распаковке tar-архива с системой (которую потом собираешься раздавать по nfs) полезно указывать ключ --numeric-owner :)

ifred
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.