Вопрос или проблема
Я экспериментировал с user_u
в целевой политике на RHEL 6.5. Я вошел в систему как root в неконфайнед-контексте, поэтому у меня есть полная возможность изменять все, что я хочу. Я также переключился в разрешительный режим на всякий случай. Изначально у меня была настроена user_u с MLS/MCS настройками “s0:c0.c50”. Это состояние работало правильно и без проблем (насколько я знаю). Чтобы протестировать изменение этого командой, я ввел:
semanage user -m -r s0:c0.c51 user_u
Это выполнилось без каких-либо проблем, и я смог убедиться, что это сработало правильно с помощью semanage user -l
. Теперь user_u
имеет MLS/MCS “s0:c0.c51”. Однако, если я пытаюсь изменить user_u или одного из пользователей, связанных с user_u (по имени bob
и alice
), я получаю ошибку, которая выглядит так:
libsemanage.validate_handler: диапазон MLS s0:c0.c50 для Unix-пользователя bob превышает допустимый диапазон s0:c0.c51 для пользователя SELinux user_u (Нет такого файла или каталога).
libsemanage.validate_handler: отображение seuser [bob -> (user_u, s0:c0-c50)] недопустимо (Нет такого файла или каталога).
libsemanage.dbase_llist_iterate: не удалось выполнить итерацию по записям (Нет такого файла или каталога).
Запутывающая часть в том, что s0:c0.c50 ‘превышает’ s0:c0.c51. Если я пытаюсь изменить user_u, оно жалуется на bob. Если я пытаюсь удалить bob, оно жалуется на alice. Если я пытаюсь удалить alice, оно жалуется на bob. Я фактически не могу изменить любого из них (через графический интерфейс или командную строку).
Изначально я пытался отменить изменения от semanage и вернуться к user_u
с s0:c0.c50, но это не сработало, поэтому я попробовал s0-s0:c0.c1023, что тоже не сработало. Я заметил, что ошибки никогда не упоминали s0-s0:c0.c1023, так что это похоже на то, что они выходят из строя до реального изменения MCS/MLS user_u.
Я смог найти лишь несколько примеров подобного в Интернете, и единственный, который я нашел с советом, говорил удалить отображения пользователя из /etc/selinux/targeted/seusers и запустить semodule -B
. Я попробовал это, и semodule -B
завершился с теми же сообщениями об ошибках. Я также заменил удаленные части seusers и попробовал semodule -B
безрезультатно.
Есть идеи, как это исправить? Это была песочница, так что легко просто вернуться к оригинальному образу, но у меня не будет такой роскоши в развернутой среде.
Что-то подобное случилось и со мной, достаточно похожее для поиска в Интернете. Я не изменял контекст MLS, но у меня были странные ошибки, как в оригинальном вопросе здесь:
libsemanage.validate_handler: MLS диапазон s0-s0:c0.c1023 для Unix-пользователя elflord превышает допустимый диапазон s0 для пользователя SELinux sysadm_u (Нет такого файла или каталога).
libsemanage.validate_handler: отображение seuser [elflord -> (sysadm_u, s0-s0:c0.c1023)] недопустимо (Нет такого файла или каталога).
libsemanage.dbase_llist_iterate: не удалось выполнить итерацию по записям (Нет такого файла или каталога).
Это произошло при запуске semodule [-i|-B
, и особенно сбивало с толку с -i
, когда модуль не упоминал sysadm_u
.
Причиной был предыдущий (и несвязанный) попытка добавить роль для sysadmn_u
так:
semanage user -m -R webadm_r sysadm_u
Страница man неоднозначно описывает функциональность -R
с -m
, но очевидно, что это не модификация в смысле добавления роли, она их заменяет:
> seinfo -u sysadm_u -x
Пользователи: 1
пользователь sysadm_u роли webadm_r уровень s0 диапазон s0;
Ой, sysadm_r
исчез. Это также означало, что elflord
не мог войти в систему, по крайней мере через ssh: передается сообщение Unable to get valid context for elflord
.
Более того, хотя я не указывал -r
, это было установлено на минимальный уровень s0 диапазон 0
, что больше всего беспокоило текст ошибки.
Исправление заключалось в повторной модификации пользователя, включая оригинальные роли и диапазон:
semanage user -m -R { sysadm_r webadm_r } sysadm_u -r s0-s0:c0.c1023
.
Ответ или решение
Проблема, с которой вы столкнулись при изменении и удалении пользователя SELinux на RHEL 6.5, может быть довольно сложной, особенно когда речь идет о контекстах безопасности MLS/MCS. Давайте разберем ваш случай шаг за шагом и предложим возможное решение.
Анализ ситуации
Вы столкнулись с проблемой несоответствия MLS/MCS диапазона для пользователя user_u
с пользователями bob
и alice
, которые связаны с user_u
. При этом вы изменили MLS/MCS для user_u
, но система выдает ошибку о том, что s0:c0.c50 "превышает" s0:c0.c51. Это может указывать на ошибку в маппинге пользователей, сохранившихся в системе.
Возможные причины
- Неверный маппинг пользователей: Ваша попытка изменить уровень s0:c0.c51 сначала, а затем обратно на s0:c0.c50 могла оставить несовместимые записи в конфигурации.
- Некорректное обновление базы данных SELinux: Полностью обратно измененные значения могли не быть правильно зарегистрированы.
- Ошибка в файле настроек: В файле /etc/selinux/targeted/seusers могла остаться некорректная запись, вызвавшая сбой.
Рекомендации по решению
-
Редактирование файла seusers:
- Откройте файл
/etc/selinux/targeted/seusers
и проверьте наличие старых и новых маппингов дляbob
иalice
. Попробуйте удалить все противоречивые записи.
- Откройте файл
-
Обновление базы данных SELinux:
- После изменений в
seusers
, выполнитеsemodule -B
для пересборки и обновления конфигурации политик. Это должно устранить несоответствия в маппингах.
- После изменений в
-
Проверка и исправление ролей:
- Убедитесь, что роли и уровни MLS/MCS предопределены правильно. Если требуется, вручную задайте их с помощью команды:
semanage user -m -R "{ sysadm_r webadm_r }" user_u -r s0-s0:c0.c1023
- Убедитесь, что роли и уровни MLS/MCS предопределены правильно. Если требуется, вручную задайте их с помощью команды:
-
Полный сброс изменений:
- Если ничего из перечисленного не помогает, рассмотрите возможность полного сброса политики SELinux до исходных настроек, что может потребовать создания новой рабочей среды, если это применимо.
Профилактические меры
- Резервное копирование конфигураций: Перед изменением настроек SELinux всегда делайте резервные копии конфигов.
- Тестирование в виртуальной среде: Тестируйте изменения в виртуальной или изолированной среде, чтобы избежать проблем в рабочей системе.
Заключение
Проблема, с которой вы столкнулись, подчеркивает важность тщательного планирования и тестирования изменений в мандатной политике SELinux. Вышеизложенные шаги должны помочь вернуть систему в работоспособное состояние. Если проблема не решается локальными средствами, может потребоваться привлечение поддержки от Red Hat или эксперта по безопасности SELinux.