Вопрос или проблема
У меня есть собственный 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", что предполагает проблемы с определением типа или протокола этих сокетов.
Анализ потенциала проблемы
-
Особенности ОС и ядра:
Замечено, что проблема проявляется только на сервере Proxmox, что может указывать на различия в версиях ядра или особенностях настройки этой ОС. Proxmox часто использует собственные ядра, которые могут отличаться от стандартных Debian, что требует проверки на совместимость.
-
Классификация сокетов:
Ошибка
"failed type and protocol match"
намекает, что проблема может заключаться в неверной идентификации типа или протокола у создаваемых сокетов. Необходимо убедиться, что профили AppArmor правильно адаптированы для обработки нововведений и изменений в последних обновлениях ОС. -
Проблемы с AppArmor:
AppArmor может иметь ограничения в случае нестандартных заявок со стороны sudo. Нужно исследовать логи в режиме complain для поиска дополнительных деталей и перспективных данных для дебага.
Рекомендации по решению
-
Проверка версий ядра и библиотек:
Поскольку Proxmox использует свои собственные ядра, убедитесь, что они совместимы с вашей конфигурацией AppArmor. Возможно, обновление до наиболее стабильной версии ядра может устранить проблему. Также проверьте, не были ли изменены внутренние зависимости sudo.
-
Оптимизация профиля AppArmor:
Убедитесь, что в профиле имеется корректное описание для всех типов и протоколов сокетов. Пробуйте добавлять больше гранулярных правил, обеспечивающих контроль над каждым типом и протоколом уже с определенными параметрами.
-
Дополнительные отладочные шаги:
Используйте инструмент
strace
для захвата системных вызовов, связанных с sudo, для точного понимания, какие именно системные запросы блокируются. Это может помочь определить, на каком этапе происходит нарушение. -
Обратитесь к сообществу или поддержке Proxmox:
Обратный опыт от пользователей Proxmox может содержать уникальные подсказки для решения этой проблемы. Форумы и поддержка Proxmox могут предложить обновленные указания.
Таким образом, проблема требует углубленного анализа и возможной правки конфигураций как со стороны AppArmor, так и со стороны предполагаемых изменений в ядре системы Proxmox. Найдите время, чтобы сравнить все доступные обновления и промониторить изменения, которые могут влиять на совместимость и производительность.
Ваш подход должен быть всесторонним, включающим рассмотрение как самой среды, так и конкретных конфигурационных файлов. Умелая настройка профиля AppArmor и установка совместимых версий обеспечат надежную работу вашей SSH-конфигурации на платформе Proxmox.