
Обходной путь для CVE-2025-52881: Исправляет поломки Docker/Podman в контейнерах Proxmox LXC, вызванные несовместимостью AppArmor с runc 1.2.7+. Универсальная обёртка для community-scripts с автоматической настройкой AppArmor.
Обходной путь для CVE-2025-52881: Исправляет поломку Docker, Podman и других контейнерных рантаймов в LXC-контейнерах Proxmox, вызванную несовместимостью AppArmor с runc 1.2.7+/1.3.2+
Недавние обновления безопасности runc (версии 1.2.7+ и 1.3.2+) и containerd (1.7.28-2+) привели к критической несовместимости с AppArmor при работе внутри LXC-контейнеров Proxmox. Это вызывает ошибки в Docker и других контейнерных рантаймах, например:
OCI runtime create failed: unable to start container process:
error during container init: open sysctl net.ipv4.ip_unprivileged_port_start file:
reopen fd 8: permission denied
Это затрагивает:
Ссылка: opencontainers/runc#4968
Хотя понижение runc до версии ниже 1.2.7/1.3.2 «исправило» бы проблему, это подвергнет вашу систему реальным уязвимостям повышения привилегий, которые были исправлены обновлением безопасности. Рекомендуемый подход — использовать обходной путь из этого репозитория.
Этот репозиторий содержит инструменты, которые автоматически применяют и управляют обходным путём AppArmor для LXC-контейнеров Proxmox:
pve-script-wrapper.sh — Универсальная обёртка для скриптов сообщества Proxmoxpve-docker-fix — Исправление уже сломанных контейнеровpve-docker-rollback — Удаление обходного пути, когда появятся официальные исправленияpct-patched — Внутренняя обёртка (используется автоматически скриптом pve-script-wrapper.sh)Скрипты автоматически определяют ОС вашего контейнера и применяют соответствующий обходной путь AppArmor:
Для всех контейнеров:
lxc.apparmor.profile: unconfined
Только для контейнеров Ubuntu:
lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0
Первая строка отключает ограничения AppArmor (требуется для всех дистрибутивов). Вторая строка маскирует обнаружение модуля AppArmor и необходима только для контейнеров Ubuntu — контейнеры Debian обычно работают и без неё (runc#4968).
Автоопределение ОС: Скрипты автоматически определяют, является ли ваш контейнер Ubuntu или Debian, и применяют только необходимые строки конфигурации.
На вашем хосте Proxmox VE выполните:
# Скачать все скрипты
curl -fsSL https://raw.githubusercontent.com/jq6l43d1/proxmox-lxc-docker-fix/main/pve-script-wrapper.sh -o /usr/local/bin/pve-script-wrapper.sh
curl -fsSL https://raw.githubusercontent.com/jq6l43d1/proxmox-lxc-docker-fix/main/pct-patched -o /usr/local/bin/pct-patched
curl -fsSL https://raw.githubusercontent.com/jq6l43d1/proxmox-lxc-docker-fix/main/pve-docker-fix -o /usr/local/bin/pve-docker-fix
curl -fsSL https://raw.githubusercontent.com/jq6l43d1/proxmox-lxc-docker-fix/main/pve-docker-rollback -o /usr/local/bin/pve-docker-rollback
# Сделать их исполняемыми
chmod +x /usr/local/bin/pve-script-wrapper.sh /usr/local/bin/pct-patched /usr/local/bin/pve-docker-fix /usr/local/bin/pve-docker-rollback
Или клонируйте репозиторий:
git clone https://github.com/jq6l43d1/proxmox-lxc-docker-fix.git
cd proxmox-lxc-docker-fix
chmod +x *.sh pct-patched pve-docker-fix pve-docker-rollback
cp pve-script-wrapper.sh pct-patched pve-docker-fix pve-docker-rollback /usr/local/bin/
Вместо:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/komodo.sh)"
Используйте:
pve-script-wrapper.sh https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/komodo.sh
Это работает с любым скриптом сообщества Proxmox, который создаёт LXC-контейнеры:
# Docker
pve-script-wrapper.sh https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docker.sh
# Dockge
pve-script-wrapper.sh https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/dockge.sh
# CasaOS
pve-script-wrapper.sh https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/casaos.sh
# Podman
pve-script-wrapper.sh https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/podman.sh
# И любой другой скрипт, устанавливающий контейнерные рантаймы
Если у вас уже есть сломанный контейнер:
# Исправить контейнер 105
pve-docker-fix 105
# Исправить без автоматического перезапуска
pve-docker-fix 105 --no-restart
Инструмент:
Если вы предпочитаете применить исправление вручную:
# Остановить контейнер
pct stop 105
# Отредактировать файл конфигурации
nano /etc/pve/lxc/105.conf
# Добавить эту строку в конец (требуется для всех контейнеров):
lxc.apparmor.profile: unconfined
# Для контейнеров Ubuntu также добавьте эту строку:
lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0
# Запустить контейнер
pct start 105
Примечание: Контейнеры Debian обычно требуют только первую строку. Контейнеры Ubuntu требуют обе строки. Подробнее см. runc#4968.
Когда появятся официальные исправления (обновления Proxmox/LXC/AppArmor), вы можете удалить обходной путь:
# Список всех контейнеров с обходным путём
pve-docker-rollback --list
# Удалить из конкретного контейнера
pve-docker-rollback 105
# Предпросмотр изменений без применения
pve-docker-rollback 105 --dry-run
# Удалить из всех контейнеров сразу
pve-docker-rollback --all
# Удалить без перезапуска (изменения вступят в силу при следующем запуске)
pve-docker-rollback 105 --no-restart
# Удалить из всех контейнеров без подтверждения
pve-docker-rollback --all --force
Инструмент отката:
--force)Когда выполнять откат:
pct-patchedPATH, чтобы приоритет был у обёрткиpctpct create/usr/sbin/pct для создания контейнера/etc/pve/lxc/$CTID.confpct без изменений