При развертывании инфраструктуры 1С на операционных системах семейства Linux, в частности на Ubuntu 22.04 с использованием веб-сервера Apache 2.4, системные администраторы часто сталкиваются с ошибкой File access error: Permission denied. Эта проблема возникает при попытке доступа к файловой базе через браузер, даже если публикация в Конфигураторе прошла успешно. В данной статье мы подробно разберем, почему возникает эта ошибка, и совместно пройдем по всем этапам настройки прав доступа, конфигурации сервера и систем безопасности.
Одной из самых частых причин ошибки Permission denied является непонимание того, как веб-сервер Apache (работающий от имени пользователя www-data) взаимодействует с файловой системой. В Linux недостаточно дать полные права только на папку с базой данных. Мы должны обеспечить прохождение по всему пути от корня системы до конечного файла.
Рассмотрим ситуацию: ваша база находится по пути /home/user/1C/base. Для того чтобы процесс apache2 смог прочитать файл 1Cv8.1CD, он должен обладать правом выполнения (бит x) на все родительские каталоги:
//home/home/user/home/user/1C/home/user/1C/baseВ современных дистрибутивах Ubuntu (начиная с версии 21.04) домашние каталоги пользователей создаются с правами 750 (drwxr-x---). Это означает, что никто, кроме владельца и его группы, не может даже «войти» в эту папку. Проанализируем решение: нам необходимо либо изменить права на домашнюю папку (что не всегда безопасно), либо перенести базу в более подходящее место.
Для изменения прав на существующий путь выполним команду:
sudo chmod 751 /home/user
sudo chmod 751 /home/user/1C
Здесь бит 1 (execute) позволяет веб-серверу «пройти» сквозь папку, не давая при этом возможности просматривать список других файлов в ней.
Если права на папки установлены верно, но ошибка сохраняется, нам следует обратить внимание на модуль безопасности 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 означает:
2 — установку SetGID (новые файлы принадлежат группе www-data);770 — полный доступ владельцу и группе, и отсутствие доступа для всех остальных.При выполнении публикации базы через Конфигуратор в среде 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/.
Рассмотрим пошагово перенос базы:
sudo mkdir -p /var/www/1c/basesudo mv /home/user/1C/base/* /var/www/1c/base/sudo chown -R www-data:www-data /var/www/1c/baseТакой подход избавляет нас от необходимости ослаблять защиту домашних каталогов и упрощает настройку AppArmor, так как пути внутри /var/www обычно уже разрешены для веб-сервера по умолчанию.
Иногда ошибка доступа относится не к самой базе данных, а к библиотеке (модулю), которая связывает 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 и обеспечении веб-сервера правами на создание временных файлов в каталоге базы. Использование стандартных путей размещения данных значительно упрощает этот процесс.