У меня два Linux сервера:
файловый сервер
Debian 5.0.3 (2.6.26-2-686)
Samba версии 3.4.2
Apache
Ubuntu 10.04 LTS (2.6.32-23-общий)
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 ... Если это неправильный способ делать что-то, я открыт для альтернативные предложения.
Учитывая, что вы работаете с Windows, вы обнаружите, что NFS ... отличается.
Проблема, с которой вы столкнулись, довольно распространена. NFS передает UID и GID файлов / каталогов туда и обратно между машинами. с предположением, что идентификаторы пользователя и группы отображаются одинаково на обоих. Это означает, что вы можете получить ситуацию, когда UID / GID на сервере передается обратно клиенту NFS, но он не может быть сопоставлен в клиентском /etc/passwd
или /etc/group
, что означает отсутствие доступа.
В (далеком) прошлом это было согласовано с NIS и NIS +, хотя есть и другие схемы, которые были вклиниваются в эту структуру (Winbind Samba является одной из них). Однако для этого требуется центральный сервер идентификации, за которым следует множество разрешений, исправляемых вручную.
Есть разные способы исправить это, но самый дешевый / быстрый - создать группу с одинаковым идентификатором группы на обеих машинах, скажем, с идентификатором группы 50000, и установить биты группы на файловом сервере при добавлении соответствующего пользователя в группа по клиенту; затем используйте разрешения группы для файлов для управления доступом. Не лучшее решение, но оно будет работать. Обратите внимание, что у вас могут возникнуть проблемы со службами, которые явно изменяют свою группу во время выполнения (также известное как удаление привилегий), и вам может потребоваться изменить параметр, который контролирует, какая группа предполагается во время выполнения, чтобы убедиться, что это та, которую вы создали.
Для тех файлов, которые поступают через общий ресурс Windows (также известный как Samba), просто принудительно установите группу, аналогичную той, которую вы создаете. Таким образом, все файлы автоматически получают «правильный» GID.
Вы также можете использовать all_squash
опция, которая делает анонимными (пользователь и группа) все экспортированные файлы и папки и прикрепляет их к определенному GID и UID.
/data/www-data apache(rw,all_squash,anonuid=<your UID>,anongid=<your GID>,sync)
Проблема в том, что все пользователи apache
сервер увидит вашу точку монтирования с nobody nobody
как пользователь и группа и может писать в монтировании (но в любом случае на сервере Samba файлы будут созданы как <your UID>
/<your GID>
).