Не удается изменить или удалить пользователя SELinux.

Вопрос или проблема

Я экспериментировал с 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. Это может указывать на ошибку в маппинге пользователей, сохранившихся в системе.

Возможные причины

  1. Неверный маппинг пользователей: Ваша попытка изменить уровень s0:c0.c51 сначала, а затем обратно на s0:c0.c50 могла оставить несовместимые записи в конфигурации.
  2. Некорректное обновление базы данных SELinux: Полностью обратно измененные значения могли не быть правильно зарегистрированы.
  3. Ошибка в файле настроек: В файле /etc/selinux/targeted/seusers могла остаться некорректная запись, вызвавшая сбой.

Рекомендации по решению

  1. Редактирование файла seusers:

    • Откройте файл /etc/selinux/targeted/seusers и проверьте наличие старых и новых маппингов для bob и alice. Попробуйте удалить все противоречивые записи.
  2. Обновление базы данных SELinux:

    • После изменений в seusers, выполните semodule -B для пересборки и обновления конфигурации политик. Это должно устранить несоответствия в маппингах.
  3. Проверка и исправление ролей:

    • Убедитесь, что роли и уровни MLS/MCS предопределены правильно. Если требуется, вручную задайте их с помощью команды:
      semanage user -m -R "{ sysadm_r webadm_r }" user_u -r s0-s0:c0.c1023
  4. Полный сброс изменений:

    • Если ничего из перечисленного не помогает, рассмотрите возможность полного сброса политики SELinux до исходных настроек, что может потребовать создания новой рабочей среды, если это применимо.

Профилактические меры

  • Резервное копирование конфигураций: Перед изменением настроек SELinux всегда делайте резервные копии конфигов.
  • Тестирование в виртуальной среде: Тестируйте изменения в виртуальной или изолированной среде, чтобы избежать проблем в рабочей системе.

Заключение

Проблема, с которой вы столкнулись, подчеркивает важность тщательного планирования и тестирования изменений в мандатной политике SELinux. Вышеизложенные шаги должны помочь вернуть систему в работоспособное состояние. Если проблема не решается локальными средствами, может потребоваться привлечение поддержки от Red Hat или эксперта по безопасности SELinux.

Оцените материал
Добавить комментарий

Капча загружается...