Как исправить ошибку Permission denied при публикации базы 1С на Apache в Ubuntu

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При развертывании инфраструктуры 1С на операционных системах семейства Linux, в частности на Ubuntu 22.04 с использованием веб-сервера Apache 2.4, системные администраторы часто сталкиваются с ошибкой File access error: Permission denied. Эта проблема возникает при попытке доступа к файловой базе через браузер, даже если публикация в Конфигураторе прошла успешно. В данной статье мы подробно разберем, почему возникает эта ошибка, и совместно пройдем по всем этапам настройки прав доступа, конфигурации сервера и систем безопасности.

Проанализируем иерархию прав доступа в Linux

Одной из самых частых причин ошибки Permission denied является непонимание того, как веб-сервер Apache (работающий от имени пользователя www-data) взаимодействует с файловой системой. В Linux недостаточно дать полные права только на папку с базой данных. Мы должны обеспечить прохождение по всему пути от корня системы до конечного файла.

Рассмотрим ситуацию: ваша база находится по пути /home/user/1C/base. Для того чтобы процесс apache2 смог прочитать файл 1Cv8.1CD, он должен обладать правом выполнения (бит x) на все родительские каталоги:

  1. Корень /
  2. Каталог /home
  3. Домашний каталог пользователя /home/user
  4. Папку проектов /home/user/1C
  5. И, наконец, саму папку с базой /home/user/1C/base

В современных дистрибутивах Ubuntu (начиная с версии 21.04) домашние каталоги пользователей создаются с правами 750 (drwxr-x---). Это означает, что никто, кроме владельца и его группы, не может даже «войти» в эту папку. Проанализируем решение: нам необходимо либо изменить права на домашнюю папку (что не всегда безопасно), либо перенести базу в более подходящее место.

Для изменения прав на существующий путь выполним команду:


sudo chmod 751 /home/user
sudo chmod 751 /home/user/1C

Здесь бит 1 (execute) позволяет веб-серверу «пройти» сквозь папку, не давая при этом возможности просматривать список других файлов в ней.

Выясним причину блокировки через AppArmor

Если права на папки установлены верно, но ошибка сохраняется, нам следует обратить внимание на модуль безопасности AppArmor, который в Ubuntu включен по умолчанию. Этот модуль жестко ограничивает список путей, к которым Apache имеет право обращаться, вне зависимости от стандартных прав Linux (chmod/chown).

Разберем, как добавить исключение для вашей базы 1С. Профиль настроек Apache обычно находится в файле /etc/apparmor.d/usr.sbin.apache2. Нам необходимо разрешить чтение и запись в каталоге базы.

Добавим в конфигурационный файл следующие строки:


/home/user/1C/base/ r,
/home/user/1C/base/** rwk,

После внесения изменений обязательно перезапустим профиль AppArmor, чтобы настройки вступили в силу:


sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.apache2
sudo systemctl restart apache2

Рассмотрим правильное назначение прав на файлы базы

Для корректной работы 1С через веб-сервер пользователю www-data требуются права не только на чтение основного файла 1Cv8.1CD, но и право на создание временных файлов в самой папке базы. Это необходимо для работы механизмов блокировок (файлы .1CL, .1Cv8.tmp).

Выполним рекурсивную смену владельца и установим права. Мы рекомендуем использовать группу www-data и установить SetGID бит, чтобы все новые файлы, создаваемые 1С, автоматически наследовали правильную группу:


sudo chown -R user:www-data /home/user/1C/base
sudo chmod -R 2770 /home/user/1C/base

В данном примере 2770 означает:

Настроим публикацию через Конфигуратор и файл default.vrd

При выполнении публикации базы через Конфигуратор в среде Linux крайне важно запускать саму платформу 1С с правами суперпользователя. Это связано с тем, что конфигуратор должен внести изменения в системные файлы Apache и создать файл описания публикации default.vrd в каталоге веб-сервера (обычно /var/www/html/...).

Запустим конфигуратор под sudo:

sudo /opt/1cv8/x86_64/8.3.22.1709/1cv8

После публикации проверим содержимое файла default.vrd. Убедимся, что путь к базе указан верно и Apache имеет доступ к самому файлу default.vrd. В конфигурационном файле httpd.conf (или в conf-enabled/1c.conf) обязательно должен присутствовать блок Directory с разрешением доступа:


<Directory "/var/www/html/base">
    AllowOverride None
    Options None
    Require all granted
</Directory>

Обратите внимание, что директива Require all granted является обязательной для Apache 2.4. Без неё вы получите ошибку доступа еще на этапе обращения к самому скрипту публикации. Для автоматизации и удобного управления веб-публикациями можно использовать приложение для публикации баз 1С.

Выберем рекомендуемое место размещения базы

Как мы выяснили, хранение баз данных внутри /home/user сопряжено с массой сложностей по настройке прав и безопасности. Проанализируем более профессиональный подход. Согласно стандартам FHS (Filesystem Hierarchy Standard), данные веб-приложений лучше размещать в /var/www/ или /opt/.

Рассмотрим пошагово перенос базы:

  1. Создадим каталог: sudo mkdir -p /var/www/1c/base
  2. Перенесем файлы базы: sudo mv /home/user/1C/base/* /var/www/1c/base/
  3. Установим права: sudo chown -R www-data:www-data /var/www/1c/base
  4. Выполним перепубликацию, указав новый путь к файлу базы.

Такой подход избавляет нас от необходимости ослаблять защиту домашних каталогов и упрощает настройку AppArmor, так как пути внутри /var/www обычно уже разрешены для веб-сервера по умолчанию.

Проверим права на модуль расширения wsap24.so

Иногда ошибка доступа относится не к самой базе данных, а к библиотеке (модулю), которая связывает Apache и 1С. Этот файл называется wsap24.so и находится в каталоге установки платформы 1С.

Проанализируем права на этот файл. Он должен быть доступен для чтения и выполнения пользователю www-data. Обычно путь выглядит так: /opt/1cv8/x86_64/8.3.X.X/wsap24.so. Если права ограничены только пользователем root, веб-сервер не сможет загрузить модуль, что приведет к ошибкам при попытке открыть веб-клиент. Исправить это можно командой:

sudo chmod +x /opt/1cv8/x86_64/8.3.22.1709/wsap24.so

Подводя итог, можно сказать, что решение проблемы Permission denied в Linux всегда кроется в системном подходе: проверке всей цепочки прав на папки, настройке политик безопасности AppArmor и обеспечении веб-сервера правами на создание временных файлов в каталоге базы. Использование стандартных путей размещения данных значительно упрощает этот процесс.

← На главную