Вопрос или проблема
Я ищу способ предотвратить установку epel-release RPM на моих системах RHEL 8 и 9. Мы используем внутреннее зеркало репозитория для этого, которое конфликтует с версией, на которую указывает epel-release. Некоторые менее опытные системные администраторы иногда пытаются следовать инструкциям, найденным в Интернете, и иногда идут на большие ухищрения, чтобы обойти уже установленные мною ограничения.
Я уже добавил следующее в мой dnf.conf:
[main]
... # другие настройки здесь
excludepkgs = epel-release
но это не предотвращает загрузку epel-release RPM и установку его с помощью rpm.
Еще одна ситуация, создающая проблемы, это когда другой RPM включает epel-release как зависимость. Это тоже должно вызывать ошибку, но может быть обойдено аналогичным способом.
Кроме того, я также автоматически отключаю все “внешние” репозитории.
/etc/dnf/plugins/subscription-manager.conf
[main]
enabled=1
disable_system_repos = 1
Но и это легко обойти.
Я хотел бы полностью предотвратить установку любого пакета с именем epel-release (любой версии), независимо от того, используется ли для этого dnf, yum или rpm.
Есть ли способ достичь этого?
Ответ или решение
Для предотвращения установки пакета epel-release в системах RHEL 8 и 9, даже при попытках опытных или неопытных администраторов обойти имеющиеся ограничения, необходимо предпринять несколько последовательных стратегий:
Теория
Чтобы полностью запретить установку конкретного пакета, такого как epel-release, необходимо учесть несколько моментов. Стандартные методы, такие как использование excludepkgs
в dnf.conf
, могут предотвратить установку пакета через dnf
или yum
, но не защищают от прямой установки при помощи rpm
.
Кроме того, может возникнуть ситуация, когда пакет epel-release будет включен как зависимость в другом пакете. Здесь простое ограничение с использованием excludepkgs
не поможет, так как зависимость может быть установлена одновременно с основным пакетом. Также стоит учитывать, что отключение внешних репозиториев может быть временной мерой, так как администраторы могут их снова включить.
Пример
Рассмотрим, как можно составить стратегию, используя политики конфигурации и системные механизмы контроля:
-
Контроль доступа на уровне пакетов: Используйте механизм безопасности SELinux. Создайте или измените соответствующий модуль SELinux, чтобы запретить доступ к epel-release. Так как SELinux может контролировать доступ к файловым системам и управлять процессами, это может стать эффективной первой линией обороны.
-
Фильтрации через пакеты-модули: Используйте пакетные модули, такие как
rpm-plugin
для создания фильтров на базе известных конфигураций для предотвращения установки черезrpm
. -
Мониторинг и предупреждения: Настройте систему мониторинга, например, используя
Auditd
, чтобы отслеживать все попытки установки определенного пакета. Это позволит быстро реагировать на инциденты и предотвращать повторные попытки обхода ограничений.
Применение
С целью запрета установки epel-release можно использовать следующий пошаговый подход:
-
Настройки SELinux:
- Создайте новый домен или измените существующий, например, используя:
semanage fcontext -a -t bin_t '/usr/bin/rpm' semanage boolean -m --on domain_can_have_interactive_subdomain service auditd start
- Добавьте EPOLICY в файл конфигурации для запрета:
echo "allow domain_t bin_t:exec *rm;" >> /etc/selinux/targeted/modules/active/itas/admin.policy semodule -B
- Создайте новый домен или измените существующий, например, используя:
-
Контроль процессов: Системы контроля, такие как AppArmor или более настойчивые DAC (Discretionary Access Control), могут помочь в установке ограничений на уровне процессов. Moeжно установить рамки, в которых определенные процессы смогут выполнять или не выполнять действия в системе.
-
Использование Immutable System State: Используйте утилиты, такие как
chattr
, для защитной блокировки ключевых файлов и конфигураций:chattr +i /etc/dnf/dnf.conf
-
Настройка службы
Auditd
и журналирование:- Добавьте правила в конфигурацию
auditd
, чтобы фиксировать попытки установить epel-release:auditctl -a always,exit -F arch=b64 -S execve -k epelrelease-attempts
- Настройте так, чтобы любое использование
rpm
для установки epel-release отправляло тревогу на вашу систему мониторинга.
- Добавьте правила в конфигурацию
-
Обучение и осведомленность: Убедитесь, что все системные администраторы и пользователи в курсе строгих политик использования
epel-release
. Проводите регулярные тренинги и утверждайте политические документы для описания использования разрешенных репозиториев.
Заключение
Реализовав описанные выше меры, вы сможете создать многослойную защиту от установки конфликтующего пакета epel-release в ваших системах RHEL 8 и 9. Сочетание системных настроек, ограничения доступа, активного мониторинга и обучения персонала поможет обеспечить соблюдение политики, повышения безопасности и отказоустойчивости системы в целом.