При обновлении платформы 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. Рассмотрим подробно, почему это происходит и как настроить сервер для стабильной работы.
Проанализируем ситуацию: почему на старых релизах (например, 8.3.24) всё работало годами, а на новых версиях возникают ошибки доступа? Причина кроется в том, как операционная система обрабатывает исполняемые библиотеки. В новых релизах платформы 1С способ сборки библиотеки backbas.so (и некоторых других) изменился. Теперь при загрузке этих библиотек системе требуется изменить права доступа к сегментам памяти «на лету» (выполнить релокацию). Учитывая особенности настройки Astra Linux с установкой зависимостей и других современных систем, такие изменения требуют особого внимания к безопасности.
Современные дистрибутивы Linux активно используют политику безопасности W^X (Write XOR Execute). Это означает, что страница памяти не может быть одновременно доступна и для записи, и для исполнения. Когда 1С пытается сделать сегмент кода доступным для записи для внесения данных релокации, подсистемы безопасности Linux (SELinux или systemd с определенными фильтрами) блокируют это действие. Именно поэтому мы видим ошибку Permission denied, даже если у файлов стоят полные права 777.
Одной из главных преград на пути работы новых релизов 1С является настройка сервиса Apache в systemd, которая называется MemoryDenyWriteExecute. Если она включена, процесс Apache (httpd) не может создавать сегменты памяти, которые одновременно пригодны для записи и выполнения. Подобные нюансы стоит учитывать, даже когда вы разворачиваете тестовый кластер 1С (для этого подойдет панель администрирования и управления кластером серверов 1С) на UBUNTU или других системах, где свежие версии systemd могут блокировать воркеры веб-сервера.
Разберем по шагам, как деактивировать это ограничение для веб-сервера:
mkdir -p /etc/systemd/system/httpd.service.d
override.conf:
nano /etc/systemd/system/httpd.service.d/override.conf
[Service]
MemoryDenyWriteExecute=no
systemd, чтобы изменения вступили в силу:
systemctl daemon-reload
systemctl restart httpd
После этого стоит проверить текущий статус параметра командой: systemctl show --property=MemoryDenyWriteExecute httpd. Если вы видите no, значит, ограничение снято.
Если после настройки 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 /путь/к/вашей/базе
Иногда после исправления ошибки с backbas.so возникает следующая проблема: Не удалось получить имя временного файла. Выясним причину: веб-сервер 1С очень чувствителен к правам на временные каталоги. В новых релизах требования ужесточились.
Посмотрим, как правильно настроить пути к временным файлам в файле публикации default.vrd. Мы рекомендуем явно указывать каталог для временных данных:
/var/1C_Temp.apache или www-data):
chown apache:apache /var/1C_Temp
chmod 775 /var/1C_Temp
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, который мы создавали ранее.
Разберем еще один аспект эксплуатации 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:
MemoryDenyWriteExecute в systemd.httpd_execmem в SELinux.apache есть права на запуск (execute) файла wsap24.so в каталоге платформы.temp в файле публикации.Проанализировав все эти шаги, вы сможете запустить современную платформу 1С на самых свежих дистрибутивах Linux с сохранением высокого уровня безопасности системы.