Вопрос или проблема
Я настроил свой сервер, доступный через интернет, для регистрации неудачных попыток входа в SSH, настроив rsyslog на отправку журналов в скрипт оболочки authfail
, который выполняет Python-скрипт, сохраняющий детали в базе данных. К сожалению, когда я недавно обновил сервер с Jammy до Noble, добавление apparmor в rsyslog нарушило эту настройку. Я пробовал настраивать конфигурацию apparmor, но ничего не помогло.
Что я пробовал:
-
Создание файла
/etc/apparmor.d/rsyslog.d/authfail.apparmor
, содержащего только строку/path/to/authfail Ux,
-
То же, что и в #1, но с
ix
вместоUx
-
То же, что и в #1, но с
Px
вместоUx
и добавлением файла/etc/apparmor.d/authfail
, содержащего:#include <tunables/home> profile authfail /path/to/authfail { /path/to/python/script Px, /path/to/sub-log-file a, } profile logsdb /path/to/python/script { #include <abstractions/python> /path/to/a/config/file r, }
-
То же, что и в #1, но с
flags=(unconfined)
, добавленным к строкеprofile rsyslog
в/etc/apparmor/usr.sbin.rsyslogd
Большинство из них приводят к ошибкам “Permission denied”, испускаемым rsyslog, и /var/log/syslog
содержит такие строки, как:
2025-01-05T00:19:05.361692+00:00 firefly kernel: audit: type=1400 audit(1736036345.357:255): apparmor="DENIED" operation="exec" class="file" profile="rsyslogd" name="/opt/jwodder/bin/authfail" pid=84565 comm=72733A6D61696E20513A526567 requested_mask="x" denied_mask="x" fsuid=104 ouid=1001
Как настроить apparmor, чтобы позволить rsyslog выполнять мою программу?
Ответ или решение
Настройка AppArmor для разрешения выполнения rsyslog вашего пользовательского сценария может показаться сложной задачей, особенно учитывая изменения в обновлениях дистрибутивов Linux. Давайте разберемся, как вы можете правильно настроить AppArmor, чтобы решить вашу проблему.
Шаг 1: Проверка правильности путей
Первым делом убедитесь, что пути, указанные в вашем профиле AppArmor, корректны и соответствуют фактическому расположению скрипта и интерпретатора Python. Это очевидный шаг, но не стоит его игнорировать.
Шаг 2: Изучение профиля rsyslogd
Откройте файл конфигурации профиля rsyslogd
, который обычно находится в /etc/apparmor.d/usr.sbin.rsyslogd
. Попробуйте вручную внести изменения в него, чтобы разрешить выполнение вашего скрипта напрямую из этого профиля.
# Вставьте следующую строку в профиль rsyslogd
/path/to/authfail Px,
Шаг 3: Создание отдельного профиля для вашего сценария
Создайте отдельный профиль для вашего скрипта. Это может быть более гибким решением. Профиль может выглядеть следующим образом:
#include <tunables/global>
/path/to/authfail {
# Доступ на выполнение скрипта
/path/to/authfail Px,
# Разрешения для Python
# Включаем абстракции для Python
#include <abstractions/python>
# Разрешить чтение файла конфигурации
/path/to/a/config/file r,
# Разрешить доступ к лог-файлу
/path/to/sub-log-file a,
}
Шаг 4: Перезагрузка профилей AppArmor
После внесения изменений, не забудьте перезагрузить профили AppArmor, чтобы изменения вступили в силу:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.rsyslogd
sudo apparmor_parser -r /etc/apparmor.d/your_profile_file
Проверьте файл /var/log/syslog
на предмет новых ошибок. Если профиль применен правильно, ошибок "Permission denied" быть не должно.
Шаг 5: Тестирование и настройка
После перезагрузки профилей запустите вашу систему и проверьте, работает ли ваш сценарий, как ожидалось. Если по-прежнему возникают проблемы, разберите ошибку в журнале, чтобы точно понять, какой файл или разрешение вызывает проблему, и соответствующим образом настройте профиль.
Заключение
Настройка AppArmor для работы с rsyslog и сторонними программами требует тщательного подхода, но в конечном итоге обеспечивает повышенную безопасность. Данный процесс может включать в себя несколько итераций настройки и тестирования, но внедрение слаженного профиля AppArmor может существенно укрепить безопасность вашего сервера.
Для дальнейшей информации, рекомендуется обратиться к официальной документации по AppArmor, так как она предоставляет полные и актуализированные сведения о конфигурациях и описаниях ошибок.