خطای شروع VM ممکن است permission فایل، AppArmor/SELinux یا lock باشد. امشب شواهد را جدا می‌خوانیم و policy را با نیاز واقعی تطبیق می‌دهیم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.

جایگاه در دوره: هدف‌های 351.4 آزمون 305-300.

محیط: hv-a؛ در Ubuntu ممکن است AppArmor فعال باشد. مثال SELinux برای Clone خانوادهٔ RHEL با policy موجود است، نه نصب اجباری روی Ubuntu.

virsh -c qemu:///system domstate lab01 --reason
virsh -c qemu:///system domblklist lab01 --details
namei -l /var/lib/libvirt/images/lpic305/lab01.qcow2
sudo journalctl -u libvirtd -u virtqemud -u virtlogd -u virtlockd -n 80 --no-pager

فقط unitهای نصب‌شده log دارند. log QEMU بسته معمولاً زیر /var/log/libvirt/qemu/ است؛ raw XML/log می‌تواند مسیر، API یا اطلاعات حساس داشته باشد و عمومی نمی‌شود.

محدودیت درست#

DAC یا کنترل دسترسی اختیاری بر اساس مالک و mode، و MAC یا کنترل دسترسی اجباری بر اساس policy، دو شرط جدا هستند. AppArmor libvirt می‌تواند profile متناسب با domain و path بسازد؛ با log deny و XML path تطبیق بده. در SELinux، sVirt/MCS مهمان‌ها را با labelهای domain جدا می‌کند؛ دادن یک label عمومی writable به همهٔ imageها جداسازی را تضعیف می‌کند.

user system QEMU در Ubuntu مبنا libvirt-qemu است؛ مسیر home حساب عادی به‌طور پیش‌فرض انتخاب مناسبی برای system VM نیست. permission traversal والد، ACL، file label و config security driver را جدا ببین. اجرای daemon با root یا خاموش کردن MAC درمان عمومی خطا نیست.

lock و داده#

virtlockd یا backend lock انتخاب‌شده مانع استفادهٔ ناسازگار از resource می‌شود؛ lock file را در حالی که احتمال اجرای guest دیگر وجود دارد حذف نکن. shared storage و fencing باید نقش مالک disk را روشن کنند؛ CLI موفق start proof امن بودن dual-writer نیست.

آزمون: روی Clone خاموش دسترسی یک disk جدید را عمداً نامناسب کن، failure را ثبت و mode/owner قبلی را بازیابی کن. هیچ image guest فعال را برای qemu-img با force-share باز نکن.

بازگشت: تغییر permission/path/profile همین مورد را برگردان و boot/marker را بسنج؛ reset همهٔ policyها یا حذف تمام lockها انجام نمی‌شود.

منبع: امنیت libvirt ، daemonها ، locking .