Навыки решения неизвестных Вам проблем в Linux, требуют определенного уровня понимания Linux. Установка 1С на Linux рано или поздно приведет Вас к изучению SElinux (Security-Enhanced Linux (SELinux) is a Linux kernel security module that provides a mechanism for supporting access control security policies, including mandatory access controls (MAC)). Самое простое его отключить — это единственный выход, который предлагает 1С на ИТС. Но в корпоративной среде, Вам это не разрешит администратор и тогда приходится изучать логи и думать. Рассматривайте это не как очередную проблему Linux, а как хорошую возможность понять, как работает Linux изнутри. К сожалению, чем больше сталкиваешься с SELinux, тем больше вопросов к логичности архитектуры Linux. Статья показывает, как выжить с SElinux на сложном практическом кейсе из импортозамещения в 1С.
Практический кейс.
Весенний апрельский день принес сразу две новости, одна хорошая, а другая не очень.
Начну с хорошей. Акции компании Астра (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С. Проверяю
Права пользователя, под которым работает сервис 1С (usr1cv8) верные. А у Apache достаточно прав r-x на каталог. И что доподлинно известно - он загружает этот модуль LoadModule _1cws_module "/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 _1cws_module "/opt/1cv8/x86_64/8.3.26.1521/wsap24.so" и далее уже вызываются другие модули 1С
В Linux нет полноценного аналога EventViewer как в Windows, даже если использовать GUI типа Gnome или Xfce. Но учитывая некие соглашения Linux, большинство нужных логов в текстовом виде находятся в каталоге и подкаталогах /var/log/
Первое что делаем, поиск в логах, по ключевым словам, используя root
Намеков на 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
Итак, анализ логов дал гипотезу, что данные записи показывают те самые запреты. Для подтверждения - провоцируем ошибку и смотрим последние записи в логах
Это точно наше событие.
Кто знает более удобные способы понять связь сообщений, при вызове из 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
Для этого нужно посмотреть, какие возможности включения и выключения 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 _1cws_module "/opt/1cv8/x86_64/8.3.26.1521/wsap24.so" , который прописывается в httpd.conf
Это понадобится для решения будущих проблем, ведь и текущей проблемы не было в предыдущих релизах. Видимо 1С так поменяла код.
Определяем номера процессов, под которыми работает Apache
ps -ef | grep httpd
Далее для номеров процессов запускаем
lsof -p 357478 | grep 1cv8
вывод может выглядеть примерно так
Теперь есть понимание, что как и где запускается.
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 – лето будет жарким