Права файловой системы определяют, может ли Joomla читать файлы, загружать изображения, записывать журналы и устанавливать обновления. Подходящие настройки зависят от владельца файлов, пользователя PHP и устройства хостинга. Разберём, что проверить перед изменением прав и почему одних чисел 755 и 644 недостаточно.

Два разных вида прав

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

Права файловой системы задаются на сервере. Они определяют, какие системные пользователи могут читать, изменять и выполнять файлы.

Это разные уровни проверки. Разрешение загружать изображения в Joomla не поможет, если PHP не может записать файл в каталог. И наоборот: доступный для записи каталог не даёт посетителю разрешение пользоваться медиаменеджером.

Статус суперпользователя Joomla не делает пользователя администратором операционной системы.

Что означают числовые права

На Linux три цифры обозначают права владельца, группы и остальных пользователей. Значения складываются: чтение — 4, запись — 2, выполнение — 1.

Для каталога выполнение означает возможность проходить через него к файлам. Чтение позволяет получать список имён, а запись вместе с необходимым доступом к каталогу — создавать и удалять его элементы. PHP-файлу, который обрабатывает интерпретатор, обычно не нужен бит выполнения.

Часто встречаются следующие настройки:

  • 755 для каталогов: владелец может изменять содержимое; группа и остальные — читать список и проходить к файлам.
  • 644 для файлов: владелец может читать и изменять файл; остальные — читать.
  • 444 для файла: чтение разрешено всем трём категориям, запись не разрешена никому.

Эти значения описывают доступ, но не гарантируют подходящую защиту. Например, 644 допускает чтение другими системными пользователями, если им доступен путь к файлу.

На Windows используются разрешения файловой системы Windows. Переносить туда числовые настройки Linux как готовый рецепт нельзя.

Владелец файлов и режим PHP

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

На хостинге с отдельным пользователем PHP для сайта схема 755/644 часто обеспечивает запись владельцу. Если файлы загружены другим пользователем, PHP может читать их, но не иметь возможности изменять.

В PHP-FPM пользователь и группа рабочих процессов задаются параметрами пула user и group. Параметры listen.owner и listen.group относятся к сокету соединения с веб-сервером — они не назначают владельца файлам Joomla.

Название режима CGI, FastCGI или PHP-FPM само по себе не доказывает изоляцию сайта. Важны фактическая учётная запись процесса и настройки хостинга. Пользователь SSH или задания по расписанию также может отличаться от пользователя PHP веб-сайта.

Не назначайте всем файлам владельца www-data по универсальному совету. Имя пользователя и схема владения зависят от сервера. Для разделения доступа могут использоваться группа и ACL файловой системы; это не ACL пользователей Joomla.

Как проверить доступ

Начните с административной панели Joomla: откройте сведения о системе и раздел прав на каталоги. Он показывает доступность проверяемых путей для процесса PHP, а не полный аудит безопасности сайта.

Затем в файловом менеджере хостинга или SFTP-клиенте проверьте владельца, группу и права проблемного объекта. Сопоставьте их с данными о пользователе PHP.

При наличии SSH можно посмотреть конкретные объекты следующими командами GNU/Linux. Вместо /srv/www/example-site укажите подтверждённый абсолютный путь к своему сайту:

ls -ld -- /srv/www/example-site
ls -ld -- /srv/www/example-site/images
ls -l -- /srv/www/example-site/configuration.php

Команды только выводят сведения: они не меняют права и не обходят вложенные каталоги. Если путь содержит пробелы, заключите его в кавычки. Для символической ссылки отдельно проверьте фактический целевой путь.

Результат проверки доступа из SSH относится к пользователю SSH. Он не доказывает, что тот же доступ есть у PHP.

Какие каталоги должны быть доступны для записи

Доступ нужен тем операциям, которые действительно выполняет сайт:

  • загрузке медиафайлов — в выбранный каталог загрузки;
  • файловому кешированию — в используемый каталог кеша;
  • журналированию — в настроенный каталог журналов;
  • установке и обновлению — во временный каталог и изменяемые файлы и каталоги.

Пути временного каталога и журналов проверяйте в настройках конкретного сайта. Они могут отличаться от стандартных.

Если код защищён от записи для PHP и обновляется отдельным процессом развёртывания, недоступность части каталогов для записи может быть намеренной. При такой схеме обычное обновление через административную панель потребует отдельной процедуры.

Не добивайтесь доступности всех каталогов для записи только ради одинаковых индикаторов в Joomla.

Как защитить configuration.php

Файл configuration.php содержит настройки сайта, включая данные подключения к базе. PHP должен иметь возможность его читать.

Права 444 запрещают обычную запись, но не делают файл неизменяемым. Владелец может изменить режим доступа. Кроме того, возможность удалить или заменить файл зависит от прав на родительский каталог.

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

В подходящем окружении чтение можно ограничить владельцем или владельцем и выделенной группой — например, режимами 400 или 440. Применимость таких настроек нужно проверить: PHP должен сохранить доступ, а порядок изменения конфигурации — оставаться рабочим.

Права файла не заменяют настройку веб-сервера. Исходный код configuration.php и его резервные копии не должны выдаваться посетителям. Не оставляйте доступные через сайт копии с расширениями .bak, .old или архивы с конфигурацией.

Как исправлять проблемы

Перед изменениями сохраните исходные права, владельца и группу. Уточните путь и убедитесь, что выбран объект нужного сайта.

В файловом менеджере изменяйте права конкретного файла или каталога. Не включайте рекурсивное применение ко всему сайту без проверенного плана. Смену владельца согласуйте с устройством хостинга.

Не используйте массовое назначение 777 каталогам или 666 файлам как способ устранить ошибку записи. Если доступ по обычным правам выглядит корректным, проверьте ACL файловой системы, ограничения PHP, политики безопасности сервера, свободное место и квоту.

После изменения повторите именно ту операцию, которая завершалась ошибкой. Успешное открытие главной страницы не подтверждает исправление загрузки файлов или обновления.

Что важно запомнить

Безопасные права Joomla — это согласованная настройка владельца, группы, пользователя PHP и необходимых операций. Сначала установите причину отказа, затем измените доступ только там, где это требуется. Числа 755, 644 и 444 полезны как ориентиры, но не заменяют проверку окружения.

Упоминаемые термины:

ACL, PHP, Бэкап, Configuration.php