Запустите антивирус ESET внутри контейнера Docker.

Вопрос или проблема

Я хочу запустить eset antivirus for linux внутри контейнера docker, чтобы иметь возможность сканировать отдельные файлы по запросу.

Я создал простой Dockerfile, который устанавливает bin файл eset с использованием ubuntu:latest в качестве образа, но это выдает мне, что не хватает множества пакетов:

0.362 Извлечение:                                                                                                          
0.370 eea-11.1.3.0-ubuntu18.x86_64.deb
0.702 
0.709 Чтение списков пакетов...
0.723 Построение дерева зависимостей...
0.724 Чтение информации о состоянии...
0.726 E: Невозможно исправить проблемы, имеются удерживаемые поломанные пакеты.
0.727 Некоторые пакеты не могут быть установлены. Это может означать, что вы
0.727 запросили невозможную ситуацию или, если вы используете нестабильную
0.727 дистрибуцию, некоторые необходимые пакеты еще не были созданы
0.727 или перемещены из Incoming.
0.727 Следующая информация может помочь в решении ситуации:
0.727 
0.727 Следующие пакеты имеют неудовлетворенные зависимости:
0.727  eea : Зависит: gcc, но он не устанавливаемый
0.727        Зависит: make, но он не устанавливаемый
0.727        Зависит: perl, но он не устанавливаемый
0.727        Зависит: linux-headers-generic-hwe-24.04, но он не устанавливаемый или
0.727                 linux-headers-generic-hwe-22.04, но он не устанавливаемый или
0.727                 linux-headers-generic-hwe-20.04, но он не устанавливаемый или
0.727                 linux-headers-generic-hwe-18.04, но он не устанавливаемый или
0.727                 linux-headers-amd64, но он не устанавливаемый
0.727        Зависит: linux-headers-generic, но он не устанавливаемый или
0.727                 linux-headers-amd64, но он не устанавливаемый
0.727        Зависит: libelf-dev, но он не устанавливаемый или
0.727                 libelf-devel, но он не устанавливаемый или
0.727                 elfutils-libelf-devel, но он не устанавливаемый
0.727        Зависит: anacron, но он не устанавливаемый
0.727        Зависит: libcurl4, но он не устанавливаемый
0.727        Рекомендует: libnss3-tools, но он не устанавливаемый
0.727        Рекомендует: nftables, но он не устанавливаемый
0.727 Ошибка при установке пакетов, выход

Не зная, что делать, я просто выполнил apt-get install ... для каждого отсутствующего пакета перед установкой .bin, но повторная установка снова выдала мне ошибку:

1.730 Система не была загружена с использованием systemd в качестве init-системы (PID 1). Невозможно работать.
1.730 Не удалось подключиться к шине: Хост не в сети
1.730 Ошибка ESET Endpoint Antivirus: Поддержка UTF-8 не установлена в системе. Пожалуйста, сначала установите локаль UTF-8. Установка прервана.

Кажется, что установщик eset требует, чтобы systemd был в системе PID 1, но внутри контейнера docker там будет находиться docker.

Есть ли какой-либо способ запустить eset antivirus внутри контейнера docker?

.

Ответ или решение

Запуск ESET Antivirus в контейнере Docker может представлять собой сложную задачу из-за особенностей работы данной антивирусной программы и ограничений, накладываемых архитектурой Docker. Чтобы разобраться, как это сделать, следует рассмотреть несколько ключевых аспектов:

теорию Docker и ESET Antivirus, примеры настройки и применения решений.

Теория

Во-первых, следует разобраться, как Docker управляет процессами и какие ограничения он накладывает на запуск программ. В контейнерах Docker используется единая файловая система и изолированные процессы, что затрудняет запуск программ, требующих доступа к системным компонентам или использующих определенные системные службы, такие как systemd. Docker предназначен для работы с приложениями, которые могут функционировать в изоляции, минимально взаимодействуя с хостовой ОС.

ESET Antivirus требует наличия некоторых служб и библиотек, которые в обычных системах доступны через системный менеджер systemd. Но поскольку в контейнерах Docker systemd не используется в качестве процесса с ID 1, это вызывает конфликты и ошибки при установке.

Пример

Рассмотрим пример настройки Dockerfile для установки ESET Antivirus, а также способы обхода возникших проблем:

FROM ubuntu:latest

# Установка необходимых пакетов
RUN apt-get update && apt-get install -y locales gcc make perl linux-headers-generic \
    libelf-dev anacron libcurl4 libnss3-tools nftables \
    && locale-gen en_US.UTF-8

# Задание локали UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

# Копируем и устанавливаем ESET
COPY eea-<version>.linux.x86_64.bin /tmp/eea.bin
RUN chmod +x /tmp/eea.bin && /tmp/eea.bin

# Решение проблемы с systemd
CMD ["/sbin/init"]

В данном Dockerfile:

  1. Устанавливаются все необходимые зависимости и задается UTF-8 локаль, чтобы избежать проблем с кодировкой.
  2. Копируется и устанавливается файл установки ESET.
  3. Команда CMD запускает процесс init, но это не устранит всех проблем с systemd.

Применение

Хотя данный пример демонстрирует базовый подход к установке ESET Antivirus, требуются дополнительные шаги для корректной работы без использования systemd. Один из методов — запуск контейнера в режиме привилегированного доступа с использованием специального init-сценария dumb-init или tini, которые имитируют поведение системного init.

Вот пример настроек:

  1. Установите dumb-init в образ Docker:

    ADD https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 /usr/local/bin/dumb-init
    RUN chmod +x /usr/local/bin/dumb-init
  2. Используйте dumb-init в командной строке запуска:

    CMD ["dumb-init", "--", "/sbin/init"]

Однако, даже если вы настроите init-процесс, ESET Antivirus может потребоваться полноценная система systemd. Альтернативным решением может быть использование минималистичного дистрибутива, поддерживающего systemd, например, systemd-docker или мульти-платформенных init-систем.

Заключение

Запуск ESET Antivirus в контейнере Docker — это нестандартная задача, которая предполагает работу в условиях определённых ограничений Docker и специфических требований к программному обеспечению. Хотя описанные шаги могут помочь в настройке, в некоторых случаях может оказаться проще рассмотреть другой подход, например, запуск антивируса на виртуальной машине или хостовой системе, чтобы избежать проблем с зависимостями и инициализацией системы.

Важно помнить, что

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

Оцените материал
Добавить комментарий

Капча загружается...