Блокировка исполнения модуля python в astra linux

Обновлено: 30.06.2024

1.3 Отключить в BIOS-е Intel SGX (в связи с обнаруженной уязвимостью в механизме).

1.6. Обеспечьте невозможность физического доступа к жесткому диску на котором установлена ОС, или используйте доступные средства защитного преобразования всего содержимого диска.

1.7. При наличии опций для процессоров Intel Execute Disable Bit (XD-Bit) и для процессоров AMD No Execute Bit (NX-Bit) включите их.

1.9. Включить secureboot на платформах где это возможно согласно инструкции.

2. Для Intel платформ

3. Установите все доступные обновления безопасности ОС Astra Linux

Оперативные обновления для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5)

4. Настройте загрузчик на загрузку ядра GENERIC и уберите из меню все другие варианты загрузки, включая режимы восстановления.

4.2 При использовании архитектур отличных от Intel установите пароль на загрузчик согласно документации.

5. При установке рекомендуется создать отдельные разделы / /boot /home /tmp /var/tmp

Раздел /boot рекомендуется монтировать с опциями ro (перед обновлением ядра смонтировать в rw)

Разделы /home /tmp /var/tmp рекомендуется монтировать с опциями noexec,nodev,nosuid

6.1 настройте pam_tally на блокировку учетных записей при попытках подбора паролей. (настроено по умолчанию при установке ОС)

7. Настройте дисковые квоты в ОС

Для этого установите пакет quota настройте /etc/fstab и используйте edquota для установки квот.

8. Настройте ограничения ОС: ulimits

рекомендуемые настройки /etc/security/limits.conf:

9. Отключите все неиспользуемые сервисы (в т.ч. сетевые) которые запускаются при старте ОС, используя программы:

chkconfig и fly-admin-runlevel в 1.5

systemctl systemdgenie в 1.6

10. Настройте iptables в минимально необходимой конфигурации необходимой для работы

(по умолчанию все запрещено, кроме необходимых исключений)

в 1.5 iptables ufw

в 1.6 iptables ufw gufw

11. Настройте параметры ядра в /etc/sysctl.conf:

11.1 Отключите механизм SysRq

в /etc/sysctl.conf добавьте строку

Перезагрузите ПК, проверьте что установлено значение 0, командой:

11.2 дополнтельные рекомендуемые параметры

fs.suid_dumpable=0 kernel.randomize_va_space=2 net.ipv4.ip_forward=0 net.ipv4.conf.all.send_redirects=0 net.ipv4.conf.default.send_redirects=0

12. Заблокируйте исполнение модулей python с расширенным функционалом:

13. Заблокируйте макросы в VLC

14. При возможности заблокируйте макросы в Libreoffice

15. Обязательно отключите доступ к консоли пользователям:

(Инструкция для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5), для оперативного обновления 1.6 правила работают из коробки)

Добавьте группу astra-console выполнив команду:

Создайте файл /etc/rc.local со следующим содержимым:

Добавьте правило в файл /etc/security/access.conf командой:

Включите в /etc/pam.d/login обработку заданных правил командой

Для включения доступа к консоли администраторам необходимо добавить их в группу astra-console.

16. Включите контроль цифровой подписи в ELF файлах и в xattr всех файлов,(Режим Замкнутой Программной Среды)

для этого сгенерируйте ключи и подпишите цифровой подписью в xattr все основные файлы и каталоги в корневой ФС.

рекомендуемые каталоги для подписи: /etc /lib /lib64 /lib32 /bin /sbin /boot /root /opt /srv /usr

16.1 Для включения механизма контроля подписи в ELF:

Установите в файле /etc/digsig/digsig_initramfs.conf:

up-initramfs -u -k all

16.2 Для включения механизма контроля подписи в xattr см. РУК КСЗ п.13.5.2

17. При возможности используйте защитное преобразование данных домашних каталогов с помощью допустимых средств преобразования, или используйте хранение информации на сетевых дисках или сменных носителях.

18. При возможности настройте двухуровневый киоск для пользователя.

Как минимум, нужно настроить высокоуровневый киоск для пользователя с помощью утилиты fly-kiosk:

см. РУК КСЗ п.15.6

19. При возможности запретите пользователю подключение сменных носителей.

20. Установите запрет установки исполняемого бита:

echo 1 > /parsecfs/nochmodx

echo 1 > /etc/parsec/nochmodx

21. Настройте систему аудита на сохранение логов на удаленной машине.

Если возможно используйте систему централизованного протоколирования ossec.

см. РУК АДМИН п.15

22. Установите МКЦ > 0 на всеx основных файлах и каталогах в корневой ФС. (set-fs-ilev)

