
حل بديل لـ CVE-2025-52881: يصلح تعطّل Docker/Podman في حاويات Proxmox LXC الناجم عن عدم توافق AppArmor مع runc 1.2.7+. غلاف شامل لـ community-scripts مع إعداد تلقائي لـ AppArmor.
حل بديل لـ CVE-2025-52881: يصلح تعطّل Docker وPodman وبيئات تشغيل الحاويات داخل حاويات Proxmox LXC الناتج عن عدم توافق AppArmor مع runc 1.2.7+/1.3.2+
أدخلت التحديثات الأمنية الأخيرة لـ runc (الإصدارات 1.2.7+ و1.3.2+) وcontainerd (1.7.28-2+) عدم توافق مؤثرًا مع AppArmor عند التشغيل داخل حاويات Proxmox LXC. يؤدي هذا إلى فشل 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 الخاص بحاويات Proxmox LXC:
pve-script-wrapper.sh - غلاف شامل لنصوص Proxmox المجتمعيةpve-docker-fix - إصلاح الحاويات الموجودة والمعطّلة بالفعلpve-docker-rollback - إزالة الحل البديل عند توفّر إصلاحات من المصدر الرئيسي (upstream)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، نفّذ:
# Download all scripts
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
# Make them executable
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
# And any other script that installs container runtimes
إذا كان لديك حاوية معطّلة بالفعل:
# Fix container 105
pve-docker-fix 105
# Fix without automatic restart
pve-docker-fix 105 --no-restart
ستقوم الأداة بـ:
إذا كنت تفضّل تطبيق الإصلاح يدويًا:
# Stop the container
pct stop 105
# Edit the config file
nano /etc/pve/lxc/105.conf
# Add this line at the end (required for all containers):
lxc.apparmor.profile: unconfined
# For Ubuntu containers, also add this line:
lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0
# Start the container
pct start 105
ملاحظة: عادةً تحتاج حاويات Debian إلى السطر الأول فقط. بينما تحتاج حاويات Ubuntu إلى السطرين معًا. راجع runc#4968 للتفاصيل التقنية.
عند توفّر إصلاحات من المصدر الرئيسي (تحديثات Proxmox/LXC/AppArmor)، يمكنك إزالة الحل البديل:
# List all containers with the workaround
pve-docker-rollback --list
# Remove from specific container
pve-docker-rollback 105
# Preview changes without modifying
pve-docker-rollback 105 --dry-run
# Remove from all containers at once
pve-docker-rollback --all
# Remove without restart (changes apply on next start)
pve-docker-rollback 105 --no-restart
# Remove from all containers without confirmation
pve-docker-rollback --all --force
ستقوم أداة التراجع بـ:
--force)متى تقوم بالتراجع:
pct-patchedPATH لإعطاء الأولوية للغلافpct المعدَّل بشفافيةpct create/usr/sbin/pct الفعلي لإنشاء الحاوية/etc/pve/lxc/$CTID.confpct الأخرى دون تغييرlxc.apparmor.profile: unconfined# Verify scripts are executable
ls -l /usr/local/bin/pve-script-wrapper.sh /usr/local/bin/pct-patched
# Make them executable if needed
chmod +x /usr/local/bin/pve-script-wrapper.sh /usr/local/bin/pct-patched
# Verify the fix was applied
grep -i apparmor /etc/pve/lxc/105.conf
# Check detected OS type
pct config 105 | grep ostype
# For Ubuntu containers, ensure both lines are present:
# - lxc.apparmor.profile: unconfined
# - lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled...
# If not present, apply manually
pve-docker-fix 105
# Check container is restarted
pct status 105
# Check for syntax errors in config
cat /etc/pve/lxc/105.conf
# View detailed error messages
journalctl -xe
المساهمات مرحّب بها! يرجى:
رخصة جنو العمومية العامة (GNU GENERAL PUBLIC LICENSE) - راجع ملف LICENSE للتفاصيل
# Install
curl -fsSL https://raw.githubusercontent.com/jq6l43d1/proxmox-lxc-docker-fix/main/install.sh | bash
# Run community script with fix
pve-script-wrapper.sh <script-url>
# Fix existing container
pve-docker-fix <container-id>
# List containers with workaround
pve-docker-rollback --list
# Remove workaround (when upstream fixes available)
pve-docker-rollback <container-id>
pve-docker-rollback --all
# Get help
pve-script-wrapper.sh --help
pve-docker-fix --help
pve-docker-rollback --help
ملاحظة: هذا حل بديل مؤقت حتى تُصدر المشاريع الأصلية إصلاحات دائمة. تابع قضايا GitHub المشار إليها للحصول على التحديثات.