Разрешения на смонтированной NFS-области

Вопрос или проблема

Я пытаюсь сделать так, чтобы PHP-скрипт на веб-сервере записывал в папку /data на файловом сервере.

Apache 2.2, PHP 5.x. Это всего лишь тестовая конфигурация, но я хотел бы как-то понять эту ситуацию, так как я не очень опытен в вопросах разрешений, касающихся веб-серверов.

Я делюсь папкой /data на файловом сервере, добавляя

/data   192.168.20.6(rw,sync,no_subtree_check) 

Монтирую папку с помощью

sudo mount 192.168.20.5:/data /mnt/data

Создаю ссылку на веб-корень (имеет ли это вообще смысл?)

sudo ln -s /mnt/data /webroot/site1/share

И затем я получаю это:

Warning: fopen(/webroot/site1/share/data/uploads/Fotoraum/Original/Bluehend/test.txt): не удалось открыть поток: Нет разрешения 

Где и как мне следует правильно настроить разрешения, чтобы разрешить скрипту записывать в /data и его подпапки?

Спасибо большое!

Согласно вашему комментарию, я думаю, что следующий вариант лучше, чем chmod -R 775 /mnt/data

При использовании mount вы можете указать пользователя и группу, владеющую файлами, возможно, вы захотите использовать следующее:

sudo mount 192.168.20.5:/data /mnt/data -o uid=<uid-of-www-data>,gid=<gid-of-www-data>

Значения uid и gid для www-data можно найти в /etc/passwd и /etc/group.

Вы можете выполнить chmod 6777 на общей папке с nfs-сервера, чтобы любые создаваемые файлы принадлежали группе владельцев этой папки.

Ответ или решение

Разрешения на смонтированную NFS-общую папку

При работе с NFS (Network File System) и Apache для написания файлов в общий каталог на файловом сервере, важно правильно настроить разрешения и параметры монтирования. Давайте разберем ваш случай по шагам, чтобы вы могли успешно реализовать ваши задачи и понять механизмы, стоящие за разрешениями.

1. Введение в вашу ситуацию

Вы пытаетесь написать данные из PHP-скрипта, который размещен на веб-сервере с Apache 2.2 и PHP 5.x, в каталог /data на файловом сервере. Ваши действия включают создание общего каталога на файловом сервере, его монтирование на веб-сервере, и использование символической ссылки для доступа к этому каталогу из веб-корня.

2. Ошибка отказа в доступе

Ошибка, которую вы видите:

Warning: fopen(/webroot/site1/share/data/uploads/Fotoraum/Original/Bluehend/test.txt): failed to open stream: Permission denied

указывает на проблему с разрешениями. Это может происходить по разным причинам, но в вашем случае основными факторами являются:

  • Неправильный пользователь или группа, которые имеют доступ к смонтированному каталогу.
  • После монтирования NFS-шары разрешения файлов могут не соответствовать необходимым для Apache.

3. Настройка разрешений на NFS-сервере

Вы можете настроить экспорт NFS в файле /etc/exports следующим образом:

/data 192.168.20.6(rw,sync,no_subtree_check)

Это позволяет вашему веб-серверу с IP-адресом 192.168.20.6 иметь полный доступ для чтения и записи. Однако просто правильная настройка экспорта не решает проблему с пользователями и группами.

4. Монтирование с указанием пользователя и группы

Чтобы обеспечить возможность Apache записывать файлы в смонтированное пространство, используйте uid и gid опции при монтировании:

sudo mount 192.168.20.5:/data /mnt/data -o uid=<uid-of-www-data>,gid=<gid-of-www-data>

Значения <uid-of-www-data> и <gid-of-www-data> можно получить с помощью команд:

id -u www-data
id -g www-data

Таким образом, вы устанавливаете владельцев смонтированного каталога на пользователя и группу, под которыми работает Apache.

5. Установка разрешений на NFS-сервере

Команда, которую вы упомянули:

chmod 6777 /data

может быть полезной, если вы хотите, чтобы все создаваемые файлы в этом каталоге имели установленные разрешения для совместного использования. Однако это не всегда лучший подход, так как это может представлять угрозу безопасности.

Более подходящий подход – установить группу (например, www-data) на каталог и разрешить записи этой группе:

chown -R <uid-of-www-data>:www-data /data
chmod -R 775 /data

6. Заключение

Теперь вы создали символическую ссылку к /webroot/site1/share, которая ведет к смонтированному каталогу. Ваша конфигурация и разрешения должны позволить PHP-скрипту записывать данные в /data и его подкаталоги. Убедитесь, что Apache имеет право запускать сценарий с нужными параметрами пользователя.

Для достижения необходимого результата важно, чтобы все настройки были корректно выполнены на обоих серверах (NFS и веб-сервере). Изучение вопросов разрешений и механик Linux поможет вам избежать подобных проблем в будущем, обеспечивая более стабильную и безопасную конфигурацию в работе с общими ресурсами.

Оцените материал
Добавить комментарий

Капча загружается...