Linux NFS создает маску и форсирует эквивалент пользователя

11

У меня есть два сервера Linux:


Файловый сервер Debian 5.0.3 (2.6.26-2-686)
Samba версия 3.4.2

apache
Ubuntu 10.04 LTS (2.6.32-23-generic)
Apache 2.2.14

У меня есть несколько общих папок Samba на файловом сервере, так что я могу получить доступ к файлам с ПК с Windows. Я также экспортирую /data/www-dataна сервер apache , где он установлен как /var/www.

С настройкой все в порядке, за исключением случаев, когда я прихожу для создания файлов на монтировании NFS. Я получаю файлы, которые Apache не может прочитать или которые не могут быть изменены другими пользователями в моей системе.

С Samba, я могу указать force user, force group, create maskи directory mask, и это гарантирует , что все файлы , созданные с помощью соответствующих разрешений на моем веб - сервере Apache. Я не могу найти способ сделать это с NFS. Есть ли способ заставить права доступа и владения с NFS - я что-то упускаю очевидное?

Хотя я провел довольно много времени с Linux и отучился от Windows, я все еще не совсем разбираюсь в разрешениях Linux ... Если это неправильный способ сделать что-то, я открыт для альтернативные предложения.

Майк
источник

Ответы:

12

Учитывая, что вы пришли из Windows, вы обнаружите, что NFS ... отличается.

Проблема, с которой вы сталкиваетесь, довольно распространена. NFS передает UID и GID файлов / каталогов туда и обратно между компьютерами, предполагая, что идентификаторы пользователей и групп одинаково отображаются на обоих . Это означает, что вы можете получить ситуацию, когда UID / GID на сервере передается обратно клиенту NFS, но он не может быть сопоставлен с клиентом /etc/passwdили /etc/group, что означает отсутствие доступа.

В (далеком) прошлом это было связано с NIS и NIS +, хотя есть и другие схемы, которые были включены в эту структуру (Winbind от Samba является одной из них). Однако для этого требуется центральный ID-сервер, за которым следует множество разрешений на ручное исправление.

Есть разные способы исправить это, но самый дешевый / быстрый - это создать группу с одинаковым идентификатором группы на обеих машинах - скажем, с идентификатором группы 50000 - и установить биты группы на файловом сервере, добавляя соответствующего пользователя в группа на клиенте; затем используйте групповые права доступа к файлам для контроля доступа. Не очень хорошее решение, но оно будет работать. Обратите внимание, что у вас могут быть проблемы со службами, которые явно изменяют свою группу во время выполнения (также известное как удаление привилегий), и вам может потребоваться изменить настройку, которая контролирует, какая группа предполагается во время выполнения, чтобы убедиться, что она создана вами.

Для тех файлов, которые приходят через общий ресурс Windows (он же Samba), просто заставьте группу быть такой же, как та, которую вы создаете. Таким образом, все файлы автоматически получают «правильный» GID.

Эйвери Пэйн
источник
Спасибо за продуманный ответ. Я посмотрю на метод групповых битов и расскажу, как у меня получается.
Майк
Я создал www-dataгруппу на файловом сервере, назначил необходимых пользователей, а затем установил одинаковый www-dataидентификатор группы на обоих серверах. Я также установил групповые биты в /data/www-dataпапке с помощью chmod -R g+s /var/www-data. Сейчас работает отлично. Спасибо за вашу помощь.
Майк
Рад это слышать!
Эйвери Пейн
Было бы хорошо, если бы NFS могла сделать это для клиентов Mac.
d -_- b
9

Вы также можете использовать all_squashопцию, которая делает анонимными (пользователь и группа) все экспортируемые файлы и папки, и прикреплять их к определенному GID и UID.

/data/www-data apache(rw,all_squash,anonuid=<your UID>,anongid=<your GID>,sync)

Проблема в том, что все пользователи на apacheсервере увидят вашу точку монтирования nobody nobodyкак user & group и могут записать в монтирование (но в любом случае на сервере Samba файлы будут созданы как <your UID>/ <your GID>).

Энтони О.
источник
Это решило мою проблему!
Лучано Андресс Мартини