Необычное отклонение unix-сокета apparmor для sudo

Вопрос или проблема

У меня есть собственный SSH-сервер, написанный на Go, который оборачивает команды, вызываемые клиентом, в apparmor. Один из профилей ограничивает sudo и команды, которые он может вызывать. Он начал выдавать сбои на сервере резервных копий proxmox, но не на любом другом сервере Debian. Я пробовал несколько комбинаций разрешенных прав для unix-сокетов, но всегда получал одинаковые отказы, даже при крайне открытых разрешениях.

Dec 29 13:41:23 pbs audit[40367]: AVC apparmor="DENIED" operation="create" class="net" info="failed type and protocol match" error=-13 profile="clientSudo" pid=40367 comm="sudo" family="unix" sock_type="dgram" protocol=0 requested="create" denied="create" addr=none
Dec 29 13:41:23 pbs audit[40376]: AVC apparmor="DENIED" operation="create" class="net" info="failed type and protocol match" error=-13 profile="clientSudo" pid=40376 comm="sudo" family="unix" sock_type="stream" protocol=0 requested="create" denied="create" addr=none

Я пробовал следующие комбинации:

  network unix stream,
  network unix dgram,
  network unix stream,
  network unix dgram,
  unix (create) type=stream,
  unix (create) type=dgram,
  unix (create) type=stream,
  unix (create) type=dgram,
  unix,
  network unix,

Вот весь профиль, вызываемый /usr/bin/sudo rmpx -> clientSudo,

profile clientSudo flags=(enforce) {
  # Read self
  /usr/bin/sudo rm,
  / r,

  # Capabilities
  capability sys_resource,
  capability setuid,
  capability setgid,
  capability audit_write,
  capability chown,
  network netlink raw,
  network unix,
  network unix stream,
  network unix dgram,
  network inet dgram,
  network inet6 dgram,
  unix (create) type=stream,
  unix (create) type=dgram,

  # Allow file manipulation
  /usr/bin/ls rmpx -> fileops,
  /usr/bin/rm rmpx -> fileops,
  /usr/bin/mv rmpx -> fileops,
  /usr/bin/cp rmpx -> fileops,
  /usr/bin/ln rmpx -> fileops,
  /usr/bin/rmdir rmpx -> fileops,
  /usr/bin/mkdir rmpx -> fileops,
  /usr/bin/chown rmpx -> fileops,
  /usr/bin/chmod rmpx -> fileops,
  /usr/bin/sha256sum rmpx -> fileops,

  # /proc accesses
  /proc/stat r,
  /proc/filesystems r,
  /proc/sys/kernel/cap_last_cap r,
  /proc/sys/kernel/ngroups_max rw,
  /proc/sys/kernel/seccomp/actions_avail r,
  /proc/1/limits r,
  /proc/@{pid}/stat r,
  owner /proc/@{pid}/mounts r,
  owner /proc/@{pid}/status r,

  # /run accesses
  /run/ r,
  /run/sudo/ r,
  /run/sudo/ts/{,*} rwk,

  # /usr accesses
  /usr/share/zoneinfo/** r,
  /usr/lib/locale/locale-archive r,
  /usr/sbin/unix_chkpwd rmix,
  # Not necessary, additional attack surface
  deny /usr/sbin/sendmail rmx,

  # /etc accesses
  /etc/login.defs r,
  /etc/ld.so.cache r,
  /etc/locale.alias r,
  /etc/nsswitch.conf r,
  /etc/passwd r,
  /etc/shadow r,
  /etc/sudo.conf r,
  /etc/sudoers r,
  /etc/sudoers.d/{,*} r,
  /etc/pam.d/other r,
  /etc/pam.d/sudo r,
  /etc/pam.d/common-auth r,
  /etc/pam.d/common-account r,
  /etc/pam.d/common-session-noninteractive r,
  /etc/pam.d/common-session r,
  /etc/pam.d/common-password r,
  /etc/security/limits.conf r,
  /etc/security/limits.d/ r,
  /etc/group r,
  /etc/host.conf r,
  /etc/hosts r,
  /etc/resolv.conf r,
  /etc/gai.conf r,

  # /dev accesses
  /dev/tty rw,
  /dev/null rw,

  ## Libraries needed for sudo - lib versions are wildcarded
  /usr/lib/*-linux-gnu*/ld-linux-x86-64.so.* r,
  /usr/lib/*-linux-gnu*/libaudit.so.* rm,
  /usr/lib/*-linux-gnu*/libselinux.so* rm,
  /usr/lib/*-linux-gnu*/libc.so* rm,
  /usr/lib/*-linux-gnu*/libcap-ng.so.* rm,
  /usr/lib/*-linux-gnu*/libpcre*.so.* rm,
  /usr/lib/*-linux-gnu*/libpam.so.* rm,
  /usr/lib/*-linux-gnu*/libz.so.* rm,
  /usr/lib/*-linux-gnu*/libm.so.* rm,
  /usr/libexec/sudo/libsudo_util.so.* rm,
  /usr/libexec/sudo/sudoers.so rm,
  /usr/lib/*-linux-gnu*/libnss_systemd.so.* rm,
  /usr/lib/*-linux-gnu*/libcap.so.* rm,
  /usr/lib/*-linux-gnu*/security/pam_limits.so rm,
  /usr/lib/*-linux-gnu*/security/pam_unix.so rm,
  /usr/lib/*-linux-gnu*/security/pam_deny.so rm,
  /usr/lib/*-linux-gnu*/security/pam_permit.so rm,
  /usr/lib/*-linux-gnu*/security/pam_systemd.so rm,
  /usr/lib/*-linux-gnu*/libcrypt.so.* rm,
  /usr/lib/*-linux-gnu*/libpam_misc.so.* rm,
  /usr/lib/*-linux-gnu*/gconv/gconv-modules.cache r,
  /usr/lib/*-linux-gnu*/gconv/gconv-modules r,
  /usr/lib/*-linux-gnu*/gconv/gconv-modules.d/ r,
}

