| AUDITCTL(8) | Утилиты системного администрирования | AUDITCTL(8) |
НАИМЕНОВАНИЕ¶
auditctl - a utility to assist controlling the kernel's audit system
СИНОПСИС¶
auditctl [опции]
ОПИСАНИЕ¶
Программа auditctl используется для настройки опций ядра, связанных с аудитом, для просмотра конфигурации аудита и для добавления/удаления правил аудита.
ОПЦИИ КОНФИГУРАЦИИ¶
- -b backlog
- Установить максимальное количество буферов аудита (значение в ядре по умолчанию - 64). Если все буферы заполнены, то флажок сбоя будет выставлен ядром для его дальнейшей обработки.
- --backlog_wait_time wait_time
- Установить время ожидания для ядра достижения значения допустимого отставания backlog_limit (значение в ядре по умолчанию - 60*HZ), прежде, чем ставить в очередь дополнительные события аудита для их передачи аудиту. Число должно быть больше или равно нулю, но меньше, чем десятикратное значение по умолчанию.
- --reset_backlog_wait_time_actual
- Сбросить счетчик времени допустимого отставания, отображаемого командой статуса.
- -c
- Продолжать загружать правила, несмотря на ошибку. Суммирует результат загрузки правил. Код завершения будет ошибочным, если какое-либо правило не будет загружено.
- -D
- Удалить все правила и наблюдения. Может также принимать опцию -k.
- -e [0..2]
- Устанавливает флажок разрешения enable. Когда передается значение 0, то это можно использовать для временного отключения аудита. Когда в качестве аргумента передается значение 1, это позволяет включить аудит. Чтобы заблокировать настройку аудита таким образом, чтобы ее нельзя было изменить, передайте в качестве аргумента 2. Блокировка настройки должна быть последней командой в правилах аудита audit.rules, когда необходимо, чтобы эта функция была активна. Любая попытка изменить настройку в этом режиме будет отклонена. Настройку можно изменить, только перезагрузив компьютер.
- -f [0..2]
- Установить режим сбоя 0=silent 1=printk 2=panic. Эта опция позволяет вам определить, как вы хотите, чтобы ядро обрабатывало критические ошибки. К числу примеров условий, при которых этот режим может иметь эффект, относятся: ошибки передачи в демон аудита пользовательского пространства, превышение лимита невыполненной работы, нехватка памяти ядра и превышение лимита скорости.Значение по умолчанию - 1. В безопасных средах, вероятно, потребуется установить это значение в 2.
- -h, --help
- Справка
- -i
- Игнорировать ошибки при чтении правил из файла. В этом случае auditctl будет всегда возвращать успешный код завершения. Если передать в качестве аргумента значение -s, то оно, по возможности, преобразует числа в слова, читаемые человеком.
- --loginuid-immutable
- Эта опция указывает ядру сделать идентификаторы входа в систему неизменяемыми после их установки. Для изменения идентификатора пользователя требуется CAP_AUDIT_CONTROL; поэтому непривилегированный пользователь не может его изменить. Таким образом, непривилегированные пользователи не могут этого сделать. Установка этого идентификатора пользователя защищает от несанкционированного доступа, но может вызвать некоторые проблемы в определенных типах контейнеров.
- -q точка-монтирования,поддерево
- Если у вас есть существующий каталог для отслеживания и вы привязываете или перемещаете монтируемое другое поддерево в отслеживаемом поддереве, то вам нужно указать ядру, чтобы монтируемое поддерево было эквивалентно отслеживаемому каталогу. Если поддерево уже смонтировано на момент опубликования каталога отслеживания , то поддерево автоматически помечается для просмотра. Пожалуйста, обратите внимание на запятую, разделяющую два значения. Ее пропуск приведет к ошибкам.
- -r rate
- Установить лимит сообщений/с (0=none). Если это значение скорости rate не равно нулю и превышено, то ядро запрашивает флажок сбоя для принятия мер. Значение по умолчанию - 0.
- --reset-lost
- Сбросить счетчик потерянных записей, отображаемых командой status.
- -R file
- Прочитать и выполнить команды auditctl из файла file. Команды выполняются построчно, в том порядке, в котором строки отображаются в файле. Файл должен принадлежать пользователю root и быть недоступен для чтения другими пользователями, иначе он будет отклонен. Пустые строки пропускаются. Строки, начинающиеся с символа "#", рассматриваются как строки комментариев. Каждая строка выполняется так, как если бы она была предоставлена auditctl в качестве аргументов командной строки. Поскольку файл читает auditctl, а не оболочка, такая как bash, то не экранируйте специальные символы оболочки. Пример приведен в разделе ПРИМЕРЫ.
- --signal signal
- Отправить
сигнал
демону
аудита. Для
этого у вас
должны
быть
соответствующие
права.
Поддерживаются
следующие
сигналы: TERM, HUP,
USR1, USR2, CONT
и удобные для пользователя версии stop, reload, rotate, resume, state. - -t
- Обрезать субдеревья после команды mount.
ОПЦИИ СОСТОЯНИЯ¶
- -l
- Вывести все правила по одному в строке. К этой команде можно добавить еще две опции. Вы можете указать опцию ключ (-k), чтобы вывести правила, соответствующие ключу, или -i опцию (-i) для интерпретации значений a0–a3 с целью определения правильности значений аргументов системного вызова.
- -m text
- Послать в систему аудита пользовательское сообщение. Это можно сделать, только если у вас есть возможность CAP_AUDIT_WRITE (обычно она есть у пользователя root). В результате будет сгенерировано событие типа USER.
- -s
- Сообщение о состоянии подсистемы аудита ядра. Оно содержит сведения о внутренних значениях ядра, которые можно задать с помощью опций -e, -f, -r и -b. Значение pid - это номер процесса демона аудита. Обратите внимание, что PID, равный 0, означает, что демон аудита не запущен. В записи lost указано, сколько записей о событиях было удалено из-за переполнения очереди аудита ядра. В поле backlog указано, сколько записей о событиях в данный момент находится в очереди на чтение. После этой опции можно ввести -i, чтобы интерпретировать пару полей.
- -v
- Вывести версию auditctl.
ОПЦИИ ПРАВИЛ¶
- -a [list,action|action,list]
- Добавить правило в конец списка list с помощью action. Обратите внимание на запятую, разделяющую два значения. Если ее не поставить, возникнут ошибки. Поля можно располагать в любом порядке. Это может быть список list, действие action или действие action, список list. Ниже приводится описание допустимых именований list:
- task
- Добавить правило в список для каждой задачи. Этот список правил используется только при создании задачи — когда родительская задача вызывает fork() или clone(). При использовании этого списка следует указывать только те поля, которые известны на момент создания задачи, например uid, gid и т. д.
- exit
- Добавить правило в список выходов из системных вызовов. Этот список используется при выходе из системного вызова для определения необходимости создания события аудита.
- user
- Добавить правило, отвечающее за список фильтрации пользовательских сообщений. Этот список используется ядром для фильтрации событий, возникающих в пользовательском пространстве, перед их передачей демону аудита. Следует отметить, что действительными являются только следующие поля: uid, auid, gid, pid, subj_user, subj_role, subj_type, subj_sen, subj_clr, msgtype и название исполняемого файла. Все остальные поля будут считаться несоответствующими. Следует понимать, что любое событие, инициированное из пользовательского пространства процессом с CAP_AUDIT_WRITE, будет записано в журнал аудита. Это означает, что данный фильтр, скорее всего, будет использоваться с правилами, для которых установлено значение никогда never, поскольку для записи событий ничего делать не нужно.
- exclude
- Добавить правило в список фильтров исключения типов событий. Этот список используется для фильтрации событий, которые вы не хотите видеть. Например, если вы не хотите видеть сообщения avc, используйте этот список для их фильтрации. События можно исключать по идентификатору процесса, идентификатору пользователя, идентификатору группы, идентификатору пользователя при входе в систему, типу сообщения, контексту темы или названию исполняемого файла. Действие игнорируется и по умолчанию имеет значение никогда "never".
- filesystem
- Добавить правило, которое будет применяться ко всей файловой системе. Файловая система должна быть идентифицирована с помощью поля fstype. Обычно этот фильтр используется для исключения любых событий для всей файловой системы, например для трассировки файловой системы tracefs или отладки файловой системы debugfs.
- io_uring
- Добавить правило в фильтр syscall io_uring. Правила для этого фильтра определяют операцию syscall с помощью термина -S, описанного ниже. Вы можете добавить в правило ключевое поле, чтобы его можно было объединить с другими правилами, отслеживающими тот же исходный syscall.
Ниже приведено описание допустимых действий actions для данного правила:
- never
- Не создавать записи аудита. Это можно использовать для подавления генерации событий. Как правило, подавления лучше располагать в верхней части списка, а не в нижней. Это связано с тем, что событие запускается при первом совпадении с правилом.
- always
- Назначать контекст аудита, всегда заполняйть его при входе в системный вызов и всегда записывать данные при выходе из системного вызова.
- -A list,action
- Добавить правило в начало list с помощью action.
- -C [f=f | f!=f]
- Создать правило сравнения между полями: поле, операция, поле. Можно передавать несколько сравнений в одной командной строке. Каждое из них должно начинаться с -C. Каждое межполевое равенство объединяется с другими равенствами, а также с равенствами, начинающимися с -F, для создания записи аудита. Поддерживаются два оператора: «равно» и «не равно». Допустимые поля:
- -d list,action
- Удалить правило из list с помощью action. Правило удаляется только в том случае, если оно в точности соответствует наименованию (ям) системного вызова и каждому наименованию и значению поля.
- -F [n=v | n!=v | n<v | n>v | n<=v | n>=v | n&v | n&=v]
- Создать поле правила:name, operation, value. В одной командной строке может быть передано до 64 полей. Каждое из них должно начинаться с -F. Каждое выражение поля сопоставляется друг с другом (а также с выражением, начинающимся с -C) чтобы запустить запись аудита. Поддерживается 8 операторов - equal, not equal, less than, greater than, less than или равно и больше или равно битовой маске и битовому тесту, соответственно. Битовая проверка "and" определяет значения и проверяет, что они равны, битовая маска "ands" просто определяет значения. Поля, которые содержат идентификатор пользователя, могут вместо этого содержать именование пользователя; программа преобразует это именование в идентификатор пользователя. То же самое относится и к названиям групп. Допустимыми полями являются:
- a0, a1, a2, a3
- Четыре первых аргумента, передаются системному вызову. Строковые аргументы не поддерживаются. Это происходит потому, что ядру передается указатель на строку. Запуск по значению адреса указателя вряд ли сработает. Таким образом, при использовании этого значения вы должны использовать только числовые значения. Скорее всего, это будет использоваться на платформах, которые мультиплексируют операции с сокетами или IPC.
- arch
- Архитектура процессора, на котором выполняется системный вызов syscall. Если вы не знаете архитектуру arch своего компьютера, но хотите использовать 32-разрядную таблицу системных вызовов, а ваш компьютер поддерживает 32-разрядную версию, вы также можете использовать b32 для архитектуры arch. То же самое относится и к 64-разрядной таблице системных вызовов, вы можете использовать b64. Таким образом, вы можете написать правила, которые в некоторой степени не зависят от архитектуры, поскольку тип семейства будет определяться автоматически. Однако системные вызовы могут быть специфичны для архитектуры, и то, что доступно на x86_64, может быть недоступно на ppc. Директива arch должна предшествовать опции -S, чтобы auditctl знала, какую внутреннюю таблицу использовать для поиска номеров системных вызовов.
- auid
- Оригинальный идентификатор ID, с помощью которого пользователь входил в систему. Это сокращение от audit uid. Иногда его называют loginuid. Может использоваться текст или номер учетной записи пользователя.
- devmajor
- Главный (Major) номер устройства
- devminor
- Вспомогательный (Minor) номер устройства
- dir
- Полный путь к каталогу для просмотра. Помещает точку просмотра в каталог и, рекурсивно, во всё его поддерево. Это приведет к рекурсивному просмотру каталога и всего его поддерева. Его можно использовать только в списке выход (exit). Смотрите "-w".
- egid
- Эффективный идентификатор группы ID. Можно использовать либо числовой, либо название группы.
- euid
- Эффективный идентификатор ID пользователя. Может быть числовым или названием учетной записи пользователя.
- exe
- Абсолютный путь к приложению, к которому будет применяться это правило при выполнении. Оно поддерживает операторы "=" и "!=" . Примечание. Вы можете использовать это значение только один раз для каждого правила.
- exit
- Значение, возвращаемое системным вызовом при выходе. Если кодом выхода является ошибка errno, то вы также можете использовать текстовое представление.
- fsgid
- Идентификатор группы ID файловой системы. Может быть числовым или названием группы.
- fstype
- Тип файловой системы. Используется в списке правил файловой системы. Поддерживаются только значения cgroup, cgroup2, debugfs и tracefs.
- fsuid
- Идентификатор пользователя ID файловой системы. Может быть числовым или названием учетной записи пользователя.
- filetype
- Тип целевого файла. Может быть - file, dir, socket, link, character, block или fifo.
- gid
- Идентификатор группы ID. Можно использовать либо номер, либо название группы.
- inode
- Номер inode
- key
- Установить на правило ключ фильтрации. Ключ фильтрации - это произвольная текстовая строка длиной не более 31 байта. Он может однозначно идентифицировать записи аудита, созданные с помощью правила. Обычно используется, когда у вас есть несколько правил, которые в совокупности удовлетворяют требованиям безопасности. Значение ключа можно найти с помощью функции ausearch, так что независимо от того, какое правило инициировало событие, вы сможете найти его результаты. Ключ также можно использовать для удаления всех (-D) и перечисления правил (-l), чтобы выбрать правила с определенным ключом. В правиле может быть несколько ключей, если вы хотите иметь возможность выполнять поиск по зарегистрированным событиям несколькими способами или если у вас есть плагин auditd, который использует ключ для облегчения анализа.
- msgtype
- Это значение используется для соответствия типу записи события. Его следует использовать только в списках исключений или в пользовательских фильтрах.
- obj_uid
- Объекты UID
- obj_gid
- Объекты GID
- obj_user
- Пользователь ресурса SE Linux
- obj_role
- Роль ресурса SELinux)
- obj_type
- Тип ресурса SE Linux
- obj_lev_low
- Низкий уровень ресурса SE Linux
- obj_lev_high
- Высокий уровень ресурса SE Linux
- path
- Вставить контрольный файл для объекта файловой системы в путь path. Вы не можете вставить контрольный файл в каталог верхнего уровня.Это запрещено ядром. Подстановочные знаки также не поддерживаются и выдают предупреждение. Механизм отслеживания заключается в внутреннем отслеживании инода. Это можно использовать только в списке exit.
- perm
- Фильтр разрешения доступа для операций с файлами. Укажите тип доступа, для которого будет запущен просмотр файловой системы. r=read, w=write, x=execute, attribute change (изменение атрибута). Эти разрешения не являются стандартными правами доступа к файлам, а скорее являются своего рода системными вызовами, которые могут выполнять подобные действия. Системные вызовы на чтение и запись не включены в этот набор, поскольку они перегружают журналы. Но, скорее, для операций чтения или записи используются флажки "Открыто (open )", чтобы узнать, какое разрешение было запрошено. Поле "Разрешить (perm)" можно использовать только в списке выхода. Вы можете использовать это, не указывая системный вызов, и ядро выберет системные вызовы, которые удовлетворяют запрашиваемым разрешениям доступа. Для этого также необходимо указать параметр arch перед полем perm. Таким образом, ядро сможет лучше определить, какие системные вызовы необходимы. Отсутствие arch приведет к тому, что все all системные вызовы будут подвергнуты аудиту. Это снизит производительность системы.
- pers
- Индивидуальный номер операционной системы
- pid
- Идентификатор процесса ID
- ppid
- Идентификатор родительского процесса
- saddr_fam
- Номер семейства адресов, указанный в файле /usr/include/bits/socket.h. Например, IPv4 будет равен 2, а IPv6 - 10.
- sessionid
- Идентификатор сессии пользователя
- subj_user
- Пользователь программы SE Linux
- subj_role
- Роль программы SE Linux
- subj_type
- Тип программы SE Linux
- subj_sen
- Восприимчивость программы SE Linux
- subj_clr
- Разрешение программы SE Linux
- sgid
- Сохраненный идентификатор группы ID. Смотрите страницу руководства getresgid(2).
- success
- Если выходное значение равно >= 0, то это значение равно true/yes, в противном случае - false/no. При написании правила используйте 1 для значения true/yes и 0 для значения false/no
- suid
- Сохраненный идентификатор пользователя ID. Смотрите страницу руководств getresuid(2).
- uid
- Идентификатор пользователя ID.. Можно использовать либо числовой идентификатор, либо именование пользователя.
- -k key
- Установить ключ фильтра для правила аудита. Это не рекомендуется использовать для отслеживания. Преобразуйте все просмотры в форму правил системного вызова. Он по-прежнему действителен для использования с правилами удаления или перечисления.
- -p [r|w|x|a]
- Описание типа разрешенного доступа, для которого будет запущен просмотр файловой системы; не рекомендуется. Преобразуйте просмотр в форму системного вызова.
- -S [Syscall name or number|all]
- Может использоваться любой номер number или название syscall name системного вызова. Также возможно использование ключевого слова all. Если данный системный вызов выполняется программой, запустите запись аудита. Если задано правило поля и системный вызов не указан, оно будет использоваться по умолчанию для всех системных вызовов. Вы также можете указать несколько системных вызовов в одном правиле, используя несколько опций -S в одном правиле. Это повышает производительность, поскольку требуется проверять меньшее количество правил. В качестве альтернативы вы можете передать список названий системных вызовов, разделенных запятыми. Если вы работаете в системе с двумя arch, такой как x86_64, вы должны знать, что auditctl просто берет текст, ищет в нем собственный arch (в данном случае b64) и отправляет это правило ядру. Если дополнительных директив arch нет, ЭТО БУДЕТ ПРИМЕНЯТЬСЯ КАК К 32-РАЗРЯДНЫМ, ТАК И К 64-РАЗРЯДНЫМ СИСТЕМНЫМ ВЫЗОВАМ. Это может иметь нежелательные последствия, поскольку нет никакой гарантии, что любой системный вызов имеет одинаковый номер как на 32-разрядном, так и на 64-разрядном интерфейсах. Вы, вероятно, захотите контролировать это и написать 2 правила, одно с arch равным b32, а другое с b64, чтобы убедиться, что ядро находит события, которые вы хотите. Смотрите обсуждение поля arch для получения дополнительной информации.
- -w path
- Указать путь к файлу. Если путь к файлу, то это почти то же самое, что использовать опцию -F path в правиле системного вызова. Если для отслеживания используется каталог, то это почти то же самое, что использовать опцию -F dir в правиле системного вызова. Форма записи просмотр -w предназначена для обеспечения обратной совместимости и является устаревшей из-за низкой производительности системы. Преобразуйте просмотр из этой формы в форму, основанную на системном вызове. Единственными допустимыми опциями при использовании просмотра являются -p и -k.
- -W path
- Удалить просмотр объекта файловой системы для пути path. Правило должно точно совпадать. Для получения дополнительной информации смотрите обсуждение -d.
ПОВЫШЕНИЕ ПРОИЗВОДИТЕЛЬНОСТИ¶
Правила системных вызовов оцениваются для каждого системного вызова каждой программы. Если у вас есть 10 правил системного вызова, то каждая программа в вашей системе будет задерживаться во время системного вызова, пока система аудита оценивает каждое правило. Слишком большое количество правил системного вызова снизит производительность. Старайтесь комбинировать как можно больше правил, если фильтр, действие, ключ и поля идентичны. Например, правила:
auditctl -a always,exit -F arch=b64 -S openat -F success=0
auditctl -a always,exit -F arch=b64 -S truncate -F success=0
можно написать как одно правило:
auditctl -a always,exit -F arch=b64 -S openat -S truncate -F success=0
Кроме того, следует стараться использовать аудит файловой системы везде, где это возможно. Это улучшает производительность. Например, если вы хотите зафиксировать все неудачные открытия и сокращения, как указано выше, но вас интересуют только файлы в /etc и не интересуют в /usr или /sbin, то можно использовать такое правило:
auditctl -a always,exit -F arch=b64 -S openat,truncate -F dir=/etc -F success=0
При этом производительность будет выше, так как ядро не будет оценивать каждый системный вызов. Это будет обрабатываться кодом аудита файловой системы и проверяться только при системных вызовах, связанных с файловой системой.
ПРИМЕРЫ¶
Чтобы просмотреть все системные вызовы, выполненные определенной программой:
# By pid: auditctl -a always,exit -S all -F pid=1005 # By executable path auditctl -a always,exit -S all -F exe=/usr/bin/ls
Чтобы просмотреть файлы, открытые определенным пользователем:
auditctl -a always,exit -S openat -F auid=510
Чтобы увидеть неудачные вызовы openat:
auditctl -a always,exit -S openat -F success=0
Чтобы просматривать изменения файла (2 способа):
auditctl -w /etc/shadow -p wa # Note this slows the system auditctl -a always,exit -F arch=b64 -F path=/etc/shadow -F perm=wa
Рекурсивный просмотр каталога на предмет изменений (два варианта выражения):
auditctl -w /etc/ -p wa # Note this slows the system auditctl -a always,exit -F arch=b64 -F dir=/etc/ -F perm=wa
Чтобы узнать, получает ли администратор доступ к файлам других пользователей:
auditctl -a always,exit -F dir=/home/ -F uid=0 -C auid!=obj_uid
Ниже пример файла правил:
# Remove all existing rules -D # Never record sudo invocations -A exclude,always -F exe=/usr/bin/sudo
ПО УМОЛЧАНИЮ ОТКЛЮЧЕНО¶
Во многих системах auditd настроен на установку правила по умолчанию -a never,task. Это правило заставляет каждый новый процесс пропускать всю обработку правил аудита. Обычно это делается для того, чтобы избежать небольшого снижения производительности, связанного с аудитом системных вызовов. Если вы хотите использовать auditd, то вам нужно удалить это правило, удалив 10-no-audit.rules и добавив 10-base-config.rules в каталог правил аудита.
Если вы определили правила аудита, которые не совпадают с требуемыми, то проверьте auditctl -l, чтобы убедиться, что там нет правила no never,task.
ФАЙЛЫ¶
- /etc/audit/audit.rules /etc/audit/audit-stop.rules
СМОТРИТЕ ТАКЖЕ¶
АВТОР¶
Steve Grubb
ПЕРЕВОД¶
Русский перевод этой страницы руководства разработал(и) Alexander Kolotov <alexandr.kolotov@gmail.com>, Елена Мишина <lepata@altlinux.org> и Aleksandr Felda <afelda@ro.ru>
Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
| 18.09.2024 | Red Hat |