Вопрос или проблема
Я пытаюсь сделать так, чтобы 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 поможет вам избежать подобных проблем в будущем, обеспечивая более стабильную и безопасную конфигурацию в работе с общими ресурсами.