guestfs-security(1) Virtualization Support guestfs-security(1)

guestfs-security - راهنما و ملاحظات امنیتی استفاده از کتابخانه libguestfs

این صفحه راهنما به بررسی پیامدها و ملاحظات امنیتی استفاده از libguestfs، به‌ویژه در هنگام کار با ماشین‌های مهمان یا ایمیج‌های دیسک غیرقابل‌اعتماد یا مخرب می‌پردازد.

اگر می‌خواهید یک مشکل امنیتی را به‌صورت محرمانه گزارش کنید، لطفاً رویه امنیتی رد هت (Red Hat) را در پیوند زیر دنبال نمایید: https://access.redhat.com/security/team/contact

اگر مشکل امنیتی چندان وخیم نیست، می‌توانید به‌سادگی یک گزارش اشکال ثبت کنید (بخش «اشکالات (BUGS)» را در ادامه ببینید)، یا ایمیلی به لیست پستی ما ارسال نمایید: (https://lists.libguestfs.org) برای ارسال ایمیل نیازی به عضویت در لیست پستی نیست، اما تا زمان تایید پیام توسط مدیران، تاخیری وجود خواهد داشت.

هرگز نباید سیستم‌فایل یک مهمان غیرقابل‌اعتماد را مستقیماً روی هسته سیستم میزبان خود سوار (mount) کنید (برای مثال با استفاده از loopback یا kpartx).

هنگامی که یک سیستم‌فایل را سوار می‌کنید، خطاهای موجود در لایه سیستم‌فایل هسته (VFS) می‌توانند توسط مهاجمانی که یک سیستم‌فایل مخرب ایجاد کرده‌اند، به اکسپلویت‌های امنیتی تبدیل شوند. این اکسپلویت‌ها به دو دلیل بسیار خطرناک هستند. نخست اینکه راه‌اندازهای (درایورهای) سیستم‌فایل بسیار زیادی در هسته وجود دارند که بسیاری از آن‌ها به ندرت استفاده می‌شوند و توجه چندانی از سوی توسعه‌دهندگان به کد آن‌ها نشده است. فضای کاربری لینوکس با تشخیص خودکار نوع سیستم‌فایل و انتخاب درایور مناسب VFS (حتی اگر نوع آن سیستم‌فایل غیرمنتظره باشد) ناخواسته به نفوذگران بالقوه کمک می‌کند. دوم اینکه یک اکسپلویت در سطح هسته، مشابه یک دسترسی ریشه (root) محلی است (و از جهاتی حتی بدتر)، که دسترسی فوری و کامل به سیستم تا پایین‌ترین سطوح سخت‌افزاری را فراهم می‌سازد.

این‌گونه آسیب‌پذیری‌ها ممکن است برای مدت بسیار طولانی در هسته باقی بمانند (https://lwn.net/Articles/538898).

کتابخانه libguestfs یک رویکرد لایه‌بندی‌شده برای محافظت از شما در برابر اکسپلویت‌ها فراهم می‌کند:

  untrusted filesystem
--------------------------------------
  appliance kernel
--------------------------------------
  qemu process running as non-root
--------------------------------------
  sVirt [if using libvirt + SELinux]
--------------------------------------
  host kernel

ما یک هسته لینوکس را داخل یک ماشین مجازی qemu اجرا می‌کنیم که معمولاً تحت یک حساب کاربری غیرریشه (non-root) اجرا می‌شود. مهاجم برای نفوذ باید سیستم‌فایلی بنویسد که ابتدا هسته ماشین مجازی را اکسپلویت کند، سپس لایه مجازی‌سازی qemu (مانند یک درایور معیوب qemu) یا پروتکل libguestfs را دور بزند، و در نهایت برای اینکه به اندازه اکسپلویت هسته میزبان خطرناک شود، باید سطح دسترسی خود را به root ارتقا دهد. علاوه بر این، اگر از بک‌اند libvirt و SELinux استفاده کنید، از sVirt برای محدودسازی و ایزوله‌سازی فرآیند qemu استفاده می‌شود. این فرآیند ارتقای سطح دسترسی چندمرحله‌ای که تنها با داده‌های ایستا انجام شود، بسیار دشوار تلقی می‌شود؛ اگرچه در دنیای امنیت هیچ‌گاه نمی‌توان با قطعیت مطلق سخن گفت.

فراخوان‌ها همچنین می‌توانند با مشخص کردن صریح نوع سیستم‌فایل هنگام سوار کردن، سطح حمله را کاهش دهند (از "guestfs_mount_vfs" در guestfs(3) استفاده کنید).

در مورد هر فایل یا داده‌ای که از ماشین مهمان دریافت (download) می‌کنید، بسیار محتاط باشید (منظور از دریافت، تنها دستور "guestfs_download" در guestfs(3) نیست، بلکه هر دستوری است که فایل‌ها، نام فایل‌ها، دایرکتوری‌ها یا هر چیز دیگری را از یک ایمیج دیسک می‌خواند). یک مهاجم می‌تواند داده‌ها را دستکاری کند تا برنامه شما را فریب دهد و وادار به انجام رفتاری اشتباه کند. مواردی از این دست را در نظر داشته باشید:

  • موجود نبودن داده (فایل و غیره)
  • موجود بودن اما خالی بودن آن
  • بسیار بزرگ‌تر بودن از حد معمول
  • حاوی داده‌های ۸ بیتی دلخواه بودن
  • قرار داشتن در یک انکودینگ نویسه غیرمنتظره
  • حاوی نویسه‌های هم‌شکل (homoglyphs) بودن.

پروتکل به گونه‌ای طراحی شده است که امن باشد و بر پایه RFC 4506 (XDR) با حداکثر اندازه پیام مشخص پیاده‌سازی شده است. با این حال، برنامه‌ای که از libguestfs استفاده می‌کند نیز باید مراقب باشد؛ برای مثال اگر برنامه‌ای بنویسید که یک فایل اجرایی را از ایمیج دیسک دانلود کرده و آن را به صورت محلی اجرا کند، هیچ میزانی از امنیت پروتکل نمی‌تواند شما را از پیامدهای آن نجات دهد.

بخش‌هایی از رابط برنامه‌نویسی بازرسی (بخش "INSPECTION" در guestfs(3) را ببینید) رشته‌های غیرقابل‌اعتماد را مستقیماً از مهمان بازمی‌گردانند، و این رشته‌ها می‌توانند حاوی هرگونه داده ۸ بیتی باشند. برنامه‌ها باید دقت کنند که قبل از چاپ این مقادیر در یک فایل ساختاریافته، آن‌ها را اسکیپ (escape) کنند (برای مثال، هنگام ساخت یک صفحه وب از اسکیپ کردن HTML استفاده شود).

پیکربندی مهمان ممکن است توسط مدیر آن ماشین مجازی به شیوه‌های غیرمعمول تغییر یافته باشد و منعکس‌کننده واقعیت نباشد (به‌ویژه برای مهمان‌های غیرقابل‌اعتماد یا آشکارا مخرب). برای مثال، ما نام میزبان (hostname) را از فایل‌های پیکربندی مانند /etc/sysconfig/network که در مهمان پیدا می‌کنیم می‌خوانیم، اما مدیر مهمان می‌تواند به‌سادگی این فایل‌ها را دستکاری کند تا نام میزبان اشتباهی ارائه دهد.

رابط بازرسی، پیکربندی مهمان را با استفاده از دو کتابخانه خارجی تجزیه می‌کند: Augeas (برای پیکربندی لینوکس) و hivex (برای رجیستری ویندوز). هر دو کتابخانه به گونه‌ای طراحی شده‌اند که در برابر داده‌های مخرب مقاوم باشند، هرچند حملات منع سرویس (DoS) همچنان امکان‌پذیر است، مثلاً با فایل‌های پیکربندی بسیار حجیم.

در اجرای دستورات از درون مهمان بسیار محتاط باشید. با اجرای یک دستور در مهمان، زمان پردازنده (CPU) را در اختیار یک فایل اجرایی قرار می‌دهید که کنترلی روی آن ندارید، آن هم تحت همان حساب کاربری کتابخانه، هرچند که در مجازی‌سازی qemu محصور شده باشد. اطلاعات بیشتر و روش‌های جایگزین را می‌توانید در بخش "RUNNING COMMANDS" در guestfs(3) بیابید.

https://bugzilla.redhat.com/642934

این باگ امنیتی مربوط به تشخیص خودکار فرمت دیسک است که qemu روی ایمیج‌های دیسک انجام می‌دهد.

یک ایمیج دیسک خام (raw) تنها بایت‌های خام است و هدر ندارد. سایر ایمیج‌های دیسک مانند qcow2 دارای یک هدر ویژه هستند. Qemu با جستجو برای یکی از هدرهای شناخته‌شده این موضوع را مدیریت می‌کند، و اگر هیچ‌کدام یافت نشد، فرض می‌کند که ایمیج دیسک باید raw باشد.

این رفتار به مهمانی که یک ایمیج دیسک خام به آن اختصاص داده شده اجازه می‌دهد تا هدر دیگری بنویسد. در راه‌اندازی بعدی (یا زمانی که ایمیج دیسک توسط libguestfs مورد دسترسی قرار می‌گیرد)، qemu تشخیص خودکار را انجام می‌دهد و بر اساس هدری که توسط مهمان نوشته شده است، تصور می‌کند که فرمت ایمیج دیسک برای مثال qcow2 است.

این مسئله به خودی خود مشکلی ایجاد نمی‌کرد، اما qcow2 قابلیت‌های فراوانی ارائه می‌دهد که یکی از آن‌ها اجازه دادن به یک ایمیج دیسک برای ارجاع به ایمیج دیگر است (که «دیسک پشتیبان» یا backing disk نامیده می‌شود). این کار با قرار دادن مسیر دیسک پشتیبان در هدر qcow2 انجام می‌شود. این مسیر اعتبارسنجی نمی‌شود و می‌تواند به هر فایلی روی میزبان (مثلاً "/etc/passwd") اشاره کند. سپس دیسک پشتیبان از طریق «روزنه‌ها» (holes) در ایمیج دیسک qcow2 در معرض دسترسی قرار می‌گیرد، که طبیعتاً کاملاً تحت کنترل مهاجم است.

در libguestfs بهره‌برداری از این آسیب‌پذیری بسیار دشوار است، مگر تحت دو شرط:

1.
شبکه را فعال کرده باشید یا دیسک را در حالت نوشتن باز کرده باشید.
2.
کدهای غیرقابل‌اعتماد مهمان را نیز اجرا کنید (بخش "RUNNING COMMANDS" در guestfs(3) را ببینید).

راه جلوگیری از این مشکل، تعیین صریح فرمت مورد انتظار دیسک هنگام افزودن دیسک‌ها است (گزینه اختیاری "format" در "guestfs_add_drive_opts" در guestfs(3)). اگر دیسک دارای فرمت raw است باید همیشه این کار را انجام دهید، و برای سایر موارد نیز ایده خوبی است. (همچنین بخش "DISK IMAGE FORMATS" در guestfs(3) را ببینید).

برای دیسک‌هایی که از libvirt با فراخوانی‌هایی مانند "guestfs_add_domain" در guestfs(3) افزوده می‌شوند، فرمت از libvirt دریافت شده و منتقل می‌گردد.

برای ابزارهای libguestfs، از پارامتر خط فرمان --format در صورت لزوم استفاده کنید.

https://bugzilla.redhat.com/752375

این یک باگ در هسته بود که به سیستم‌های مهمان اجازه می‌داد بخش‌هایی از درایوهای میزبان را که نباید به طور معمول به آن‌ها دسترسی داشته باشند، بازنویسی کنند.

کافی است libguestfs را به هر نسخه‌ای بالاتر یا مساوی 1.16 که شامل تغییری برای کاهش این مشکل است به‌روزرسانی کنید.

https://bugzilla.redhat.com/831117

نسخه‌های قدیمی virt-edit و دستور "edit" در guestfish یک فایل جدید حاوی تغییرات ایجاد می‌کردند اما مجوزها و سایر ویژگی‌های فایل جدید را مطابق با فایل قدیمی تنظیم نمی‌کردند. نتیجه این بود که اگر فایلی حساس از نظر امنیتی مانند /etc/shadow را ویرایش می‌کردید، پس از ویرایش برای همگان قابل‌خواندن (world-readable) باقی می‌ماند.

کافی است libguestfs را به هر نسخه‌ای بالاتر یا مساوی 1.16 به‌روزرسانی کنید.

https://bugzilla.redhat.com/968306

این باگ امنیتی نقصی در بخش بازرسی بود که در آن یک مهمان غیرقابل‌اعتماد با استفاده از یک فایل ویژه در سیستم‌عامل مهمان می‌توانست باعث ایجاد آزادسازی دوگانه حافظه (double-free) در کتابخانه C شود (حمله منع سرویس).

کافی است libguestfs را به نسخه‌ای که آسیب‌پذیر نیست به‌روزرسانی کنید: libguestfs نسخه‌های ≥ 1.20.8، ≥ 1.22.2 یا ≥ 1.23.2.

https://bugzilla.redhat.com/1016960

هنگام استفاده از گزینه‌های --remote یا --listen در guestfish(1)، ابزار guestfish یک سوکت در یک مسیر شناخته‌شده ایجاد می‌کرد (/tmp/.guestfish-$UID/socket-$PID).

این مکان باید مشخص می‌بود تا هر دو طرف بتوانند با یکدیگر ارتباط برقرار کنند. با این حال، هیچ بررسی انجام نمی‌شد که آیا دایرکتوری دربرگیرنده (/tmp/.guestfish-$UID) متعلق به همان کاربر است یا خیر. بنابراین کاربر دیگری می‌توانست این دایرکتوری را ایجاد کند و به طور بالقوه سوکت‌های متعلق به کلاینت یا سرور guestfish کاربر دیگر را برباید.

کافی است libguestfs را به نسخه‌ای که آسیب‌پذیر نیست به‌روزرسانی کنید: libguestfs نسخه‌های ≥ 1.20.12، ≥ 1.22.7 یا ≥ 1.24.

این امکان وجود داشت که با ارائه یک ایمیج دیسک حاوی حجم آسیب‌دیده btrfs، نرم‌افزار libguestfs (و برنامه‌هایی که از آن به عنوان کتابخانه استفاده می‌کنند) دچار کرش شوند.

این مشکل به دلیل ارجاع به اشاره‌گر تهی (NULL pointer dereference) رخ می‌داد که باعث منع سرویس می‌شد و بهره‌برداری بیشتری از آن متصور نیست.

برای مشاهده اصلاحیه به کامیت d70ceb4cbea165c960710576efac5a5716055486 مراجعه کنید. این اصلاحیه در شاخه‌های پایدار libguestfs نسخه‌های ≥ 1.26.0، ≥ 1.24.6 و ≥ 1.22.8، و همچنین در RHEL ≥ 7.0 گنجانده شده است. نسخه‌های اولیه libguestfs آسیب‌پذیر نیستند.

کتابخانه libguestfs پیش‌تر از توابع ناامن libxml2 برای تجزیه XMLهای libvirt استفاده می‌کرد. این توابع به طور پیش‌فرض اجازه برقراری ارتباطات شبکه‌ای را در هنگام ارائه اسناد خاص XML می‌دادند. با استفاده از یک سند XML دستکاری‌شده، امکان مصرف کامل CPU، حافظه یا توصیف‌کننده‌های فایل در سیستم وجود داشت.

از آنجا که XML مربوط به libvirt از یک منبع معتمد (دیمن libvirt) تامین می‌شود، به نظر نمی‌رسد این نقص قابل بهره‌برداری بوده باشد.

این مشکل در libguestfs ≥ 1.27.9 رفع شد و اصلاحیه آن به نسخه‌های پایدار ≥ 1.26.2، ≥ 1.24.9، ≥ 1.22.10 و ≥ 1.20.13 بک‌پورت شد.

این باگ bash به طور غیرمستقیم بر libguestfs تاثیر می‌گذارد. برای اطلاعات بیشتر ببینید: https://www.redhat.com/archives/libguestfs/2014-September/msg00252.html

این دو باگ در binutils بر برنامه strings(1) در گنو تاثیر می‌گذارند و بنابراین بر رابط‌های برنامه‌نویسی "guestfs_strings" در guestfs(3) و "guestfs_strings_e" در guestfs(3) در libguestfs موثرند. اجرای strings روی یک فایل غیرقابل‌اعتماد می‌توانست منجر به اجرای کد دلخواه شود (محدود به ماشین مجازی libguestfs).

در نسخه‌های libguestfs ≥ 1.29.5 و ≥ 1.28.3، کتابخانه libguestfs از گزینه -a در "strings" استفاده می‌کند تا از تجزیه BFD روی فایل جلوگیری شود.

https://bugzilla.redhat.com/show_bug.cgi?id=1251157

این آسیب‌پذیری درون خود libguestfs نیست، اما از آنجا که ما همیشه یک پورت virtio-serial به هر مهمان اختصاص می‌دهیم (زیرا ارتباط مهمان و میزبان از این طریق انجام می‌شود)، امکان ارتقای دسترسی از ماشین مجازی به فرآیند qemu میزبان وجود دارد. این موضوع می‌تواند بر شما تاثیر بگذارد اگر:

  • برنامه libguestfs شما برنامه‌های غیرقابل‌اعتماد را از درون مهمان اجرا کند (با استفاده از "guestfs_sh" در guestfs(3) و غیره)، یا
  • اکسپلویت دیگری (مثلاً) در کد سیستم‌فایل هسته یافت شود که به یک سیستم‌فایل دستکاری‌شده اجازه دهد کنترل ماشین مجازی را به دست گیرد.

اگر از sVirt برای محدودسازی qemu استفاده کنید، این کار برخی حملات را خنثی خواهد کرد.

https://bugzilla.redhat.com/1260778

ابزارهای virt-customize(1)، virt-sysprep(1) و virt-builder(1) دارای گزینه --ssh-inject برای تزریق کلید SSH به ایمیج‌های دیسک ماشین مجازی هستند. آن‌ها ممکن است برای انجام این کار یک دایرکتوری ~user/.ssh و فایل ~user/.ssh/authorized_keys در مهمان ایجاد کنند.

در نسخه‌های libguestfs < 1.31.5 و libguestfs < 1.30.2، دایرکتوری و فایل جدید به ترتیب با حالت‌های 0755 و 0644 ایجاد می‌شدند. با این حال این مجوزها (به‌ویژه برای ~user/.ssh) بازتر از مجوزهایی هستند که OpenSSH استفاده می‌کند. در نسخه فعلی libguestfs، دایرکتوری و فایل با حالت‌های 0700 و 0600 ایجاد می‌شوند.

https://bugzilla.redhat.com/CVE-2015-8869

این آسیب‌پذیری در OCaml ممکن است بر ابزارهای virt نوشته‌شده به زبان OCaml تاثیر بگذارد. این باگ تنها پلتفرم‌های ۶۴ بیتی را تحت تاثیر قرار می‌دهد. از آنجا که این باگ بر تولید کد اثر می‌گذارد، پیش‌بینی دقیق اینکه کدام نرم‌افزار ممکن است تحت تاثیر قرار گیرد دشوار است، بنابراین توصیه ما این است که libguestfs را با استفاده از نسخه‌ای از کامپایلر OCaml که این باگ در آن رفع شده مجدداً کامپایل کنید (یا از توزیع لینوکس خود بخواهید این کار را انجام دهد).

چندین آسیب‌پذیری در برنامه wrestool(1) در بسته "icoutils" می‌تواند برای اجرای کد محلی روی سیستم میزبان مورد سوءاستفاده قرار گیرد.

هنگامی که بازرسی libguestfs (بخش «امنیت بازرسی» در بالا را ببینید) یک مهمان ویندوز XP یا ویندوز 7 را شناسایی می‌کند و از آن خواسته می‌شود تا آیکون مربوط به مهمان را بیابد، یک فایل نامعتمد را از مهمان دانلود کرده و دستور "wrestool -x" را روی آن فایل اجرا می‌کند. این امر می‌تواند منجر به اجرای کد محلی روی میزبان شود. هر ایمیج دیسک یا مهمانی می‌تواند به گونه‌ای دستکاری شود که برای بازرسی libguestfs شبیه یک مهمان ویندوز به نظر برسد، بنابراین صرفاً نداشتن مهمان‌های ویندوزی مانع این تهدید نیست.

هر برنامه‌ای که تابع "guestfs_inspect_get_icon" در libguestfs را فراخوانی کند ممکن است آسیب‌پذیر باشد. این شامل virt-inspector(1) و virt-manager(1) می‌شود.

راهکار، به‌روزرسانی به نسخه غیرآسیب‌پذیر icoutils (حداقل نسخه 0.31.1) است.

چندین آسیب‌پذیری در PCRE می‌توانست برای کرش دادن libguestfs (یعنی ایجاد حمله منع سرویس) هنگام بازرسی روی یک ماشین مجازی غیرقابل‌اعتماد مورد بهره‌برداری قرار گیرد.

راهکار، به‌روزرسانی به نسخه‌ای از PCRE است که این باگ‌ها در آن رفع شده باشند (نسخه بالادستی ≥ 8.41).

آسیب‌پذیری‌های موثر بر شبکه کاربری qemu (با نام SLIRP) به یک ایمیج سیستم‌فایل مخرب اجازه می‌دهد کنترل qemu را در دست گرفته و از آنجا به میزبان حمله کند.

این مشکل بر libguestfs زمانی که بک‌اند روی "direct" تنظیم شده باشد و شبکه فعال باشد تاثیر می‌گذارد.

بک‌اند direct در نسخه بالادستی پیش‌فرض است، اما در برخی توزیع‌های پایین‌دستی لینوکس از جمله فدورا، ردهت اینترپرایز لینوکس و CentOS پیش‌فرض نیست. همچنین اگر متغیر محیطی "LIBGUESTFS_BACKEND=direct" را تنظیم کرده باشید یا تابع "guestfs_set_backend (g, "direct")" را فراخوانی کرده باشید، ممکن است این حالت انتخاب شده باشد.

شبکه به طور خودکار توسط برخی ابزارها فعال می‌شود (مانند virt-builder(1))، یا در صورتی فعال می‌گردد که کد شما "guestfs_set_network (g, 1)" را فراخوانی کرده باشد (که پیش‌فرض نیست).

بک‌اند libvirt تحت تاثیر قرار نمی‌گیرد.

راهکار، به‌روزرسانی qemu به نسخه‌ای شامل اصلاحیه است (ببینید: https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg01012.html).

https://bugzilla.redhat.com/CVE-2022-2211

تابع "get_keys" در فایل libguestfs-common/options/keys.c آن دسته از گزینه‌های --key از خط فرمان را که با یک دستگاه بلوکی خاص در حال رمزگشایی برای بازرسی مطابقت دارند، در یک آرایه جدید جمع‌آوری می‌کند. این تابع قصد دارد اندازه آرایه نتیجه را طوری تعیین کند که احتمالاً تمام گزینه‌های --key به همراه یک عنصر پایانی "NULL" در آن جای گیرند. کد به اشتباه از ماکروی "MIN" به جای "MAX" استفاده کرده و بنابراین پیش از عنصر پایانی "NULL" تنها یک عنصر تخصیص داده می‌شود.

ارسال دقیقاً دو گزینه --key ID:... در خط فرمان برای دستگاه بلوکی رمزگذاری‌شده "ID" باعث می‌شود "get_keys" روی عنصر پایانی "NULL" بازنویسی انجام دهد، که منجر به خواندن خارج از محدوده در "decrypt_mountables" در فایل libguestfs-common/options/decrypt.c می‌شود.

ارسال بیش از دو گزینه --key ID:... در خط فرمان برای دستگاه بلوکی رمزگذاری‌شده "ID" باعث می‌شود که خود "get_keys" عمل نوشتن خارج از محدوده انجام دهد. رایج‌ترین نشانه این حالت کرش کردن با خطای "SIGSEGV" در ادامه کار است.

این موضوع — به طور کلی — تمامی ابزارهای مبتنی بر libguestfs را که گزینه --key را می‌پذیرند تحت تاثیر قرار می‌دهد، یعنی: "guestfish"، "guestmount"، "virt-cat"، "virt-customize"، "virt-diff"، "virt-edit"، "virt-get-kernel"، "virt-inspector"، "virt-log"، "virt-ls"، "virt-sparsify"، "virt-sysprep"، "virt-tail"، "virt-v2v".

guestfs(3), guestfs-internals(1), guestfs-release-notes(1), guestfs-testing(1), http://libguestfs.org.

Richard W.M. Jones ("rjones at redhat dot com")

Copyright (C) 2009-2025 Red Hat Inc.

این کتابخانه یک نرم‌افزار آزاد است؛ شما می‌توانید آن را تحت شرایط مجوز عمومی همگانی کمتر گنو (GNU LGPL) که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، چه نسخه ۲ این مجوز و چه (به انتخاب خودتان) هر نسخه بعدی آن، بازتوزیع کرده یا تغییر دهید.

این کتابخانه با این امید توزیع شده است که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل‌فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به مجوز عمومی همگانی کمتر گنو مراجعه کنید.

شما باید همراه با این کتابخانه یک نسخه از مجوز عمومی همگانی کمتر گنو را دریافت کرده باشید؛ در غیر این صورت، به بنیاد نرم‌افزارهای آزاد به آدرس زیر بنویسید: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

برای مشاهده فهرستی از اشکالات ثبت‌شده برای libguestfs از این پیوند استفاده کنید: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools

برای گزارش یک اشکال جدید در libguestfs از این پیوند استفاده کنید: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

هنگام گزارش اشکال لطفاً موارد زیر را ارائه دهید:

  • نسخه libguestfs.
  • محل تهیه libguestfs (مثلاً کدام توزیع لینوکس، کامپایل از سورس و غیره)
  • اشکال را با دقت شرح دهید و روشی برای بازتولید آن ارائه کنید.
  • دستور libguestfs-test-tool(1) را اجرا کرده و خروجی کامل و ویرایش‌نشده آن را درون گزارش اشکال قرار دهید.
2026-07-14 libguestfs-1.60.1