SELinux блокирует доступ qemu / libvirt к ISO

Маленький файл, большой файл. У меня есть одна привычка — всегда максимально исключать дисковый ввод-вывод. Один из способов сделать это — поместить файл в массив. Конечно, для этого требуется, чтобы env $IFS был установлен соответствующим образом для файла, но исключает ввод-вывод.

data=( $(cat customer-info) )

Тогда ты можешь выбрать из этого...

FIRST_NAME=$(echo "${data[@]}" | tr ' ' '\n' | grep "$customer_id" | cut -f5 -d,)

Другой метод может состоять в том, чтобы назначить массиву только те два бита, которые нужны, например так...

data=( $(grep "${customer_id}" customer-info | cut -d, -f5,6) )

2
31.12.2019, 18:10
3 ответа

Стандартная процедура устранения неполадок SELinux:

  1. Можно ли воспроизвести проблему? Если да, перейдите к пункту 2.
  2. В разрешительном режиме работает? Если да, перейдите к 3.
  3. Записывает ли SELinux события в журнал? ausearch -m avc,user_avc,selinux_err -i. Если да, интерпретируйте их и/или позвольте Audit2why интерпретировать их для вас. Если нет, переходите на 4.
  4. запустите semodule -DB, чтобы сделать SELinux подробным, затем воспроизведите проблему и вернитесь к пункту 3.

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

Вы не предоставили никаких журналов событий SELinux, поэтому на данный момент я могу только строить догадки. Это может иметь отношение к меткам вашей пользовательской /dataточки монтирования. Если libvirt не может пройти /data, то он никогда не сможет добраться до образов.

0
27.01.2020, 22:16

Для тех из вас, у кого есть соответствующие ошибки в audit.log, если это новая установка, вы можете использоватьaudit2allowдля автоматического создания правильных конфигураций SELinux. Я лично запускаю это только при новых установках, так как вы потенциально можете разрешить несанкционированное программное обеспечение SELinux, если не будете осторожны.

  1. Убедитесь, что SELinux работает в режиме Permissive.
  2. Убедитесь, что отказы регистрируются в /var/log/audit.log. Если ничего нет, запустите semodule -DBи снова запустите сбойную программу; логи должны быть созданы. После этого запустите semodule -B, чтобы отключить подробное ведение журнала.
  3. Запустите audit2allow -w -a-, это покажет вам, что блокируется, в удобочитаемой -форме.
  4. Запустите audit2allow -aдля просмотра правила Type Enforcement, которое разрешает запрещенный доступ
  5. Если вы согласны с приведенным выше выводом, запустите audit2allow -a -M newrules, чтобы создать пользовательский модуль.Параметр -Mсоздает файл Type Enforcement (.te )с именем, указанным с помощью -M, в вашем текущем рабочем каталоге
  6. .
  7. Чтобы установить модуль, запуститеsemodule -i newrules.pp
  8. Установите SELinux в режим Enforcing; тестовый функционал.

Я рекомендую onlyзапускать это на новых строящихся серверах, так как вы потенциально можете позволить приложениям использовать обходы SELinux, которые не требуются. Это может быть опасно на рабочем сервере. Если у вас есть несколько вещей, упомянутых в audit2allow, вы можете использовать grep, как указано в документации Red Hat. Пожалуйста, обратитесь к официальной документации по ссылке audit2allow.

0
27.01.2020, 22:16

Вам необходимо присвоить папке образа соответствующую метку, которая разрешает совместное чтение/запись содержимого виртуальной машины. Эта метка должна иметь тип svirt_image_t:s0.

semanage fcontext -a -t svirt_image_t "/data/libvirt/images(/.*)?"
restorecon -vR /data/libvirt/images

При монтаже добавить contextв качестве опции:

mount... /data/libvirt/images -o context="system_u:object_r:svirt_image_t:s0"
// keep default for user and role, but type is important:    ^--------------^ 

SELinux теперь разрешает доступ к ISO из менеджера VM/QEMU/virt -.

0
07.05.2021, 09:17

Теги

Похожие вопросы