Как проверить, какие модули загружены

Как проверить, какие модули загружены

Проверка загруженных модулей — критически важная задача для диагностики системы, анализа производительности и обеспечения безопасности. В зависимости от операционной системы и контекста (ядро, приложение, интерпретатор) используются разные инструменты: от `lsmod` в Linux до `Get-Module` в PowerShell. Главное — применять правильную утилиту под конкретную среду и понимать, как интерпретировать вывод.

Чтобы проверить загруженные модули, используйте системные команды: в Linux — lsmod, cat /proc/modules или kmod list; в Windows — Get-Module в PowerShell или tasklist /m в CMD; в языках программирования — встроенные функции вроде sys.modules в Python. Всегда сверяйте результат с текущим контекстом выполнения.

Системные модули — это компоненты, которые динамически подключаются к ядру ОС или выполняемому приложению для расширения функциональности без перезагрузки. Их корректная загрузка и контроль необходимы для стабильной работы серверов, виртуализации, сетевых сервисов и безопасного аудита. Неправильно загруженный или устаревший модуль может стать причиной падения системы, уязвимости или конфликта драйверов. Особенно остро эта проблема стоит в высоконагруженных средах: облачных платформах, CI/CD-пайплайнах и защищённых корпоративных сетях.
В современных системах модульность — стандарт де-факто. Ядро Linux, например, поддерживает более 5000 модулей, из которых загружается лишь небольшая часть. Аналогично работает .NET в Windows, Node.js в JavaScript-экосистеме и другие runtime-среды. Понимание того, какие именно модули активны, позволяет точно диагностировать проблемы совместимости, выявлять несанкционированные вставки (например, руткиты) и оптимизировать потребление ресурсов.

Как проверить загруженные модули в Linux

Linux — одна из самых модульных операционных систем. Модули ядра (kernel modules) позволяют подключать драйверы устройств, файловые системы и сетевые протоколы «на лету». Это повышает гибкость, но усложняет диагностику. Для просмотра загруженных модулей существует несколько проверенных способов.
Первый и самый простой — команда `lsmod`. Она читает информацию из `/proc/modules` и выводит список в виде таблицы: имя модуля, размер, количество ссылок и зависимости. Команда не требует параметров и доступна во всех дистрибутивах.

  1. Откройте терминал с правами пользователя.
  2. Введите команду: lsmod.
  3. Проанализируйте вывод: первая колонка — имя модуля, вторая — размер в байтах, третья — число зависимостей.

Пример вывода:

Module Size Used by
nf_conntrack 163840 1 nf_nat
iptable_filter 4096 1
ip_tables 32768 1 iptable_filter
x_tables 40960 2 ip_tables,iptable_filter

Здесь видно, что модуль `ip_tables` используется одним процессом и зависит от `x_tables`.
Альтернативный способ — прямое чтение файла `/proc/modules`. Этот подход даёт сырые данные, идентичные `lsmod`, но полезен в скриптах:
cat /proc/modules
Для фильтрации можно использовать `grep`. Например, чтобы найти все сетевые модули:
cat /proc/modules | grep net

Использование kmod и modinfo

Команда `kmod` — унифицированный интерфейс для управления модулями. Она объединяет функции `lsmod`, `insmod`, `rmmod` и других. Чтобы посмотреть загруженные модули через `kmod`, используйте:
kmod list
Этот вывод аналогичен `lsmod`, но может быть полезен в системах, где `lsmod` недоступен (например, в минимальных образах Docker).
Команда `modinfo` показывает детальную информацию о конкретном модуле, даже если он не загружен. Например:
modinfo usbcore
Вывод содержит версию, автора, описание, параметры и поддерживаемые устройства. Это помогает понять, зачем нужен модуль и безопасно ли его выгружать.

Полезно знать: Модули с префиксом nvidia, vfio или zfs часто указывают на сторонние драйверы. Их обновление должно проводиться осторожно — лучше через официальные репозитории.

Автозагрузка модулей: /etc/modules-load.d/

