
Недавно у нас произошел сбой электропитания и одновременный отказ резервного генератора. Это было настолько серьезно, что потребовалось безопасное отключение всех серверов, поскольку их ИБП были разряжены.
При восстановлении одного сервера 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
помощью grubЭто работает и запускает систему, но с отключенным SELinux, что не является для нас чем-то иным, кроме как временным решением.
Последовалосовет найденный в сети:
sudo yum reinstall selinux-policy-targeted
Перезагружено
Загрузка сейчас не удалась из-за:
Failed to load SELinux policy, freezing
Перезагрузился
selinux=0
снова с помощью grubНайденныйбольше советовтак выполнено:
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 ни в разрешающем, ни в принудительном режиме, что не нормально.
Как мне действовать?
решение1
вкратце:Все свелось к недопустимому значению 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
.
Затем была произведена перемаркировка. После этого система загрузилась в обычном режиме.
решение2
Вы должны иметь возможность переименовать файловую систему с помощью:
# restorecon -rv /
Я не уверен на 100%, работает ли это в отключенном режиме, возможно, вам нужно перейти в режим Permissive/Enforcing.
Можете ли вы загрузиться с включенным selinux и init=/bin/sh
?
решение3
Вам следует загрузить его в режиме восстановления, затем войти в терминал root shell и установить disabled=1, затем возобновить работу без перезагрузки, затем отключить его в файле конфигурации... Затем удалить selinux и перезапустить.
решение4
Иногда та же проблема может возникнуть из-за политики SELinux, даже если SELinuxtype установлен правильно. И на экране загрузки появляется следующая строка:
Failed to load SELinux policy, freezing
Чтобы решить эту проблему в качестве другого обходного пути, вы можете сначала установить SELinux в permissive
режим,
а затем перезагрузить машину, и вы увидите, что SELinux генерирует политику на экране перезагрузки. После этого вы можете снова установить его в режим enforcing без проблем.
Перед решением проблемы вы можете проверить пакет политики devel.
sudo yum install policycoreutils-devel
И возможно вы получите ошибку при попытке установить его. Это происходит из-за конфликтов пакетов в основном и все еще выходит даже для Red Hat 8