Практический кейс
Весенний апрельский день принес сразу две новости, одна хорошая, а другая не очень.
Начну с хорошей. Акции компании Астра (ASTR ) Форум акции Группа Астра (ASTR) упали на рекордно низкий уровень, самое время покупать дешево. Это та самая компания, которая продает Астра Linux и вообще один из флагманов импортозамещения.

Почему «инвесторы» слили акции с 600 до 400? Сложный вопрос. Аналитики, конечно, поют о скором перемирии - вот Трамп как Путиным все порешают и заживем. Вернется Microsoft, Oracle и не нужно будет изучать Postgres, Linux. Вот только рано об этом говорить - все идет по данному прогнозу Солнечный экономический прогноз на 2025 ++ и раньше середины 2026 года, ждать охлаждения конфликта не стоит, а про снятие санкций мечтайте на более длительный срок.
А причина слива скорее всего проще. Да отчет Астры за 2024 год хороший, но нет признаков хорошего роста бизнеса, несмотря на законодательные стимулы использовать проверенный «отечественный» софт. Да и дивиденды смешные. Эта проблема у всех — iПозитив, iАрендата, Диасофт.
А раз так, придется разбираться со второй новостью
Очередной релиз 1С:Предприятие 8.3 (8.3.26.1521) при тестировании не хотел запускаться в режиме тонкого и веб клиента по http используя Apache.
Тонкий клиент 1C по HTTP выдает невменяемое. Для меня загадка как это разобрать.
HTTP: Internal server error
Ошибка при работе с ресурсом /e1cib/login?version=8.3.26.1521&vl=en_US&clnPid=15332&nm=4553314702587704594&ld=jblw4QoT9SPskLuQZUhLrfEAZy2ozOa7tpomDJd_VRFNaZh5Rsk7DpQCOmdQrQpyEjrrEIVi-nUBhw1X3b4Szob4QTBDQrYuULaNbltIXU9CwjoyCH5o9cEVyCaJbqeqpgPnk5nmwuQwfOkwGaq5ZI9VteUSLnD7wSiJj4OCG8aBNac6Er6dNNS8QeQSnIl108l9xBB7Lk9HeqLJiO9-bn1Jy1nZCNnhxdpbXFA_IC8vPJEFewKFpC1JUNIO1dgszf-Hed5D2bL4nHP6gY2KT6YDIHx5moqDk06IVJqzTUWgo2trVGLgQAOCxgjGn31P5f_ofFymU1Tnxq4Os6rFytJiGzXxLtzp3O1DtGUTOS9M_BvAjGcJx78lJOCMOeYE6AzlRl6p4yVyxZnxZp4RQffUJdDnRMScSTEcWy_nW9GKIPjDXjJMD6PP7MJFYr0se2O1Dnx7ZQWp5-MBDzZygysKxvfueDZR275e__nsVNO2rcGaEM4PHknqjZ3z1KjrzieU1Y7h88wwFtlSHzH7PSbIHJj0paiiOzNx3tvlD2DyGYaENzZs4Mn0sRIZgkryb-s-p9ln8BI-eLLTaVxLGD0TIdZ2A4Redayuz99kbnZXy1MxmNfhzKmJJKcpmd70e-evUbXGAVoTEnQGd5qpekvzYsk6SffX-2uQkpimHjuhtsU7ahGdI-aJ08O71m2S83Pn-z3gyZD1AG3KB2O_oQ==&ni=-1373650028&screenwidthcharunits=1404&clnId=e8ac474a-61f7-487f-b250-c03f9ce62c1c
Но если запустить 1С Web клиент, сообщение более информативно
1C:Enterprise 8 application error:
Error loading component backbas: 13(0x0000000D): Permission denied
Очередная загадка. В Linux чувствуешь себя археологом, именно так — поскольку никакие модные Gui тебе не помогут Дневник импортозамещения. Linux GUI — ложное искушение / Хабр Ты один на один с командной стро��ой как 80х-90х, а не Индиана Джонс на свежем воздухе.
Ясно одно - какая-то подсиcтема в Linux что-то и как-то запретила.
Первая мысль - что-то не так с правами на каталоги дистрибутива 1С. Проверяю
ls -l /opt/1cv8
total 0
drwxr-xr-x. 2 usr1cv8 grp1cv8 22 Feb 13 00:22 conf
drwxr-xr-x. 3 root root 21 Nov 1 2024 distr1c
drwxr-xr-x. 4 usr1cv8 grp1cv8 44 Feb 11 22:17 x86_64
Права пользователя, под которым работает сервис 1С (usr1cv8) верные. А у Apache достаточно прав r-x на каталог. И что доподлинно известно - он загружает этот модуль LoadModule 1cwsmodule "/opt/1cv8/x86_64/8.3.26.1521/wsap24.so" прописанный в httpd.conf
Схема простая – Тонкий клиент 1С или Web клиент обращаются к Apache, а Apache запускает модули MPM wsap24.so, которые уже обращаются к кластеру 1С.
Для большей уверенности можно под пользователем Apache исполнить команду test -f /opt/1cv8/x86_64/8.3.26.1521/wsap24.so && echo “FILE exists.” || echo “File does not exist”
Итог проверки — это не ошибка прав файловой системы.
Я использую не Astra linux, а Oracle linux (ветвь Red hat) поскольку считаю, что он наиболее проверен для работы СУБД (Oracle, Postgres) . Не все линуксы одинаковы — это видно по набору установленных пакетов. Когда будет возможность сделаю проверку Astra linux на моих нагрузочных тестах.
Поймай если сможешь в логах
Прежде чем искать в логах - нужно поискать в гугле. Как правило такой путь быстрее если проблема типичная.
Но тут у нас 1С работающий через Apache http в режиме тонкого клиента, поэтому прямого попадания нет.
Все что нам известно это то, что http загружает MPM модуль LoadModule 1cwsmodule "/opt/1cv8/x86_64/8.3.26.1521/wsap24.so" и далее уже вызываются другие модули 1С
В Linux нет полноценного аналога EventViewer как в Windows, даже если использовать GUI типа Gnome или Xfce. Но учитывая некие соглашения Linux, большинство нужных логов в текстовом виде находятся в каталоге и подкаталогах /var/log/
Первое что делаем, поиск в логах, по ключевым словам, используя root
grep -r "backbas" /var/log/* - ничего
grep -r "1cv8" /var/log/* - много результатов, но не относящихся к ошибке
grep -r "denied" /var/log/*- много результатов, выглядят они вот так
/var/log/audit/audit.log.4:type=AVC msg=audit(1738440000.247:10615): avc: denied { read } for pid=3006496 comm="systemd-coredum" dev="nsfs" ino=4026531841 scontext=system_u:system_r:systemd_coredump_t:s0 tcontext=system_u:object_r:nsfs_t:s0 tclass=file permissive=0
/var/log/audit/audit.log.4:type=AVC msg=audit(1740473786.368:4355): avc: denied { execmem } for pid=535703 comm="httpd" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process permissive=0
/var/log/audit/audit.log.4:type=AVC msg=audit(1740473802.303:4356): avc: denied { execmem } for pid=535703 comm="httpd" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process permissive=0
/var/log/audit/audit.log.4:type=AVC msg=audit(1740473808.751:4357): avc: denied { execmem } for pid=535703 comm="httpd" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process permissive=0
Намеков на 1С нет, но поскольку эта проблема возникает взаимодействии Apache и модулей *.so 1С логично отфильтровать все события связанные c httpd (Apache)
grep -r -E "denied.*httpd|httpd.*denied" /var/log/*
Проблема в том, что не видно связи с чем-то из 1С и еще даты в audit(1740473808.751:4357) пишутся как Seconds since January 1, 1970.
date -d @1740473808.751 Tue Feb 25 12:56:48 PM +04 2025
Итак, анализ логов дал гипотезу, что данные записи показывают те самые запреты. Для подтверждения - провоцируем ошибку и смотрим последние записи в логах
journalctl -n 50 -f
journalctl -u service_name
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts 03/04/2025
получим
type=PROCTITLE msg=audit(1741072945.581:125865): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44
type=SYSCALL msg=audit(1741072945.581:125865): arch=c000003e syscall=10 success=no exit=-13 a0=7f41d4783000 a1=7b4000 a2=7 a3=7f41b6176000 items=0 ppid=219733 pid=219738 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1741072945.581:125865): avc: denied { execmem } for pid=219738 comm="httpd" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process permissive=0
Это точно наше событие.
Кто знает более удобные способы понять связь сообщений, при вызове из Apache модуля 1С— предлагайте варианты. Я попробовал logwatch, но он смотрит только системные журналы, а аудит игнорирует, даже если явно задать —service.
Наверняка в Linux есть какие-то возможности трассировки процессов, но я так глубоко не искал.
Замечу, что Ausearсh работает только, если подняты соответствующие сервисы, учтите это если совсем ничего не находится.
Что ты ��акое SElinux?
Подозрение на блокировки SElinux определяется по типу события type=AVC в audit.log . Что бы окончательно убедится можно включить Selinux в режим Permissive
setenforce 0
В этом режиме SELinux только логирует, но не запрещает. Если проблема исправилась значит есть запреты SELinux. Проблема в том, их разнообразие больше, чем вариантов прав на файловой системе. Поэтому все и сразу изучить не получится.
Верните все назад setenforce 1
Теперь пора получить необходимый минимум знаний о SELinux
49.2. Introduction to SELinux | Red Hat Product Documentation

В нашем примере, когда Apache\Httpd (Subject) пытается получить доступ к ресурсу (в нашем случае память, не только на чтение, но и на запись — execmem), идет проверка политик в Access vector cache (AVC) . Проверяется security context Apache и требуемого ресурса
Security context можно посмотреть, используя опцию Z (--context) в коммандах ps, id, ls
Правда этом конкретном случае это не даст новой информации, мы видим эту информацию и в аудите. Нам важно разрешить execmem
ps auxZ | grep http
system_u:system_r:httpd_t:s0 root 357478 0.0 0.7 67704 25240 ? Ss Mar21 2:35 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2535445 0.0 0.3 81080 10624 ? S May03 0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2535496 0.0 2.4 2793628 88208 ? Sl May03 0:15 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2535497 0.0 0.5 2219808 18208 ? Sl May03 0:09 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2535498 0.0 2.5 2662492 88652 ? Sl May03 0:13 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2535499 0.0 2.4 2662492 85816 ? Sl May03 0:13 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2535500 0.0 2.6 2662492 92124 ? Sl May03 0:13 /usr/sbin/httpd -DFOREGROUND
Для этого нужно посмотреть, какие возможности включения и выключения enforcing mode для отдельных процессов. Нас интересует Apache (httpd)
getsebool -a | grep http
Список там достаточно большой, но нас интересует httpd_execmem
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_graceful_shutdown --> off
httpd_manage_ipa --> off
httpd_mod_auth_ntlm_winbind --> off
Разрешаем
setsebool -P httpd_execmem 1
Ура проблема решена!
А теперь, для полного понимания, пара команд, которая покажет, что запускает Apache при запуске
LoadModule 1cwsmodule "/opt/1cv8/x86_64/8.3.26.1521/wsap24.so" , который прописывается в httpd.conf
Это понадобится для решения будущих проблем, ведь и текущей проблемы не было в предыдущих релизах. Видимо 1С так поменяла код.
Определяем номера процессов, под которыми работает Apache
ps -ef | grep httpd
Далее для номеров процессов запускаем
lsof -p 357478 | grep 1cv8
вывод может выглядеть примерно так
httpd 357478 root mem REG 252,0 684464 50337017 /opt/1cv8/x86_64/8.3.26.1521/libunwind.so.8
httpd 357478 root mem REG 252,0 1352320 50336734 /opt/1cv8/x86_64/8.3.26.1521/libicuuc.so.46
httpd 357478 root mem REG 252,0 15431304 50336732 /opt/1cv8/x86_64/8.3.26.1521/libicudata.so.46
httpd 357478 root mem REG 252,0 1937656 50336733 /opt/1cv8/x86_64/8.3.26.1521/libicui18n.so.46
httpd 357478 root mem REG 252,0 1741152 50337014 /opt/1cv8/x86_64/8.3.26.1521/libstdc++.so.6
httpd 357478 root mem REG 252,0 31312 50337018 /opt/1cv8/x86_64/8.3.26.1521/nuke83.so
httpd 357478 root mem REG 252,0 9313424 50336713 /opt/1cv8/x86_64/8.3.26.1521/core83.so
httpd 357478 root mem REG 252,0 249680 54247058 /opt/1cv8/x86_64/8.3.26.1521/wsap24.so
Теперь есть понимание, что как и где запускается.
SELinux – архитектурная заплата или красивое решение безопасности?
История создания SELinux описана тут 49.3. Brief Background and History of SELinux | Red Hat Product Documentation
Если кратко решение было инициировано National Security Agency (США) , при этом Linus Torvalds настоял на модульном походе к безопасности, нежели встраивания SELinux в ядро.
К чему это приводит?
Если Вы разрешили порты в Firewall это не значит, что они будут доступны, пока не разрешите их в Selinux
Если Вы разрешили доступ Apache к файлу для скачивания, это не значит, что он будет доступен, если каталог находится вне Security context Apache.
Ну а информативность логирования и аудита Вы уже видели выше. Т.е. ради безопасности приходится делать двойную работу. Сравните с Windows, где сам Firewall определяет и предлагает открыть нужные порты при запуске приложения.
Кроме того — отказ от включения такой важной системы в ядро порождает «альтернативы». Пример в старой статье Гонка вооружений: сравниваем популярные расширения безопасности для ОС Linux — Хакер
Т.е. вместо того, чтобы решать практические задачи, нужно еще понимать разнообразие систем безопасности Linux из-за того что это решили не стандартизировать.
В целом история в Linux повторяется
Не утвердили обновленный стандарт GUI (ну хотя бы на Wayland) , получили бардак с GUI Linux дневник импортозамещения. Linux GUI – ложное искушение. | 1CUnlimited | Дзен
Не включили SELinux в ядро — получили дублирующую надстройку и еще несколько альтернатив. Наверное, потому что несколько дешевых замков лучше, чем один надежный?

Судя по слабому процессу стандартизации Linux, выживание и развитие лучших решений откладывается. Что-то улучшается, когда все над этим работают. А если все распыляются по разным проектам, мы получим только разнообразие, а не качество.
Альтернатива — национальные клоны Linux, которые можно превратить в более приятный Windows. Тем более Linus Torvalds уже не тянет на лидера свободного ПО, после того как он показал свое отношение к российским разработчикам.
P. S. Все-таки возьму акции Астры по таким ценам. Даже если они не смогут сделать из своего Linux конфетку и увеличить выручку, акции разгонят на очередном притоке ликвидности. Ведь других производителей софта на ММВБ можно по пальцам пересчитать... До новых встреч на нашем канале t.me/Chat1CUnlimited – лето будет жарким