(в 1.6 и в 1.5 на апдейтах позже 27-10-2017)

Установку МКЦ рекомендуется проводить после всех настроек безопасности, дальнейшее

администрирование возможно только войдя под высоким уровнем целостности или после снятия МКЦ с ФС командой unset-fs-ilev

Установка МКЦ на 1.5 апдейт 27-10-2017:

см. Мандатный контроль целостности

23. Включите запрос пароля при каждом выполнении команды sudo, для чего внесите следующие изменения в файл /etc/sudoers:

Для того, чтобы для выполнения первой команды sudo требовалось ввести пароль:

Для того, чтобы пароль не запоминался для выполнения последующих команд и запрашивался для каждой команды:

Действия по добавлению ярлыков на рабочем столе пользователя рассматриваются на примере добавления ярлыка приложения Zenity. Для создания ярлыка приложения необходимо:

Перейти в каталог /usr//applications и создать файл с расширением .desktop:

sudo vi zenity.desktop


Мануал

Может возникнуть ситуация, когда вам потребуется запретить загрузку некоторых модулей ядра во время загрузки вашей Linux-системы.

В этом руководстве мы обсудим несколько различных способов внесения модуля в чёрный список, включая его зависимости, в Ubuntu и любых других дистрибутивах на базе Debian.

Это позволит навсегда запретить модулю загружаться во время загрузки.

Черный список модулей при загрузке

Следуйте приведенным ниже шагам, чтобы узнать, как внести модуль ядра в черный список для загрузки в вашей системе.

Начнем с перечисления всех модулей, загруженных в настоящее время в вашей системе Linux:


Команда lsmod выводит список всех загруженных в данный момент модулей ядра.

Приведенный выше вывод lsmod был сокращен.

Допустим, мы собираемся внести в черный список модуль usbcore.

Прежде чем выгружать или заносить в черный список какой-либо модуль, полезно посмотреть, какие другие модули зависят от него:

Из приведенного выше результата видно, что модуль usb-common зависит от usbcore.

Чтобы внести в черный список модуль без зависимостей, создадим файл /etc/modprobe.d/blacklist.conf (если он еще не существует) и добавим в него следующую строку:

После этого обновите initramfs и перезагрузите систему:

После перезагрузки используйте lsmod, чтобы проверить, загружен ли модуль в настоящее время.

Если другие модули зависят от того самого модуля, который вы пытаетесь внести в черный список, как в приведенном выше примере, вам нужно внести в черный список все зависимые модули, иначе исходный модуль, который вы внесли в черный список, все равно загрузится.

К счастью, существует трюк, позволяющий внести в черный список все модули, включая их зависимости.

Если по какой-то причине вы не можете внести в черный список модули и все их зависимости, сделайте так, чтобы модуль не загружался и тем самым заставил не загружаться все зависимые модули.

Добавьте следующую строку в /etc/modprobe.d/blacklist.conf, чтобы полностью занести usbcore в черный список, включая все его зависимые модули:

Затем обновите initramfs и перезагрузитесь:

Для полноты картины, пожалуйста, обратите внимание, что хорошей практикой является создание отдельного файла конфигурации модуля для каждого модуля, занесенного в черный список.

Например, если вы хотите внести в черный список модуль e1000, то создайте отдельный файл /etc/modprobe.d/e1000.conf.

Заключение

В этом руководстве мы рассмотрели, как внести модуль ядра в черный список в Ubuntu и других системах Linux на базе Debian.

Это полезно, когда вам нужно предотвратить загрузку модуля, временно или постоянно, во время загрузки.

Изменение легко вернуть, удалив файл, если вам нужно разрешить модулю загружаться снова.

Эти инструкции позволяют модулю оставаться в вашей системе, просто предотвращая его автоматическую загрузку.

В AstraLinux изначально установлен python3.5. Версию 3.7 установил с помощью менеджера пакетов Synaptic.

Имеется простой код на языке python с библиотекой PyQt5:

Если запустить файл с исходным кодом так: python3.5 test.py - всё работает. Если же я запускаю python3.7 test.py - в консоли выводится такая надпись: ImportError: cannot import name 'QtWidgets' from 'PyQt5' (/usr/lib/python3/dist-packages/PyQt5/init.py)

Как сделать так, чтобы версия python3.7 смогла увидеть установленные пакеты и библиотеки? Пробовал работу с командой update-alternatives, назначал приоритеты, но проблему это не решило.

Самый простой вариант, ИМХО, - сделайте себе venv в python 3.7, установите в него все необходимые пакеты и работайте в созданном venv. Если вы установили более новый пайтон из пакетов, то соответствующий venv , скорее всего, называется python3.7-venv проверил этот вариант: Уже установлен пакет python3.7-venv самой новой версии (3.7.3-2+deb10u3+ci202107011746+astra2).