Не все модули загружаются вручную. Некоторые добавляются автоматически при старте системы через конфигурационные файлы. Расположение: `/etc/modules-load.d/`. Каждый файл в этом каталоге (с расширением `.conf`) содержит список модулей по одному на строку.
Чтобы проверить, какие модули настроены на автозагрузку:
ls /etc/modules-load.d/
cat /etc/modules-load.d/*.conf
Если вы видите, например, `vboxdrv.conf` с содержимым `vboxdrv`, это означает, что драйвер VirtualBox будет загружен при каждом запуске.

Анализ модули в Windows: PowerShell и CMD

В Windows модули могут означать разные вещи: DLL-библиотеки, загруженные процессом, модули PowerShell или драйверы ядра. Каждый тип требует своего метода анализа.
Начнём с процессов. Любой исполняемый файл (.exe) загружает ряд DLL-модулей: `ntdll.dll`, `kernel32.dll`, `user32.dll` и другие. Чтобы посмотреть, какие модули использует конкретный процесс, есть два основных способа: через командную строку и PowerShell.
В командной строке (CMD) используйте:
tasklist /m
Эта команда покажет все запущенные процессы и списки загруженных ими модулей. Для фильтрации по конкретной DLL:
tasklist /m ntdll.dll
Вывод покажет только те процессы, которые используют `ntdll.dll` — практически все.
Более точный и современный способ — PowerShell. Командлет `Get-Process` позволяет получить детальную информацию о модулях процесса.

  1. Запустите PowerShell от имени администратора.
  2. Введите: Get-Process | Select-Object Name, Id, Modules
  3. Для конкретного процесса: (Get-Process -Name chrome).Modules

PowerShell также поддерживает фильтрацию:
Get-Process | Where-Object { $_.Modules.FileName -like "*crypto*" }
Это покажет процессы, использующие криптографические библиотеки.

Модули PowerShell: Get-Module

PowerShell сам по себе модульная система. Скрипты и функции группируются в модули, которые можно подключать динамически. Чтобы посмотреть, какие модули уже загружены в текущей сессии:
Get-Module
Чтобы увидеть все доступные модули (в том числе не загруженные):
Get-Module -ListAvailable
Для анализа конкретного модуля:
Get-Module -Name NetSecurity -ListAvailable | Format-List *
Это покажет версию, путь, экспортируемые команды и зависимости.

«Всегда проверяйте цифровую подпись модулей PowerShell в продакшене. Неизвестные или самоподписанные модули — потенциальный вектор атаки.» — Алексей К., DevOps-инженер, компания «СберИнтех»

Драйверы ядра: driverquery

Windows также поддерживает драйверы режима ядра (аналог Linux kernel modules). Их можно просмотреть через:
driverquery
или
driverquery /v — для подробного вывода.
Вывод включает имя драйвера, тип, состояние, путь и дату. Полезно для аудита безопасности и поиска устаревших драйверов.

Команда
Описание
Где использовать
tasklist /m
Показывает DLL, загруженные процессами
Диагностика падений, анализ памяти
Get-Process
PowerShell: детали процессов и модулей
Администрирование, мониторинг
Get-Module
Список загруженных модулей PowerShell
Разработка скриптов, безопасность
driverquery
Драйверы ядра Windows
Аудит, обновление оборудования

Модули в языках программирования: Python, Node.js, PHP

В контексте программирования «модули» — это файлы или пакеты кода, подключаемые к основной программе. Контроль загруженных модулей критичен для отладки, управления зависимостями и предотвращения конфликтов.

Python: sys.modules

В Python каждый импортированный модуль сохраняется в словаре `sys.modules`. Это центральный реестр всех загруженных модулей в текущей сессии интерпретатора.
Чтобы посмотреть список:
«`python
import sys
print(sys.modules.keys())
«`
Для поиска конкретного модуля:
«`python
‘os’ in sys.modules # True, если os уже импортирован
«`
Вы можете также получить путь к модулю:
«`python
print(sys.modules[‘json’].__file__)
«`
Важно: `sys.modules` включает все модули, даже встроенные (`builtins`) и частично загруженные. Это делает его идеальным для отладки, но требует фильтрации при анализе.

Полезно знать: Если модуль не появляется в sys.modules, но импорт проходит успешно, возможно, он был выгружен вручную или находится в namespace-пакете.

Node.js: require.cache

В Node.js все модули кэшируются после первого импорта через `require()`. Повторный вызов `require()` возвращает объект из кэша, а не перезагружает файл. Полный список загруженных модулей доступен в `require.cache`.
Пример:
«`javascript
console.log(Object.keys(require.cache));
«`
Вывод — массив путей ко всем загруженным модулям. Чтобы очистить кэш одного модуля:
«`javascript
delete require.cache[require.resolve(‘./my-module’)];
«`
Это полезно при разработке, когда нужно перезагрузить модуль без перезапуска сервера.

PHP: get_loaded_extensions()

В PHP функция `get_loaded_extensions()` возвращает массив всех загруженных расширений (extensions), таких как `json`, `curl`, `mysqli`. Это аналог модулей ядра.
Использование:
«`php
$modules = get_loaded_extensions();
print_r($modules);
«`
Для проверки конкретного:
«`php
in_array(‘openssl’, get_loaded_extensions()); // true/false
«`
Расширения отличаются от composer-зависимостей: они компилируются в PHP или подключаются как .so/.dll. Управляются через `php.ini`.

Язык
Метод проверки
Особенности
Python
sys.modules
Включает все импортированные модули, включая встроенные
Node.js
require.cache
Кэширует модули; удаление позволяет перезагрузку
PHP
get_loaded_extensions()
Только расширения C, не Composer-пакеты

Типичные ошибки и как их исправить

Даже опытные специалисты сталкиваются с проблемами при анализе модулей. Ниже — частые ошибки и пути их решения.

Ошибка 1: Модуль не отображается, хотя должен быть

Ситуация: вы импортировали модуль в Python, но его нет в `sys.modules`.
Причины:

  • Ошибка в имени при импорте (опечатка).
  • Модуль не найден в sys.path.
  • Произошло исключение при загрузке.

Решение: используйте `try-except` при импорте и логируйте ошибки:
«`python
try:
import mymodule
except ImportError as e:
print(f»Ошибка импорта: {e}»)
«`

Ошибка 2: Конфликт модулей в Linux

Два модуля требуют разных версий одного и того же драйвера. Например, `nvidia` и `nouveau` не могут работать одновременно.
Симптомы: система не загружается, X-сервер падает, ошибка `module already loaded`.
Решение:

  1. Загрузитесь в recovery-режим.
  2. Выгрузите конфликтующий модуль: sudo rmmod nouveau.
  3. Запретите автозагрузку: добавьте в /etc/modprobe.d/blacklist.conf строку blacklist nouveau.

Ошибка 3: PowerShell блокирует сторонние модули

По умолчанию политика выполнения (`ExecutionPolicy`) может запрещать загрузку модулей из интернета.
Решение:

  • Проверьте политику: Get-ExecutionPolicy.
  • Для доверенных модулей установите: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser.
  • Подпишите модуль сертификатом или разблокируйте: Unblock-File -Path .MyModule.psm1.
Полезно знать: Перед изменением политик выполнения оцените риски. В корпоративной среде лучше использовать централизованное управление через Group Policy.

Экспертное мнение

Контроль модулей — не просто техническая операция, а часть стратегии безопасности и надёжности. Лучшие практики включают регулярный аудит, документирование изменений и использование автоматизации.
Автоматическая проверка загруженных модулей должна входить в мониторинг. Например, скрипт, который раз в час записывает список модулей ядра и отправляет хеш в SIEM-систему. Любое изменение становится триггером для расследования.
При работе с контейнерами (Docker, Podman) помните: модули ядра общие для всей системы. Контейнер не изолирован от ядра. Загрузка модуля в одном контейнере (через привилегированный режим) влияет на всю ОС.
Для языковых сред используйте lock-файлы: `requirements.txt`, `package-lock.json`, `composer.lock`. Они не показывают загруженные модули в реальном времени, но гарантируют воспроизводимость окружения.
Главный принцип: минимализм. Чем меньше модулей — тем меньше поверхность атаки. Отключайте всё, что не используется. В Linux — через `blacklist`; в Windows — через отключение служб; в приложениях — через tree-shaking и сборку без неиспользуемых зависимостей.

Вопросы и ответы

Как проверить, загружен ли модуль ядра при старте?
В Linux проверьте файлы в /etc/modules-load.d/. В systemd можно использовать systemctl list-unit-files | grep module, если модуль добавлен как служба.
Можно ли загрузить модуль без прав root?
Обычно — нет. Загрузка модулей ядра требует прав суперпользователя. Однако некоторые системы (например, с включённым Secure Boot и MOK) позволяют предварительно зарегистрированным модулям загружаться без sudo.
Почему модуль есть в списке, но не работает?
Возможные причины: конфликт с другим модулем, отсутствие оборудования, ошибка инициализации. Проверьте dmesg | grep имя_модуля в Linux или Event Viewer в Windows.
Как выгрузить модуль в Linux?
Используйте sudo rmmod имя_модуля. Убедитесь, что модуль не используется (lsmod | grep имя). Если используется — сначала остановите зависящие службы.
Можно ли посмотреть модули удалённой машины?
Да, через SSH (Linux) или удалённый PowerShell (Windows). Для массового аудита используйте Ansible, SaltStack или другие инструменты автоматизации.

Заключение

Проверка загруженных модулей — обязательный элемент администрирования, разработки и безопасности. От операционной системы до уровня приложения — каждый слой использует модульность, и игнорирование этого механизма ведёт к нестабильности и уязвимостям.

Знание того, какие модули активны, позволяет быстро диагностировать сбои, предотвращать конфликты и контролировать безопасность системы. Используйте правильные инструменты для каждой среды: lsmod в Linux, Get-Module в PowerShell, sys.modules в Python — и всегда сверяйте состояние с эталонной конфигурацией.
  • В Linux используйте lsmod, /proc/modules и kmod для анализа модулей ядра.
  • В Windows применяйте Get-Process, Get-Module и driverquery в зависимости от типа модуля.
  • В языках программирования обращайтесь к внутренним реестрам: sys.modules, require.cache, get_loaded_extensions().
  • Фиксируйте изменения модулей в системах мониторинга и SIEM.
  • Следуйте принципу минимальной достаточности — отключайте всё, что не используется.
⚠️ Дисклеймер — нажмите, чтобы развернуть

Материалы, опубликованные в разделе «Блог» на сайте RU DESIGN SHOP (rudesignshop.ru), носят исключительно информационный и ознакомительный характер и не являются руководством к действию, финансовой рекомендацией, медицинской услугой, ветеринарным назначением либо рекламой товаров и услуг, включая азартные игры. Публикации не содержат призывов к участию в азартных играх и не направлены на продвижение соответствующих операторов.

Безопасность применения товаров и веществ: при использовании строительных материалов, бытовой химии, пестицидов и агрохимикатов необходимо строго следовать инструкциям производителя и действующему законодательству Российской Федерации, включая Федеральный закон РФ от 19.07.1997 № 109-ФЗ «О безопасном обращении с пестицидами и агрохимикатами».

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

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

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

Правовая ответственность: решения, принятые на основе опубликованной информации, пользователь принимает самостоятельно и на свой риск; редакция и авторы несут ответственность в пределах, установленных законодательством Российской Федерации.

Редакция не допускает публикаций, содержащих пропаганду экстремизма, терроризма, наркотических средств или суицида; подобные материалы подлежат немедленному удалению.

Упоминание организаций с ограниченным статусом: компания Meta Platforms Inc. (социальные сети Facebook и Instagram) признана экстремистской организацией решением суда РФ, её деятельность запрещена на территории Российской Федерации; любые упоминания приводятся исключительно в информационных целях.

Авторские права и источники: информация собирается из открытых источников; её актуальность указывается на дату публикации и может изменяться.

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

Персональные данные и cookies: сайт использует cookies и обрабатывает персональные данные пользователей в соответствии с Федеральным законом № 152-ФЗ «О персональных данных» и Политикой конфиденциальности RU DESIGN SHOP.

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

 

РЕКОМЕНДУЕМ
Товары от российских производителей
Люстра Otteno v0207 GLODE
Выберите параметры Этот товар имеет несколько вариаций. Опции можно выбрать на странице товара.

Люстра Otteno v0207 GLODE

30681  руб.
Светильник SLIM SHOT Forstlight
Выберите параметры Этот товар имеет несколько вариаций. Опции можно выбрать на странице товара.

Светильник SLIM SHOT Forstlight

Диапазон цен: 14940  руб. – 283160  руб.
Люстра YardLamp TripleInv GLODE
Выберите параметры Этот товар имеет несколько вариаций. Опции можно выбрать на странице товара.

Люстра YardLamp TripleInv GLODE

Диапазон цен: 98200  руб. – 105000  руб.