Недавно мы испытали сбой питания и одновременный отказ резервного генератора, достаточно серьезный, чтобы потребовать безопасного отключения всех серверов, поскольку их ИБП разряжались.
После резервного копирования одного сервера CentOS 7.4.1708 (его первая «перезагрузка» за несколько месяцев, но она актуальна с точки зрения обновлений CentOS) я наткнулся на кирпичную стену, не позволяющую мне загрузить его с включенным SELinux. Я провел обширные исследования, но, похоже, не могу найти доказательств того, что кто-то еще испытал это, и я не знаю, что попробовать дальше. Я надеюсь, что кто-нибудь из присутствующих может предложить несколько идей.
Вот график:
Ошибка загрузки из-за того, что не запускаются несколько служб:
FAILED Failed to start Login Service.
See 'systemctl status systemd-logind.service' for details.
FAILED Failed to start Authorization Manager.
See 'systemctl status polkit.service' for details.
DEPEND Dependency failed for Dynamic System Tuning Daemon.
По инициативе этот Я перезагрузился с selinux=0
в жратве
Это работает и запускает систему, но с отключенным SELinux, что для нас неприемлемо, кроме как временного обходного пути.
Подписан совет найден в Интернете:
sudo yum reinstall selinux-policy-targeted
Перезагружен
Теперь загрузка не удалась из-за:
Failed to load SELinux policy, freezing
Перезагрузился с selinux=0
снова в жратве
Нашел больше советов так выполнено:
sudo yum reinstall selinux-policy-targeted
sudo touch /.autorelabel
и установить разрешающий в /etc/selinux/config
Перезагружен
Мог увидеть следующий баннер:
Warning -- SELinux targeted policy relabel is required.
Relabeling could take a very long time, depending on file
system size and speed of hard drives.
но вместо того, чтобы фактически выполнить перемаркировку, система немедленно перезагрузилась - слишком быстро, чтобы увидеть какой-либо другой результат
Снова произошла ошибка загрузки с исходной ошибкой.
Итак, тьфу, мы снова здесь. И я вижу это /.autorelabel
все еще существует, что говорит о том, что перемаркировки не произошло. Однако для меня удивительно, что мы вернулись к исходной точке с ошибками.
Также помните, что SELinux все еще находится в разрешающем, а не принудительном режиме.
Конечным результатом является то, что я застрял, не имея возможности включить SELinux ни в разрешающем, ни в принудительном режиме, что не нормально.
Как мне продолжить?
tl; dr: Все свелось к недопустимому значению для SELINUXTYPE
.
Удостовериться SELINUXTYPE
имеет допустимое значение, затем при необходимости выполните перемаркировку (например, если вы загрузились с выключенным SELinux во время диагностики), перезагрузитесь и откройте шампанское.
По какой-то причине и в какой-то момент /etc/selinux/config
приобрел настройку SELINUXTYPE=permissive
.
Это недопустимая опция для этого параметра, и, похоже, значение возвращается к значению «по умолчанию», исходя из перечисленных причин, по которым произошел сбой Dbus, службы входа в систему и диспетчера авторизации:
Failed to open "/etc/selinux/default/contexts/dbus_contexts": No such file or directory
Это хлопотно, потому что нет selinux-policy-default
пакет в CentOS 7 (в Debian, например, он был намеренно удален в Jessie так что я предполагаю, что то же самое и здесь).
Я подозреваю, что именно поэтому попытки переименовать файловую систему с помощью restorecon
(из однопользовательского режима и из оболочки, доступной init=/sbin/sh
) приводил к сбивающим с толку выводам «Нет такого файла или каталога», и getenforce
все равно будет показывать "Отключено" без видимой причины.
Чтобы переключиться на selinux-policy-targeted
вещи, которые является установлен, я исправил конфигурацию, чтобы SELINUXTYPE=targeted
(как я считаю, это должно было быть все время), затем снова перезагрузился с enforcing=0 autorelabel=1
.
Затем произошла перемаркировка. После этого система загрузилась в обычном режиме.
Вы должны иметь возможность переименовать файловую систему с помощью:
# restorecon -rv /
Я не уверен на 100%, работает ли это в режиме Disabled, возможно, вам потребуется включить Permissive / Enforcing.
Можете ли вы загрузиться с включенным selinux и init=/bin/sh
?
Вы должны были загрузиться в режим восстановления, затем в корневой терминал оболочки и поставить disabled = 1, затем возобновить без перезагрузки, затем отключить его в файле конфигурации ... Затем удалите selinux, затем перезапустите
Чтобы решить эту проблему, я полностью удалил SELinux, используя
sudo yum удалить selinux *
После удаления я переустановил selinux
sudo yum установить selinux *
затем перезагрузился в пассивном режиме. После загрузки политики я переключился на принудительное применение и снова перезагрузился. Простое удаление политики и повторная установка плюс создание /.autorelabel не помогли. Это было единственное, что я мог обойти, если политика не загружалась.
Иногда такая же проблема может возникнуть из-за политики SELinux, даже если SELinuxtype установлен правильно. И на экране загрузки появляется следующая строка:
Failed to load SELinux policy, freezing
Чтобы решить эту проблему в качестве другого обходного пути, вы можете установить SELinux на permissive
режим первый
затем перезагрузите компьютер, и вы увидите, что SELinux генерирует политику на экране перезагрузки. После этого вы можете снова без проблем установить его в принудительный режим.
Перед тем, как решить проблему, вы можете проверить пакет policy devel.
sudo yum install policycoreutils-devel
И возможно вы получите ошибку при установке. В основном это происходит из-за конфликтных пакетов, и все еще выходит даже для Red Hat 8.