Я бы предположил, что ошибка failed type and protocol match конкретно относится к протоколу 0. Но, протокол 0 – это не то, что apparmor распознает в синтаксисе профиля.

Есть ли способ отладить, какие именно разрешения для unix-сокетов sudo пытается получить? Режим предупреждения apparmor показывает те же строки, что и отказанные выше.

Или это ограничение apparmor, и sudo пытается сделать что-то с unix-сокетами, что не поддерживается? Странно, что это происходит с proxmox, но не с debian, что заставляет меня думать, что это может быть связано с версией ядра, которую использует proxmox?

Может кто-то пролить свет на это?

Ответ или решение

Вопрос, связанный с отказом службы AppArmor в контексте Unix-сокетов для команды sudo, заслуживает тщательного анализа, особенно с учетом его специфичности на сервере резервных копий Proxmox по сравнению с другими серверами Debian. Рассмотрим несколько аспектов проблемы и возможные решения.

Описание проблемы

Вы столкнулись с отказом AppArmor при попытке создать Unix-сокет через sudo. Системные журналы предоставляют строки с отказами, указывающие на то, что операция "создания" была заблокирована по профилю clientSudo. Ошибка имеет вид "failed type and protocol match", что предполагает проблемы с определением типа или протокола этих сокетов.

Анализ потенциала проблемы

  1. Особенности ОС и ядра:

    Замечено, что проблема проявляется только на сервере Proxmox, что может указывать на различия в версиях ядра или особенностях настройки этой ОС. Proxmox часто использует собственные ядра, которые могут отличаться от стандартных Debian, что требует проверки на совместимость.

  2. Классификация сокетов:

    Ошибка "failed type and protocol match" намекает, что проблема может заключаться в неверной идентификации типа или протокола у создаваемых сокетов. Необходимо убедиться, что профили AppArmor правильно адаптированы для обработки нововведений и изменений в последних обновлениях ОС.

  3. Проблемы с AppArmor:

    AppArmor может иметь ограничения в случае нестандартных заявок со стороны sudo. Нужно исследовать логи в режиме complain для поиска дополнительных деталей и перспективных данных для дебага.

Рекомендации по решению

  1. Проверка версий ядра и библиотек:

    Поскольку Proxmox использует свои собственные ядра, убедитесь, что они совместимы с вашей конфигурацией AppArmor. Возможно, обновление до наиболее стабильной версии ядра может устранить проблему. Также проверьте, не были ли изменены внутренние зависимости sudo.

  2. Оптимизация профиля AppArmor:

    Убедитесь, что в профиле имеется корректное описание для всех типов и протоколов сокетов. Пробуйте добавлять больше гранулярных правил, обеспечивающих контроль над каждым типом и протоколом уже с определенными параметрами.

  3. Дополнительные отладочные шаги:

    Используйте инструмент strace для захвата системных вызовов, связанных с sudo, для точного понимания, какие именно системные запросы блокируются. Это может помочь определить, на каком этапе происходит нарушение.

  4. Обратитесь к сообществу или поддержке Proxmox:

    Обратный опыт от пользователей Proxmox может содержать уникальные подсказки для решения этой проблемы. Форумы и поддержка Proxmox могут предложить обновленные указания.

Таким образом, проблема требует углубленного анализа и возможной правки конфигураций как со стороны AppArmor, так и со стороны предполагаемых изменений в ядре системы Proxmox. Найдите время, чтобы сравнить все доступные обновления и промониторить изменения, которые могут влиять на совместимость и производительность.

Ваш подход должен быть всесторонним, включающим рассмотрение как самой среды, так и конкретных конфигурационных файлов. Умелая настройка профиля AppArmor и установка совместимых версий обеспечат надежную работу вашей SSH-конфигурации на платформе Proxmox.

Оцените материал
Добавить комментарий

Капча загружается...