Fedora 12 - SELinux: Восстановление работоспособности
Каждый, кто начинает изучать SELinux, может столкнуться с рядом проблем, ответы на которые в интернете не так легко найти. В данной статье я хочу рассказать о решениях этих проблем, тем более, что в русском сообществе документации по SELinux немного.
Что нужно знать о SELinux?
SELinux "живая" система, как тамогочи :).
Все изменения происходят мгновенно и работают до тех пор,
пока не вмешается человек. На мой взгляд, в настоящее время
многое неудобно с точки зрения обычного пользователя. Все, что
поставляется по дефолту лежит здесь: /usr/share/selinux
.
Активная система расположена здесь: /etc/selinux
.
До тех пор, пока в активной части будут оставаться ваши
персональные файлы, они будут действовать либо как вам нужно, либо будут наоборот мешать.
Стандартных средств для восстановление "убитого"
SELinux нет и скорей всего не будет. Поэтому надо все делать очень аккуратно.
И рекомендую выставлять системную политику в /etc/selinux/config
SELINUX=permissive
в ходе восстановления системы.
Система не загружается
Начнем с того, что SELinux при неправильной настройке или сбое может полностью блокировать загрузку системы. Например, файловая система будет монтироваться в read-only режиме, какие-то программы откажутся запускатся и вообще все будет нехорошо. Обратить стоит внимание на сообщения, подобные этому:
|
Причина: контекст на файл libselinux.so.1
изменился. Проверяем так:
|
Результатом, скорее всего, будет просто символ вопроса '?'. Стандартными средствами с помощью chcon изменить контекст не получится. Исправить ситуацию легко. Первым делом перезагружаем систему, заходим в меню grub (по умолчанию оно не отображается, надо нажать любую клавишу). Редактируем строчку загрузки ядра, добавляя в самом конце следующее:
|
Тем самым мы загрузимся в однопользовательский режим. Всё, что нам остается сделать, это установить правильный контекст и перегрузить систему:
|
Восстановление булевых переменных по умолчанию (Restore default booleans)
В настоящий момент ни графическая утилита SELinux Management, ни какие особые консольные утилиты, да и вообще ничто не может контролировать возврат булевых переменных в изначальное состояние, как при установке системы, кроме человека.
Что касается файлов /etc/selinux/booleans
и /etc/selinux/booleans.local
,
то в настоящее время их поддержка в Fedora 12 отключена.
Чтобы сбросить все исходное состояние,
вам понадобятся файлы booleans-targeted.conf
,
booleans-mls.conf
, booleans-minimum.conf
,
в зависимости от установленных политик.
Эти файлы находятся в исходниках пакета selinux-policy
.
|
Файлы расположены в ~/rpmbuild/SOURCES
или в отличном месте,
если вы изменяли файл ~/.rpmmacros
.
Далее, с помощью стандартной утилиты setsebool
нужно выставить каждое значение самостоятельно.
Я для этого написал скрипт на перле, который делает эту работу за меня :)
|
Восстановление модулей по умолчанию (Restore default modules)
Как я говорил в самом начале, все что находится в /etc/selinux
будет работать
до тех пор, пока вы не сделаете изменения в файлах, расположенных там,
самостоятельно. Для восстановления модулей придется немного
поработать руками и головой :) Первым делом, нам надо почистить /etc/selinux
.
После установки собственных модулей данные о них прописывается в разных файлах,
которые в последствии мешают восстановлению к изначальному состоянию.
|
Следующим шагом следует восстановить модули в активной директории. Я делаю это переустановкой части пакетов:
|
Пакеты можно скачать через yumdownloader. Также можно воспользоваться yum reinstall. Далее, стоит сказать системе провести изменения контекста для файлов после перезагрузки и перезагрузится:
|
Вместо заключения
Статья не претендует на полноту, поэтому буду рад конструктивным комментариям. Когда работаете с SELinux будьте просто внимательней и обдумывайте, записывайте каждое ваше действие, если не уверены на 200%, что делаете правильно.