Если вы установили более новый пайтон из пакетов, то соответствующий venv , скорее всего, называется python3.7-venv

С развёртыванием виртуального окружения есть одна тонкость. venv делает копию установки python , собранной саппортерами из дистрибутива. Но они всегда на несколько поколений позади актуальных версий. Поэтому перед практическим использованием venv необходимо обновить системные пакеты.

Я покажу на примере python-3.8 , который стоит у меня в Ubuntu, но у вас последовательность шагов будет точно такой же.

Создать виртуальное окружение: $ /usr/bin/python-3.8 -m venv

Активировать это окружение в текущем сеансе bash : $ source

По этой команде в текущем сеансе будут прописаны переменные окружения, указывающие на бинарники, библиотеки и пакеты в каталоге

Для проверки: (venv-3.8) $ which python3 -> /home/user/tmp/venv-3.8/bin/python3

Обратите внимание, что activate изменил строку приглашения в bash , добавив в неё указание, что в текущем сеансе активно виртуальное окружение.

Первым делом нужно обновить pip и setuptools :

(venv-3.8) $ pip3 install pip setuptools --upgrade

Не знаю, как у вас в Астре, а у меня в Убунте в пакетах идёт совершенно допотопный pip версии 9. Текущий pip версии 21.2. setuptools апгрейдятся с версии 39 до 58.

Теперь можно устанавливать pyqt5 и все остальные пакеты, необходимые вам. Устанавливать через pip ! не через пакеты дистрибутива:

(venv-3.8) $ pip3 install pyqt5

После установки всех пакетов запускаете ваш скрипт в активированном окружении: (venv-3.8) $ python3 test.py

Если вам нужно отменить изменения переменных окружения, внесённые скриптом activate , выполните команду (venv-3.8) $ deactivate и все исходные настройки вернутся.

Для 3.6 вы можете создать такое же окружение в отдельной папке, и выполнять test.py , активировав его. Так вы полностью разделите пакеты между версиями пайтона.

Пустое виртуальное окружение весит меньше 10 Мб, но, разумеется, по мере установки пакетов, будет раздуваться. Например, у меня установлены numpy , scipy , pandas , matplotlib , tensorflow , jupyter - размер venv почти 1.8 гб.

В Astra Linux до версии 1.6 не было иного способа нормального запуска Web-приложений, написанных на Python, кроме mod_python . В настоящее время самый популярный способ - WSGI , однако, в сертифицированных версиях Astra Linux SE (1.4, 1.5) есть только указанный выше модуль для Apache. Безусловно, есть и третий способ - запуск приложения в отладочном режиме через вот эту команду:

Надо ли объяснять, что делать так не нужно?

Итак, задачи, решение которых я предлагаю в этой статье:

  • Настройка Apache для работы в рамках ALD (Astra Linux Domain)
  • Настройка виртуального хоста для Django-приложения
  • Авторизация в приложении Django через ALD/Kerberos

Настройка ALD и Apache

Все выполняемые операции требуют привилегий пользователя root. Если кому-то покажется, что далее идёт пересказ официальной инструкции для администратора, то вам не кажется - взято отсюда.

Установка необходимых модулей Apache.

Устанавливаем два модуля Apache (считаем, что Apache уже установлен на сервере).

Включаем эти модули и перезапускаем WEB-сервер:

Настройка ALD.

Теперь нужно настроить сервер таким образом, чтобы клиенты, подключающиеся в рамках сессии ALD, прозрачно авторизовались на сервере. В инструкции всё описано, лишь немного постараюсь прояснить моменты, которые у меня вызвали вопросы.

Создадим принципала в ALD и добавим его в группу mac

Теперь создадим файл ключа Kerberos и дадим права на него пользователю www-data .

Теперь можно перезапустить WEB-сервер:

Создание виртуального хоста Apache.

Apache Virtual Host: /etc/apache2/sites-available/astra-django-project

Не забываем включить наш сайт в список разрешенных:

Не суть важно, как происходит сериализация (сериализатор возвращает словарь), важно то, что происходит в строке, где устанавливается заголовок ответа Content-Range . Если запустить отладочный сервер, то в заголовках ответа мы его увидим. Если выполнять этот же код с помощью Apache, т. е. так, как я выше написал, заголовок будет просто выброшен. Как это лечить в Astra Linux 1.4, я не знаю. Но, например, при использовании библиотеки DStore использовать свойство useRangeHeaders будет нельзя. Т. е. и DGrid тоже работать не будет, нужно помимо свойства items передавать ещё и total . Не такая уж большая проблема, но под определение подводного камня подходит хорошо.

Читайте также: