Product SiteDocumentation Site

7.3.8. Предоставление доступа: audit2allow

Не используйте данный пример в продуктивной системе. Он используется только для демонстрации использования audit2allow.
From the audit2allow(1) manual page: "audit2allow - generate SELinux policy allow rules from logs of denied operations"[17]. After analyzing denials as per Раздел 7.3.7, «Сообщения sealert», and if no label changes or Booleans allowed access, use audit2allow to create a local policy module. After access is denied by SELinux, running the audit2allow command presents Type Enforcement rules that allow the previously denied access.
В следующем примере демонстрируется использование audit2allow для создания модуля политики:
  1. Блокировка и соответствующий системный вызов записаны в /var/log/audit/audit.log:
    type=AVC msg=audit(1226270358.848:238): avc:  denied  { write } for  pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
    
    type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)
    
    В этом примере certwatch (comm="certwatch") блокирует доступ на запись ({ write }) в каталог помеченный типом var_t (tcontext=system_u:object_r:var_t:s0). Проанализируйте блокировку в соответствии с Раздел 7.3.7, «Сообщения sealert». Если метки не изменены или нет Булевых переменных, предоставляющих доступ, используйте audit2allow для создания локальной политики.
  2. С записанным сообщением о блокировке, таким как certwatch в шаге 1, выполните команду audit2allow -w -a для создания удобно-читаемого описания, почему доступ был блокирован. Опция -a является основанием для чтения всех логов. Опция -w создает удобо-читаемое описание. Инструмент audit2allow запрашивает /var/log/audit/audit.log и, как следствие, должен быть запущен от имени пользователя root.
    # audit2allow -w -a
    type=AVC msg=audit(1226270358.848:238): avc:  denied  { write } for  pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
    	Was caused by:
    		Missing type enforcement (TE) allow rule.
    
    	You can use audit2allow to generate a loadable module to allow this access.
    
    Как показано, доступ блокирован, в соответствии с отсутствием правила Type Enforcement.
  3. Выполните команду audit2allow -a для просмотра правил Type Enforcement. которые разрешают блокированный доступ:
    # audit2allow -a
    
    
    #============= certwatch_t ==============
    allow certwatch_t var_t:dir write;
    

    Важно

    Недостающие правила Type Enforcement обычно вызвана ошибками в политике SELinux, и о них необходимо сообщать в Red Hat Bugzilla. Для Fedora, создайте bug напротив продукта Fedora и выберите компоненту selinux-policy. Включите вывод команд audit2allow -w -a и audit2allow -a в bug report.
  4. Для использования правила, показанного audit2allow -a, выполните команду audit2allow -a -M mycertwatch от имени пользователя root для создания индивидуального модуля. Опция -M создает файл Type Enforcement (.te), с именем. указанным опцией -M, в текущем каталоге:
    # audit2allow -a -M mycertwatch
    
    ******************** IMPORTANT ***********************
    To make this policy package active, execute:
    
    semodule -i mycertwatch.pp
    
    # ls
    mycertwatch.pp  mycertwatch.te
    
    Также, audit2allow компилирует правила Type Enforcement в пакет политики (.pp). Для инсталляции модуля, используется команда /usr/sbin/semodule -i mycertwatch.pp от имени пользователя root.

    Важно

    Модули, созданные с помощью audit2allow могут предоставить больше доступа чем требуется. Рекомендуется публиковать политики, созданные с помощью audit2allow в лист SELinux. такой как fedora-selinux-list, для обзора. Если Вы считаете, что это ошибка (bug) в политике, создайте bug в Red Hat Bugzilla.
Если есть множество блокировок от множества процессов, но необходимо создать индивидуальную политику для одного определенного процесса, используйте команду grep для сужения ввода команде audit2allow. В следующем примере демонстрируется использование команды grep для отправки блокировок. относящихся только к certwatch для audit2allow:
# grep certwatch /var/log/audit/audit.log | audit2allow -M mycertwatch2
******************** IMPORTANT ***********************
To make this policy package active, execute:

# /usr/sbin/semodule -i mycertwatch2.pp
В соответствии с блогом Dan Walsh's "Using audit2allow to build policy modules. Revisited." дополнительная информация об использовании audit2allow для создания модулей политик.


[17] From the audit2allow(1) manual page, as shipped with the policycoreutils package in Fedora 13.