Как исправить ошибку «Internal server error» и проблемы с «backbas.so» при работе 1С через Apache на Linux (релизы 8.3.25+)

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

При обновлении платформы 1С:Предприятие на Linux-серверах (особенно если вы используете сценарий python для автоматизации установки и обновления на дистрибутивах с современными ядрами, таких как Fedora 40, RedOS 8 или AlmaLinux 9) системные администраторы часто сталкиваются с критической ошибкой при попытке входа через веб-клиент. После перехода на релизы 8.3.25.xxxx или 8.3.26.xxxx вместо привычного окна авторизации пользователь получает сообщение HTTP: Internal server error. При попытке открыть базу через браузер детализируется ошибка загрузки компоненты backbas.so или сообщение cannot make segment writable for relocation: Permission denied. Рассмотрим подробно, почему это происходит и как настроить сервер для стабильной работы.

Выясняем причину: изменения в архитектуре библиотек и политика W^X

Проанализируем ситуацию: почему на старых релизах (например, 8.3.24) всё работало годами, а на новых версиях возникают ошибки доступа? Причина кроется в том, как операционная система обрабатывает исполняемые библиотеки. В новых релизах платформы 1С способ сборки библиотеки backbas.so (и некоторых других) изменился. Теперь при загрузке этих библиотек системе требуется изменить права доступа к сегментам памяти «на лету» (выполнить релокацию). Учитывая особенности настройки Astra Linux с установкой зависимостей и других современных систем, такие изменения требуют особого внимания к безопасности.

Современные дистрибутивы Linux активно используют политику безопасности W^X (Write XOR Execute). Это означает, что страница памяти не может быть одновременно доступна и для записи, и для исполнения. Когда 1С пытается сделать сегмент кода доступным для записи для внесения данных релокации, подсистемы безопасности Linux (SELinux или systemd с определенными фильтрами) блокируют это действие. Именно поэтому мы видим ошибку Permission denied, даже если у файлов стоят полные права 777.

Решение 1: Настройка параметров безопасности Apache в systemd

Одной из главных преград на пути работы новых релизов 1С является настройка сервиса Apache в systemd, которая называется MemoryDenyWriteExecute. Если она включена, процесс Apache (httpd) не может создавать сегменты памяти, которые одновременно пригодны для записи и выполнения. Подобные нюансы стоит учитывать, даже когда вы разворачиваете тестовый кластер 1С (для этого подойдет панель администрирования и управления кластером серверов 1С) на UBUNTU или других системах, где свежие версии systemd могут блокировать воркеры веб-сервера.

Разберем по шагам, как деактивировать это ограничение для веб-сервера:

  1. Создадим каталог для переопределения настроек сервиса (если он еще не создан): mkdir -p /etc/systemd/system/httpd.service.d
  2. Создадим файл конфигурации override.conf: nano /etc/systemd/system/httpd.service.d/override.conf
  3. Добавим в него следующие строки, разрешающие модификацию памяти:
    
    [Service]
    MemoryDenyWriteExecute=no
    
  4. Обновим конфигурацию systemd, чтобы изменения вступили в силу: systemctl daemon-reload
  5. Перезапустим веб-сервер: systemctl restart httpd

После этого стоит проверить текущий статус параметра командой: systemctl show --property=MemoryDenyWriteExecute httpd. Если вы видите no, значит, ограничение снято.

Решение 2: Настройка политик SELinux

Если после настройки systemd ошибка сохраняется, следующим шагом необходимо проверить SELinux. Эта система принудительного управления доступом часто блокирует веб-серверу возможность исполнения кода в оперативной памяти. Это часть того, как реализуется концепция защищенной IT инфраструктуры на современных предприятиях, где безопасность стоит на первом месте.

Посмотрим на пример настройки необходимых флагов. Нам нужен параметр httpd_execmem. Проверрим его текущее состояние:

getsebool httpd_execmem

Если флаг выключен (off), включим его. Рассмотрим два способа: временный (до перезагрузки) и постоянный.

Для постоянного включения используем ключ -P:

setsebool -P httpd_execmem 1

В некоторых случаях (например, на RedOS 8) этого достаточно, чтобы 1С начала загружать компоненту backbas.so без ошибок.

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

chcon -R -t httpd_sys_rw_content_t /путь/к/вашей/базе

Решение 3: Управление временными файлами и правами доступа

Иногда после исправления ошибки с backbas.so возникает следующая проблема: Не удалось получить имя временного файла. Выясним причину: веб-сервер 1С очень чувствителен к правам на временные каталоги. В новых релизах требования ужесточились.

Посмотрим, как правильно настроить пути к временным файлам в файле публикации default.vrd. Мы рекомендуем явно указывать каталог для временных данных:

  1. Создайте отдельный каталог, например /var/1C_Temp.
  2. Назначьте владельцем пользователя, под которым работает Apache (apache или www-data):
    
    chown apache:apache /var/1C_Temp
    chmod 775 /var/1C_Temp
    
  3. В файле default.vrd внутри тега <point> добавьте или измените атрибут temp:
    
    <point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
           ...
           temp="/var/1C_Temp/">
    

Важный нюанс: если в настройках сервиса Apache в systemd включен параметр PrivateTmp=true, система создаст изолированное пространство имен для /tmp. Это может приводить к тому, что 1С не увидит файлы, созданные другими процессами. В ряде случаев помогает установка PrivateTmp=false в том же файле override.conf, который мы создавали ранее.

Решение 4: Проблема утечки памяти при работе 5 и более пользователей

Разберем еще один аспект эксплуатации 1С на веб-сервере Linux. Пользователи часто замечают, что оперативная память сервера «раздувается» и не освобождается — для диагностики есть утилита мониторинга и анализа производительности серверов 1С. Это связано с тем, что процессы Apache (воркеры) держат сессии 1С и кэши в памяти слишком долго. Не забывайте, что регулярное обслуживание баз данных 1C на Postgresql под Astra Linux и оптимизация настроек сервера приложений также влияют на общую стабильность системы.

Для решения этой проблемы проанализируем настройки MPM-модуля Apache (обычно это /etc/httpd/conf.modules.d/00-mpm.conf). Нам нужно ограничить время жизни дочерних процессов с помощью параметра MaxConnectionsPerChild. По умолчанию он часто равен 0 (бесконечность). Установите значение в районе 100-500:


<IfModule mpm_event_module>
    MaxConnectionsPerChild 500
</IfModule>

Это заставит процесс Apache перезапуститься после обработки 500 запросов, что принудительно очистит занятую им оперативную память.

Резюме и рекомендации

Подводя итоги, можно сказать, что переход на 1С 8.3.25+ на Linux требует серьезного пересмотра политик безопасности сервера. Если вы столкнулись с ошибкой Internal server error:

Проанализировав все эти шаги, вы сможете запустить современную платформу 1С на самых свежих дистрибутивах Linux с сохранением высокого уровня безопасности системы.

← На главную