
يحلل ويوضح ثغرة نواة Linux CVE-2023-28772، ويوفر مصدر نواة مصححًا أو ضعيفًا لأغراض البحث الأمني والتعليم.
هذه هي ملاحظات الإصدار لإصدار لينكس 4. اقرأها بعناية، لأنها تخبرك بما يدور حوله هذا الموضوع، وتشرح كيفية تثبيت النواة، وماذا تفعل إذا حدث خطأ ما.
ما هو لينكس؟
لينكس هو نسخة من نظام التشغيل يونكس، كُتب من الصفر بواسطة لينوس تورفالدز بمساعدة فريق غير رسمي من المبرمجين عبر الإنترنت. يهدف إلى التوافق مع POSIX و Single UNIX Specification.
يحتوي على جميع الميزات التي تتوقعها في نظام يونكس حديث كامل، بما في ذلك تعدد المهام الحقيقي، الذاكرة الافتراضية، المكتبات المشتركة، التحميل عند الطلب، الملفات التنفيذية المشتركة بنسخ عند الكتابة، إدارة الذاكرة السليمة، والشبكات متعددة الأكوام بما في ذلك IPv4 و IPv6.
يتم توزيعه تحت رخصة GNU العامة - راجع ملف COPYING المرفق لمزيد من التفاصيل.
على أي أجهزة يعمل؟
على الرغم من تطويره في الأصل لأجهزة الكمبيوتر الشخصية 32 بت المعتمدة على x86 (386 أو أعلى)، إلا أن لينكس اليوم يعمل أيضًا على (على الأقل) بنيات Alpha AXP من Compaq، و Sun SPARC و UltraSPARC، و Motorola 68000، و PowerPC، و PowerPC64، و ARM، و Hitachi SuperH، و Cell، و IBM S/390، و MIPS، و HP PA-RISC، و Intel IA-64، و DEC VAX، و AMD x86-64، و AXIS CRIS، و Xtensa، و Tilera TILE، و AVR32 و Renesas M32R.
يمكن نقل لينكس بسهولة إلى معظم البنيات 32 أو 64 بت ذات الأغراض العامة طالما أنها تحتوي على وحدة إدارة ذاكرة صفحات (PMMU) ومترجم GNU C (gcc) (جزء من مجموعة مترجمات GNU، GCC). تم أيضًا نقل لينكس إلى عدد من البنيات بدون PMMU، على الرغم من أن الوظائف محدودة بشكل واضح عندئذٍ. تم أيضًا نقل لينكس إلى نفسه. يمكنك الآن تشغيل النواة كتطبيق مساحة مستخدم - وهذا يسمى UserMode Linux (UML).
التوثيق:
هناك الكثير من التوثيق المتاح سواء في شكل إلكتروني على الإنترنت وفي الكتب، سواء كانت خاصة بلينكس أو تتعلق بأسئلة يونكس العامة. أوصي بالاطلاع على الدلائل الفرعية للتوثيق على أي موقع FTP للينكس للحصول على كتب LDP (مشروع توثيق لينكس). هذا الملف README ليس المقصود منه أن يكون توثيقًا للنظام: هناك مصادر أفضل بكثير متاحة.
توجد ملفات README متنوعة في الدليل الفرعي Documentation/: تحتوي هذه عادةً على ملاحظات تثبيت خاصة بالنواة لبعض برامج التشغيل على سبيل المثال. راجع Documentation/00-INDEX للحصول على قائمة بما يوجد في كل ملف. يرجى قراءة ملف Changes، لأنه يحتوي على معلومات حول المشكلات التي قد تنتج عن ترقية النواة الخاصة بك.
يحتوي الدليل الفرعي Documentation/DocBook/ على العديد من الأدلة لمطوري النواة والمستخدمين. يمكن عرض هذه الأدلة بعدة تنسيقات: PostScript (.ps)، PDF، HTML، وصفحات الرجل، من بين أخرى. بعد التثبيت، ستقوم "make psdocs" أو "make pdfdocs" أو "make htmldocs" أو "make mandocs" بعرض التوثيق بالتنسيق المطلوب.
تثبيت مصدر النواة:
إذا قمت بتثبيت المصادر الكاملة، ضع ملف النواة المضغوط في دليل لديك أذونات فيه (مثل دليل منزلك) وقم بفك ضغطه:
xz -cd linux-4.X.tar.xz | tar xvf -
استبدل "X" برقم الإصدار لأحدث نواة.
لا تستخدم منطقة /usr/src/linux! تحتوي هذه المنطقة على مجموعة (غير كاملة عادةً) من رؤوس النواة المستخدمة بواسطة ملفات رأس المكتبة. يجب أن تتطابق مع المكتبة، وألا تتلف بسبب أي إصدار نواة حالي.
يمكنك أيضًا الترقية بين إصدارات 4.x عن طريق التصحيح. يتم توزيع التصحيحات بتنسيق xz. للتثبيت عن طريق التصحيح، احصل على جميع ملفات التصحيح الأحدث، أدخل الدليل الأعلى لمصدر النواة (linux-4.X) ونفذ:
xz -cd ../patch-4.x.xz | patch -p1
استبدل "x" لجميع الإصدارات الأكبر من الإصدار "X" لشجرة المصادر الحالية الخاصة بك، بالترتيب، وستكون بخير. قد ترغب في إزالة ملفات النسخ الاحتياطي (some-file-name~ أو some-file-name.orig)، وتأكد من عدم وجود تصحيحات فاشلة (some-file-name# أو some-file-name.rej). إذا كانت موجودة، فإما أنت أو أنا أخطأنا.
على عكس التصحيحات لنواة 4.x، فإن تصحيحات نواة 4.x.y (المعروفة أيضًا باسم النوى المستقرة -stable) ليست تراكمية بل يتم تطبيقها مباشرة على النواة الأساسية 4.x. على سبيل المثال، إذا كانت نواتك الأساسية هي 4.0 وتريد تطبيق تصحيح 4.0.3، فلا يجب عليك أولاً تطبيق تصحيحات 4.0.1 و 4.0.2. وبالمثل، إذا كنت تستخدم إصدار النواة 4.0.2 وتريد الانتقال إلى 4.0.3، يجب عليك أولاً عكس تصحيح 4.0.2 (أي patch -R) قبل تطبيق تصحيح 4.0.3. يمكنك قراءة المزيد عن هذا في Documentation/applying-patches.txt
بدلاً من ذلك، يمكن استخدام البرنامج النصي patch-kernel لأتمتة هذه العملية. يحدد إصدار النواة الحالي ويطبق أي تصحيحات موجودة.
linux/scripts/patch-kernel linux
الوسيطة الأولى في الأمر أعلاه هي موقع مصدر النواة. يتم تطبيق التصحيحات من الدليل الحالي، ولكن يمكن تحديد دليل بديل كوسيطة ثانية.
تأكد من عدم وجود ملفات .o قديمة وتبعيات باقية:
cd linux make mrproper
يجب أن يكون لديك الآن المصادر مثبتة بشكل صحيح.
متطلبات البرامج
يتطلب تجميع وتشغيل نوى 4.x إصدارات محدثة من حزم البرامج المختلفة. راجع Documentation/Changes للحصول على أرقام الإصدارات الدنيا المطلوبة وكيفية الحصول على تحديثات لهذه الحزم. احذر من أن استخدام إصدارات قديمة جدًا من هذه الحزم يمكن أن يسبب أخطاء غير مباشرة يصعب تعقبها، لذا لا تفترض أنه يمكنك فقط تحديث الحزم عند ظهور مشكلات واضحة أثناء البناء أو التشغيل.
دليل البناء للنواة:
عند تجميع النواة، سيتم تخزين جميع ملفات المخرجات افتراضيًا مع شفرة مصدر النواة. استخدام الخيار "make O=output/dir" يسمح لك بتحديد مكان بديل لملفات المخرجات (بما في ذلك .config). مثال:
شفرة مصدر النواة: /usr/src/linux-4.X
دليل البناء: /home/name/build/kernel
لتكوين وبناء النواة، استخدم:
cd /usr/src/linux-4.X
make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install
يرجى ملاحظة: إذا تم استخدام الخيار 'O=output/dir'، فيجب استخدامه لجميع استدعاءات make.
تكوين النواة:
لا تتخط هذه الخطوة حتى لو كنت تقوم فقط بترقية إصدار ثانوي واحد. يتم إضافة خيارات تكوين جديدة في كل إصدار، و ستظهر مشكلات غريبة إذا لم يتم إعداد ملفات التكوين كما هو متوقع. إذا كنت تريد نقل تكوينك الحالي إلى إصدار جديد بأقل جهد، استخدم "make oldconfig"، والذي سيسألك فقط عن الإجابات للأسئلة الجديدة.
أوامر التكوين البديلة هي:
"make config" واجهة نصية عادية.
"make menuconfig" قوائم ملونة تعتمد على النص، وقوائم اختيار ومربعات حوار.
"make nconfig" قوائم ملونة محسنة تعتمد على النص.
"make xconfig" أداة تكوين تعتمد على X windows (Qt).
"make gconfig" أداة تكوين تعتمد على X windows (Gtk).
"make oldconfig" الإجابة افتراضيًا على جميع الأسئلة بناءً على محتويات ملف ./.config الحالي الخاص بك والسؤال عن رموز التكوين الجديدة.
"make silentoldconfig" مثل ما سبق، ولكن يتجنب ازدحام الشاشة بأسئلة تمت الإجابة عليها بالفعل. بالإضافة إلى تحديث التبعيات.
"make olddefconfig" مثل ما سبق، ولكن يضبط الرموز الجديدة على قيمها الافتراضية دون مطالبة.
"make defconfig" إنشاء ملف ./.config باستخدام قيم الرموز الافتراضية إما من arch/$ARCH/defconfig أو arch/$ARCH/configs/${PLATFORM}_defconfig، اعتمادًا على البنية.
"make ${PLATFORM}_defconfig" إنشاء ملف ./.config باستخدام قيم الرموز الافتراضية من arch/$ARCH/configs/${PLATFORM}_defconfig. استخدم "make help" للحصول على قائمة بجميع المنصات المتاحة لبنيتك.
"make allyesconfig" إنشاء ملف ./.config عن طريق ضبط قيم الرموز إلى 'y' قدر الإمكان.
"make allmodconfig" إنشاء ملف ./.config عن طريق ضبط قيم الرموز إلى 'm' قدر الإمكان.
"make allnoconfig" إنشاء ملف ./.config عن طريق ضبط قيم الرموز إلى 'n' قدر الإمكان.
"make randconfig" إنشاء ملف ./.config عن طريق ضبط قيم الرموز إلى قيم عشوائية.
"make localmodconfig" إنشاء تكوين بناءً على التكوين الحالي والوحدات المحملة (lsmod). يعطل أي خيار وحدة غير ضروري للوحدات المحملة.