SELinux: позволяет процессу создавать любой файл в определенном каталоге

У меня есть сценарий, который при вызове приведет к тому, что содержимое dmesg будет записано в файл, причем имя файла в основном является меткой времени. SELinux предотвращает это. Следуя рекомендациям приложения для устранения неполадок SELinux Fedora, я попробовал:

grep dmesg /var/log/audit/audit.log | audit2allow -M mypol

semodule -i mypol.pp

Однако, похоже, это не работает, возможно, потому, что имя создаваемого файла отличается каждый раз. Итак, как я могу сказать SELinux, чтобы позволить dmesg создавать (и записывать) любой файл в определенном каталоге? Или сказать, что этот сценарий (и все процессы, которые он порождает) может сделать это?

  • В каком контексте SELinux должен выполняться сценарий pam_exec?
  • chcon: не удалось изменить контекст `/etc/oddjobd.conf.d 'на` unconfined_u: object_r: oddjob_t: s0': разрешение отклонено
  • Неверная роль и тип при входе в систему
  • Использование Sandin Sandbox
  • Как перейти в другой домен при вызове sudo?
  • Apache не может открыть файл, который является символической ссылкой
  • SELinux: определение каталога отказавшего файла
  • Параметры выходного компилятора из SSH
  • 2 Solutions collect form web for “SELinux: позволяет процессу создавать любой файл в определенном каталоге”

    Вам нужно научиться фильтровать отклонения AVC и как написать настраиваемый политический модуль, чтобы разрешить доступ к определенному действию (в этом случае вы сценарий).

    Я бы начал с удаления модуля, который вы вставили выше, чтобы запустить a-new:

     # semodule -r mymodule.pp 

    Затем запустите свой скрипт:

     # date && ./my_script.sh 

    Вызов date полезен для фильтрации отказов AVC на основе временной метки.

    Затем используйте обычный метод для отладки AVC-отказов, который использует команду ausearch(8) :

     # ausearch -m avc -ts $timestamp | audit2allow 

    Проверьте man-страницу для получения дополнительной информации о переключателях, которые вы можете использовать, в -ts флаг -ts .

    С помощью этой информации вы узнаете, что отрицается на основе существующей политики.

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

     # ausearch -m avc -ts 10:40:00 | audit2allow -m my_script > my_script.te 

    Это приведет к описанию type enforcement .

    Вы должны приступить к просмотру кода для обеспечения его правильности и компиляции кода type enforcement в module :

     # checkmodule -M -m -o my_script.mod my_script.te 

    Модуль должен быть упакован в policy package чтобы вы могли его загрузить и выгрузить по своему усмотрению:

     # semodule_package -o my_script.pp -m my_script.mod 

    Теперь вы можете загрузить политику, используя:

     # semodule -i my_script.pp 

    Проверьте правильность загрузки:

     # semodule -l | grep my_script 

    Затем попробуйте снова вызвать опровержения и посмотреть, есть ли в журнале аудита больше (разных) предупреждений относительно этого же процесса.

    Дальнейшим выпускам кода type enforcement потребуется version ( 1.0 ) или загрузка пакета не удастся. После компиляции и упаковки, обновление policy package выполняется:

     # semodule -u my_script.pp 

    С SELinux можно многое узнать. Некоторые полезные ссылки:

    • Команды команд.
    • Проверьте также выход apropos selinux .

    Из документов RHEL

    • Управление ограниченными услугами .
    • Улучшенный Linux .

    Хорошая вступительная презентация Дэйва Куигли:

    • Демистификация SELinux

    Вы можете запустить semanage permissive -a dmesg_t . Тогда /bin/dmesg , тип которого dmesg_t , будет работать в разрешающем режиме. Это будет разрешен доступ, но SELinux все равно будет генерировать сообщения AVC.

    Linux и Unix - лучшая ОС в мире.