اذهب إلى المحتوى

طريف العتيق

الأعضاء
  • المساهمات

    100
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    3

كل منشورات العضو طريف العتيق

  1. landing page أو صفحة الهبوط هي تلك الصفحة التي "يهبط" عليها الزائر، وصفحة الهبوط تكون منفصلة تماما عن الموقع الرئيسي وتكون مصممة لهدف واحد وهو أن يتحول الزائر إلى زبون أو عميل. تعرّف على صفحات الهبوط (Landing Pages) ومكوّناتها لكني لم أعرف قصدك بـ OTO، هلّا أخبرتنا إلى ماذا يرمز هذا الاختصار؟
  2. طالما أنكّ في أكاديمية حسوب فأنت في المكان الصحيح لتعلّم مجموعة من أهم المهارات التي يمكنك الكسب من ورائها. على الرابط أدناه تجد سلسلة دروس تعليمية حول أشهر البرامج المكتبية اللازمة في مهمتك: http://academy.hsoub.com/apps/productivity/office/
  3. مرحبًا بك في أكاديمية حسوب يقوم المسؤولون على النشر في الأكاديمية بالردّ على الرسائل فقط عندما يرون أنها قابلة للنشر، حيث تصلنا مئات (وأحيانًا آلاف الرسائل) ولا يمكننا الرد على جميع الرسائل. عليك الانتظار حتى أسبوع أحيانًا قبل أن يأتيك الردّ (في حال قبول المقال) تحياتي
  4. أهلا بك تصلنا أحيانا مئات (وفي بعض الأحيان آلاف!) الرسائل شهريًا لاقتراحات نشر مقالات، نحاول التعامل مع هذا الكمّ الهائل باستمرار، لكن الكثير من هذه الرسائل تكون غير جديّة (نسخ ولصق مع بعض التعديل أو ترجمة سيئة للغاية) لذلك نفلتر هذه الرسائل بدون ردّ أتمنى الانتظار قليلًا، وفي حال كان مقالك موافقا للمعايير سيتم الردّ عليه بواسطة البريد الإلكتروني الخاص بك.
  5. أجل بالتأكيد، ضمن نقاش الصفقة يمكنك إرسال جميع أنواع الملفات للعميل بما في ذلك المسودات، أما تسليم المشروع فهذا يكون من طرف العميل حصرًا.
  6. أقسام الأسئلة والأجوبة في الأكاديميّة ليست مُخصصة للنقاش صديقي. يمكنك طرح النقاش في مجتمعات IO
  7. السؤال مكرّر. ألقي نظرة على هذه الأسئلة: ما هي أفضل الكورسات المجانية الأجنبية للربح من الإنترنت؟ ما هي أبسط الأعمال التي يمكنني الربح من خلالها في مواقع الخدمات المُصغّرة؟
  8. أهلا بك سعيد، يمكنك مراجعة الإجابات التالية على هذه الأسئلة - وهي تتقاطع مع سؤالك: ما هي الخطوات التي يجب علي اتباعها للنجاح في العمل الحر؟ هل هناك عمل حرّ بأقل المهارات؟ متى أتوقف عن العمل الحرّ وابدأ مشروعي الخاص؟ أعاني من فقد الحماس، كيف أعالج هذه المشكلة؟ ما هو المجال الأكثر طلبًا في سوق العمل الحرّ ما هي أبرز مشاكل العمل الحرّ؟ وابحث في القسم فهو مليء بالأسئلة التي تخطر على بالك وإجابات لها.
  9. أهلا بك محمد، يمكنك مراجعة الإجابات على هذه الأسئلة - وهي تتقاطع مع سؤالك: ما هي الخطوات التي يجب علي اتباعها للنجاح في العمل الحر؟ هل هناك عمل حرّ بأقل المهارات؟ متى أتوقف عن العمل الحرّ وابدأ مشروعي الخاص؟ أعاني من فقد الحماس، كيف أعالج هذه المشكلة؟ ما هو المجال الأكثر طلبًا في سوق العمل الحرّ ما هي أبرز مشاكل العمل الحرّ؟
  10. يُعتبر FreeBSD نظام تشغيل آمن، عالي الأداء، ومناسب لمجموعة متنوعة من وظائف الخوادم الشائعة. نغطي في هذا الدرس المعلومات الأساسية التي تحتاجها لتنطلق مع خوادم FreeBSD. الخطوة الأولى: الولوج عبر SSHالخطوة الأولى التي نحتاجها للبدء في ضبط وإعداد خادوم FreeBSD هي تسجيل الدخول من خلاله. تُزوّدك معظم الشركات بمفتاح SSH العمومي عند إنشاء خادوم FreeBSD، بحيث يمكنك تسجيل الدخول بشكلٍ آمن من حاسوبك المنزلي إلى خادومك عبر مفتاح SSH الخاص المرتبط به. لمعرفة المزيد حول كيفية استخدام مفاتيح SSH يمكنك قراءة مقال العمل مع خواديم ssh، العملاء والمفاتيح من أكاديمية حسوب. لتسجيل الدخول إلى الخادوم الخاص بك تحتاج أولًا إلى معرفة عنوان IP العام له، والذي يمكنك إيجاده عادة من لوحة التحكم، بالإضافة إلى اسم المستخدم الرئيسي لخادوم FreeBSD (سنستخدم لهذا الدرس الاسم freebsd لغرض تعليمي)، كما تختلف الإعدادات الافتراضية بين الشركات حول صلاحيات هذا المستخدم، وسنفترض هنا حصوله على أذونات استعمال sudo لإتمام المهام الإدارية. لتسجيل الدخول إلى خادوم FreeBSD استخدم الأمر ssh مع تحديد عنوان IP العام للخادوم إضافة لاسم المستخدم : ssh freebsd@server_IP_addressيُفترض أن تتم المصادقة تلقائيًا وينجح تسجيل الدخول لتكون أمام سطر الأوامر الخاص بخادومك. تغيير موجه صدفة tcsh والإعدادات الافتراضية (اختياري)بعد تسجيل الدخول ستجد نفسك أمام موجّه أوامر بسيط يبدو بالشكل: >وهو الموجّه الافتراضي في tcsh صدفة سطر الأوامر القياسيّة في FreeBSD، لنُدخل الآن بعض التعديلات المفيدة على ملف ضبط الصدفة بهدف جعلها أكثر فائدة، مثل توضيح مسار الطرفية قبل إشارة المحث. إحدى أمثلة ملف الضبط موجودة في نظام الملفات لدينا، وكل ما علينا فعله هو نسخها إلى دليل المنزل لإجراء التعديلات التي نرغب بها: cp /usr/share/skel/dot.cshrc ~/.cshrcبعد نسخ الملف السابق إلى مجلد المنزل لنحرّره باستخدام الأداة vi المدمجة مع FreeBSD، أما إذا كنت ترغب باستعمال شيء أبسط فيمكنك تجريب المحرّر ee: vi ~/.cshrcيتضمّن هذا الملف بعض القيم الافتراضية المعقولة بما في ذلك موجّه أكثر وظيفيّة، إحدى الأجزاء التي قد ترغب بتعديلها هي مُدخلات setenv: . . . setenv EDITOR vi setenv PAGER more . . .إذا لم تألف التعامل مع المحرّر vi وترغب باعتماد بيئة تحرير أكثر سهولة، فعليك تغيير قيمة متغيّر البيئة EDITOR إلى شيء مثل ee. كما يميل معظم المستخدمين إلى تعديل قيمة PAGER إلى less بدلًا من more وهذا ما يسمح بالانتقال إلى أعلى وأسفل ضمن ملفات أدلة البرامج man بدون مغادرة pager: setenv EDITOR ee setenv PAGER lessنحتاج أيضًا إضافة الشيفرة التالية إلى آخر ملف الضبط السابق وذلك لتصحيح مواضع بعض أزرار لوحة المفاتيح لدينا داخل جلسة tcsh، وإلا فلن تعمل بعض الأزرار بوظائفها المتوقعة مثل زر Delete، ما عليك فعله هو نسخ هذه الأسطر وإضافتها أسفل الملف: if ($term == "xterm" || $term == "vt100" || $term == "vt102" || $term !~ "con*") then # bind keypad keys for console, vt100, vt102, xterm bindkey "\e[1~" beginning-of-line # Home bindkey "\e[7~" beginning-of-line # Home rxvt bindkey "\e[2~" overwrite-mode # Ins bindkey "\e[3~" delete-char # Delete bindkey "\e[4~" end-of-line # End bindkey "\e[8~" end-of-line # End rxvt endifعند الانتهاء احفظ الملف واخرج من المُحرّر. لوضع التعديلات الجديدة موضع التنفيذ في الجلسة الحالية يمكننا إعادة تحميل ملف الضبط السابق: source ~/.cshrc ستلاحظ في الحال تغيّر هيئة موجّه الأوامر لديك إلى شيء يشبه: freebsd@hostname:~ % كما ستعمل أزرار "Home" ،"Insert" ،"Delete" و"End" بوظائفها المعتادة بدءًا من الآن. شيء آخر بقي أن أشير إليه هنا؛ في حال كنت تستخدم صدفة tcsh الافتراضية أو csh فأنت بحاجة إلى تنفيذ الأمر rehash كلما أجريت تعديلًا قد يؤثّر على مسار الملفات التنفيذيّة. أحد الأمثلة الشائعة على ذلك تثبيت أو إزالة تثبيت تطبيق ما. بعبارة أخرى بعد تركيب برنامج جديد يتوجب عليك تنفيذ الأمر التالي لتتمكّن الصدفة من التعرّف على ملفات البرنامج الجديد: rehashتغيير الصدفة الافتراضية (اختياري)تمنحك التعديلات السابقة إلفة أكثر مع بيئة tcsh أما إذا كنت لا تزال ترغب باعتماد صدفة bash كصدفة افتراضية لخادوم FreeBSD الخاص بك فعليك اتباع التعليمات التالية: في البداية يتوجب عليك تثبيت صدفة bash عن طريق كتابة: sudo pkg install bashبعد انتهاء التثبيت سنضيف السطر التالي إلى ملف etc/fstab/ لربط الملف الواصف لنظام الملفات، والذي تحتاجه صدفة bash: fdesc /dev/fd fdescfs rw 0 0لإضافة السطر السابق بسهولة إلى آخر ملف etc/fstab/ يمكنك تنفيذ الأمر التالي: sudo sh -c 'echo "fdesc /dev/fd fdescfs rw 0 0" >> /etc/fstab'بعد ذلك يمكننا ربط نظام الملفات من خلال: sudo mount -aهكذا سيكون نظام الملفات جاهز لتشغيل bash، ولتشغيلها نفّذ الأمر التالي: bashلتعديل الصدفة الافتراضية إلى bash يمكنك كتابة: sudo chsh -s /usr/local/bin/bash freebsdفي المرة التالية التي تُسجّل بها دخولك إلى الخادوم ستبدأ مع صدفة bash بدلًا من tcsh. إذا كنتَ ترغب بتعديل المحرّر الافتراضي أو قيمة pager في صدفة bash ستحتاج أولًا إلى إنشاء الملف التالي في دليل المنزل: vi ~/.bash_profileيمكنك الآن إجراء التعديلات التي ترغب بها داخل هذا الملف، سأضع هنا اختياراتي المُفضّلة: export PAGER=less export EDITOR=vi احفظ الملف واخرج من المحرّر عندما تنتهي من التعديل. لوضع التغييرات الأخيرة موضع التنفيذ الفوري أعد تحميل ملف الضبط السابق: source ~/.bash_profileتعيين كلمة مرور الجذر (اختياري)بشكلٍ افتراضي لا تتيح خوادم FreeBSD الولوج كمستخدم جذر عبر ssh، ورغم ذلك فإنه من الآمن تعيين كلمة مرور root يتم طلبها عند رغبتك استخدام حساب الجذر من خلال طرفية لوحة تحكم الوِيب لخادومك. لتعيين كلمة مرور root اكتب: sudo passwdستسألك الطرفية إدخال وتأكيد كلمة مرور الجذر. وكما ذكرنا أعلاه فإن هذا لن يتيح لك استعمال ssh لتسجيل الدخول بحساب root (لأغراض أمنية) أما لتنفيذ المهام الإدارية فعليك استعمال طرفية لوحة تحكّم الوِيب. الخلاصةتعلمنا إلى الآن كيفية تسجيل الدخول إلى خادوم FreeBSD، وتعديل بيئة الصدفة بشكل مناسب، وحالما تألف التعامل مع FreeBSD وتضبطه بما يتلاءم واحتياجاتك سوف تكون قادر على الاستفادة من مرونته، أمانه، وأدائه العالي. ترجمة -وبتصرف- للمقال: How To Get Started with FreeBSD 10.1 لصاحبه: Justin Ellingwood.
  11. يُعتبر مدير الحزم الثنائية لـ FreeBSD والمُسمى pkg أداةً سهلة تمكّننا من إدارة البرامج مُسبقة الترجمة بما في ذلك عمليات التثبيت والحذف، وهو يعادل نظام إدارة الحزم في دبيان Deb أو نظيره RPM في RedHat. وبالمقارنة مع استخدام نظام المنافذ لبناء الحزم من المصدر على FreeBSD؛ فإن استعمال الحزم المُترجمة يُعتبر بديلًا أكثر سهولة وسرعة وملائمًا للعديد من الحالات، باستثناء أنها ليست بمرونة نظام المنافذ للبناء من المصدر نظرًا إلى عدم إمكانية تخصيص التحزيم، لذا ففي تلك الحالات التي تحتاج فيها إلى خيارات مُحدّدة أثناء عملية الترجمة يجدر بك بناء البرنامج من المصدر عوضًا عن استخدام الحزم الثنائية الجاهزة. نستعرض في هذا الدرس أساليب إدارة الحزم على نظام FreeBSD 10.1، بما في ذلك تثبيت وإزالة الحزم وعدد آخر من المهام ذات الصلة. المتطلباتفي هذا الدرس نحن نحتاج إلى إمكانية استخدام صلاحيات الجذر root على خادوم FreeBSD، إما عن طريق تسجيل الدخول كمستخدم جذر أو باستعمال مستخدم آخر يملك صلاحيات الجذر عبر الأمر sudo. إذا كنت تنوي الولوج كجذر إلى خادومك فعليك إهمال البادئة sudo كلّما وردت في الأمثلة هنا. كيفية تركيب الحزم باستخدام Pkgإذا كنت تعرف اسم الحزمة التي ترغب بتثبيتها فما عليك سوى استخدام الأمر pkg مع الخيار install بالشكل التالي: sudo pkg install packageلتثبيت عدّة حزم دفعةً واحدة افصل بين أسمائها بمسافات فارغة: sudo pkg install package1 package2 ...مثلًا؛ لتركيب خادوم الويب الشهير Nginx باستخدام pkg: sudo pkg install nginxيُطلق الأمر السابق عملية تثبيت الحزمة المطلوبة. حيث يتحقق النظام في البداية من تاريخ تحديث فهرس مستودع الحزمة، فإذا كان مطابقًا لأحدث نسخة يبحث عن الحزمة المطلوبة ويضعها ضمن قائمة مع اعتمادياتها المطلوبة (في حال كانت موجودة) ليُظهر لك أخيرًا رسالة تأكيديّة. في مثالنا هنا لا تحتاج حزمة nginx لأية اعتماديات أخرى، نكتب y للموافقة على رسالة التأكيد: New packages to be INSTALLED: nginx: 1.6.2_1,2 The process will require 654 KB more space. 244 KB to be downloaded. Proceed with this action? [y/N]: yبعد ذلك يبدأ pkg بجلب الحزم(ة) اللازمة من الخوادم ثم تركيبها على النظام. بعض الحزم قد تعرض معلومات "ما بعد التثبيت" أو تعليمات بشأن استخدام البرنامج، احرص على تطبيق أية ملاحظات مذكورة هنا بعد الانتهاء. إذا كنت تستخدم صدفة tcsh الافتراضية أو csh، فلا تنس إعادة بناء قائمة الحزم الثنائية في PATH بواسطة الأمر: rehashمن الجدير بالذكر الإشارة إلى أن خدمات التطبيقات لن تعمل بشكل تلقائي بعد تركيب حزمها، بدلًا من ذلك نحن نحتاج تفعيلها بشكل يدوي، وهذا ما سنتحدّث عنه في الفقرة التالية. كيفية تشغيل الخدماتعند تثبيت حزمة لخدمة ما في FreeBSD فإنها تكون مُزوّدة بسكربت تهيئة الخدمة مُضمّنًا على المسار usr/local/etc/rc.d/، وفي مثالنا هنا لتركيب Nginx والتي تعمل كخدمة فإن سكربت تشغيلها يُدعى nginx. انتبه لاستبدال هذا الاسم بما يتناسب مع الخدمة التي قمتَ بتثبيتها أثناء تنفيذ الأوامر التالية. لتوضيح ما يحدث عند محاولتك بدء خدمة لم تقم بتفعيلها لنجرّب استخدام الأمر service لبدء خدمة nginx (أو الخدمة التي قمتَ بتثبيتها في حالتك) بعد تركيبها فورًا ودون تفعيلها: sudo service nginx startلن تبدأ الخدمة بالطبع، بل ستحصل على رسالة خطأ شبيهة بما يلي: Cannot 'start' nginx. Set nginx_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'.لتفعيل الخدمة؛ اتّبع المسار الموضّح في الرسالة السابقة وأضف السطر التالي إلى الملف etc/rc.conf/: nginx_enable="YES"تستطيع فعل ذلك إما بتحرير الملف etc/rc.conf/ عبر محرّر نصي (مثل vi) وإضافة السطر السابق، أو باستعمال الأداة sysrc لتحديث الملف كما يلي: sudo sysrc nginx_enable=yesهكذا تكون الخدمة قد فُعّلت وسوف تبدأ بالعمل عند إعادة إقلاع النظام، أو باستخدام الأمر start لتشغيلها في الحال: sudo service nginx startإذا كنتَ ترغب بتشغيل الخدمة لمرّة واحدة فقط ودون تفعيلها يمكنك استخدام الأمر onestart والذي سيُطلق سكربت بدء تشغيل الخدمة في الحال لكن بدون إعادة تشغيلها عند كل إقلاع للنظام: sudo service nginx onestartيُستفاد من الأمر onestart في تجريب إعدادات ضبط الخدمة قبل تفعيلها. كيفية عرض معلومات الحزم بواسطة Pkgلاستعراض معلومات عن الحزم المُثبّتة يمكنك استعمال الأمر pkg info: pkg info package_nameيطبع الأمر السابق معلومات متنوعة حول الحزمة المُختارة بما في ذلك وصفها، الخيارات التي تُرجمت وفقها، وقائمة بالاعتماديات التي تحتاجها للعمل. كيفية ترقية الحزم المثبتة بواسطة Pkgلتثبيت الإصدارات الأحدث من البرامج التي تمّ تركيبها من قبل يمكن تنفيذ الأمر التالي: sudo pkg upgradeيُقارن الأمر السابق أرقام إصدارات الحزم المثبتة بتلك الموجودة في المستودعات ويُعيد قائمة بأسماء الحزم التي يمكن تحديثها: Updating FreeBSD repository catalogue... FreeBSD repository is up-to-date. All repositories are up-to-date. Checking for upgrades (2 candidates): 100% Processing candidates (2 candidates): 100% The following 2 packages will be affected (of 0 checked): Installed packages to be UPGRADED: python27: 2.7.8_6 -> 2.7.9 perl5: 5.18.4_10 -> 5.18.4_11 The process will require 2 MB more space. 23 MB to be downloaded. Proceed with this action? [y/N]: y لبدء عملية الترقية أجب بنعم y على سؤال التحقّق السابق. كيفية حذف الحزم بواسطة Pkgإذا كنت تعرف اسم الحزمة التي ترغب بحذفها يمكنك استخدام الأمر pkg مع الخيار delete كما يلي: sudo pkg delete package_nameلحذف عدد من الحزم دفعةً واحدة افصل بين أسمائها بمسافات فارغة: sudo pkg delete package1 package2 ...كمثال على ذلك لنجرّب حذف حزمة Nginx التي قمنا بتثبيتها للتو: sudo pkg delete nginxيُعيد الأمر السابق رسالة تحقّقية تشبه التالي: Checking integrity... done (0 conflicting) Deinstallation has been requested for the following 1 packages (of 0 packages in the universe): Installed packages to be REMOVED: nginx-1.6.2_1,2 The operation will free 654 KB. Proceed with deinstalling packages? [y/N]: yلحذف الحزمة السابقة أجب بنعمy` على السؤال السابق. كيفية إزالة الاعتماديات غير المستخدمةعند حذف حزمة ما فإن الاعتماديات الخاصة بها (في حال وجودها) لن تُحذف بشكل تلقائي معها. لحذف الحزم التي لم تعد لازمة لأية حزمة مُثبتة نفّذ الأمر التالي: sudo pkg autoremoveيُعيد الأمر السابق قائمة بالحزم التي ستُحذف مع رسالة تحقّقية، أجب بنعم y إذا كنت ترغب بحذف هذه الحزم. كيف تجد حزمة ما بواسطة Pkgللبحث عن حزمة ما ضمن الحزم المتوفرة في المستودعات نستخدم الأمر pkg search. البحث بواسطة الاسمالطريقة الأولى للبحث عن حزمة ما هي استخدام اسمها مع الأمر التالي: pkg search package_nameعلى سبيل المثال للبحث عن الحزم باسم "nginx" نستخدم الأمر التالي: pkg search nginxيطبع الأمر السابق قائمة بالحزم التي يحتوي اسمها على nginx مُضمنة بأرقام الإصدارات: nginx-1.6.2_1,2 nginx-devel-1.7.8 p5-Nginx-ReadBody-0.07_1 p5-Nginx-Simple-0.07_1 p5-Test-Nginx-0.24 إذا كنت ترغب بقراءة المعلومات التفصيلية عن هذه الحزم استعمل الخيار f-: pkg search -f package_nameيُعيد الأمر السابق معلومات الحزم التي يطابق اسمها الاسم المُحدّد في الأمر. البحث بواسطة الوصفإذا لم تكن متأكدًا من اسم الحزمة التي ترغب بتثبيتها عندها يمكنك البحث في وصف الحزم المتوفرة في المستودعات من خلال الخيار D- والذي لا يراعي حالة الأحرف بشكل افتراضي: pkg search -D patternعلى سبيل المثال للبحث عن جميع الحزم التي تضم كلمة "java" في وصفها نستعمل الأمر التالي: pkg search -D javaيطبع هذا الأمر أسماء جميع الحزم المتوفرة والتي يحتوي وصفها على الكلمة المُحدّدة. كيف تتعلم المزيد حول استخدام PkgPkg هي أداة عالية المرونة حيث يمكن استخدامها بعدّة طرق أخرى لم نُشر إليها في هذا الدرس. ولحسن الحظ فإنها مزودة بأسلوب سهل للإطلاع على الأوامر والخيارات التي تدعمها وطريقة تنفيذها، وذلك من خلال: pkg helpللقراءة أكثر حول أمر ما من الأوامر التي تتضمنها الأداة يمكننا أن نكون أكثر تحديدًا بكتابة: pkg help subcommandفعلى سبيل المثال للتعلّم أكثر حول استخدامات الأمر pkg search نُنفّذ: pkg help searchهذا سيأخذنا مباشرة إلى القسم الخاص باستخدام pkg search من دليل الاستعمال man الخاص بـ pkg. الخلاصةإلى هنا يُفترض أنك تعلمت ما يكفي من مهارات لاستخدام pkg في إدارة الحزم الثنائية على نظام FreeBSD ضمن خادومك. ترجمة -وبتصرف- للمقال: How To Manage Packages on FreeBSD 10.1 with Pkg لصاحبه: Mitchell Anicas.
  12. تُعتبر كلمات المرور والمصادقة من المفاهيم الأساسية التي يتعامل معها كل مستخدم لبيئة غنو لينكس، إذ تتسع هذه المواضيع لعدد من أدوات وملفات الضبط المختلفة. نستكشف في هذا الدرس بعض هذه الملفات الأساسية مثل etc/passwd/ وetc/shadow/ إضافة إلى أدوات ضبط المصادقة مثل passwd و adduser. سنناقش هذه المواضيع ونطبّق الأمثلة على نظام Ubuntu 14.04، إلا أنه سيكون بإمكانك العمل على أي توزيعة لينكس حديثة بطريقة مماثلة تمامًا. ما هو ملف "etc/passwd/"؟الملف الأول الذي سنبدأ معه يُدعى etc/passwd/، ورغم اسمه فهو لا يخزّن كلمات المرور في واقع الحال. فيما مضى كان هذا الملف يُخزّن كلمات المرور المُشفّرة hashed passwords لكل مُستخدم على النظام، إلا أنّه ولأسباب أمنيّة تم نقل هذه المسؤولية لاحقا إلى ملف منفصل. دعونا نلقي نظرة على محتويات الملف etc/passwd/: less /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh . . . أول ما يمكننا ملاحظته هو إمكانية الوصول لهذا الملف من قبل المستخدمين العاديين (أي الذين لا يملكون صلاحيات الجذر root)، ولأن الجميع قادر على قراءة هذا الملف فقد تمّ نقل معلومات كلمات المرور إلى ملف آخر. كيف تقرأ ملف "etc/passwd/"؟كل سطر في هذا الملف يحتوي على معلومات الولوج لمستخدم فريد على نظام التشغيل، بعض هذه الحسابات قد تكون مُنشأة لاستعمالها من قبل خدمات daemons (الخدمات التي تعمل بالخلفية). لنلقي نظرة على أحد هذه الأسطر لنرى ما هي المعلومات التي يحتويها: root:x:0:0:root:/root:/bin/bash تُفصل حقول المعلومات ضمن هذا السطر بعلامة النقطتين (:)، وهكذا يكون لدينا سبعة حقول في كل سطر من أسطر الملف etc/passwd/، وهي هنا: root: اسم مستخدم الحساب. x: تعبير مُرمّز للدلالة على معلومات كلمة المرور والتي يتم الحصول عليها من ملف etc/shadow/. 0: هوية المستخدم أو رقم ID الخاص به وهو مُعرفّه على نظام التشغيل. المستخدم الجذر يملك رقم ID مساويًا للصفر على الدوام. 0: هوية المجموعة أو رقم ID الخاص بالمجموعة التي ينتمي لها المُستخدم بشكل افتراضي. كذلك فإن رقم ID لمجموعة الجذر هو 0 دومًا. root: حقل الملاحظات، يُستخدم هذا الحقل لوصف المستخدم أو وظيفته، كما يمكن أن يشمل معلومات الاتصال به أو وصف الخدمة التي أُنشئ من قبلها. root/: الدليل الرئيسي، للمستخدمين القياسيين غالبًا ما يكون هذا الدليل هوhome/username/، أما للمستخدم الجذر فهو root/. bin/bash/: يضمّ هذا الحقل مسار الصدفة شِل shell الخاصة بالمستخدم أو الأمر الذي سيُنفّذ عقب ولوج المستخدم. وهكذا كلّما أضفت حساب مستخدم جديد باستعمال أوامر مثل adduser و useradd، أو كلما قمت بتثبيت المزيد من الخدمات؛ سينمو هذا الملف، حيث ستُضاف معلومات المستخدم الجديد إلى سطر آخر في نهاية هذا الملف. في معظم الحالات لا يجب أن تُحرّر هذا الملف بشكل يدوي، حيث هناك عدّة أدوات لذلك يمكن من خلالها ضمان سلامة التعديل وصحته. ما هو ملف "etc/shadow/"؟تُخزّن البيانات الفعلية لكلمات المرور في ملف يُدعى etc/shadow/. ومع ذلك فهو لا يحتوي على النصّ الصرف لكلمات المرور، بل يستخدم دالة كمفتاح اشتقاق key derivation لإنشاء تشفيرٍ لها، وهو ما يُخزّن فعليًا ضمن الملف. مفتاح الاشتقاق هو عبارة عن خوارزمية تُنشئ دومًا تشفيرًا واحدًا عندما تُعطى نفس المُدخل. تُطبّق هذه الخوارزمية على كلمة المرور عندما تُعطى أثناء تسجيل الدخول وتقارن القيمة الناتجة عن ذلك مع القيمة المُخزّنة ضمن هذا الملف. يجدر الانتباه إلى أن المُستخدمين الذين لا يملكون صلاحيات الجذر غير قادرين على قراءة محتويات هذا الملف وذلك خلافًا لـ etc/passwd/. كيف تقرأ ملف "etc/shadow/"؟لنلقي نظرة على محتويات الملف etc/shadow/ عبر الأمر التالي: sudo less /etc/shadow root:$6$mJD3Rsj4$xUa7jru6EEGTXnhwTfTT26/j8M5XiQvUl6UH32cfAWT/6W9iSI5IuIw5OOw4khwrsOHPyMwfCLyayfYiVdhAq0:15952:0:99999:7::: daemon:*:15455:0:99999:7::: bin:*:15455:0:99999:7::: sys:*:15455:0:99999:7::: sync:*:15455:0:99999:7::: games:*:15455:0:99999:7::: man:*:15455:0:99999:7::: . . . كما في etc/passwd/ يُعرّف كل سطر معلومات أحد المستخدمين وتفصل علامة النقطتين (:) بين الحقول المختلفة. ملاحظة: تُشير علامة النجمة (*) في الحقل الثاني من بعض الأسطر أعلاه إلى أن حساب المستخدم غير قابل لتسجيل الدخول، وهو ما يعني ارتباط الحساب بأحد الخدمات المُثبّتة على النظام. دعونا نلقي نظرة على أحد تلك الأسطر: daemon:*:15455:0:99999:7:::لدينا في هذا السطر تسع حقول وهي: daemon: اسم مُستخدم الحساب. *: تجد هنا كلمة المرور المُشفّرة (يمكن أن ترى مثالًا عنها في السطر الخاص بالمستخدم الجذر من الملف أعلاه). وكما قلنا للتوّ فإن رمز النجمة تعني أنه لا يمكن استخدام هذا الحساب لتسجيل الدخول، وبالتالي لا يملك كلمة مرور أصلًا. 15455: آخر مدّة تم تغيير كلمة المرور فيها، تُقاس هذه القيمة بالأيام انطلاقًا من بداية "عصر" يونكس، وهو 1 يناير 1970. 0: أصغر عُمر لكلمة المرور، وهي المدّة التي يجب أن تفصل بين تحديثين متتابعين لكلمة المرور، القيمة 0 تعني عدم وجود أي قيود. 99999: أطول عُمر لكلمة المرور، وهي المدة التي يجب أن تُغيّر كلمة المرور بعد انقضائها. القيمة 99999 تعني أنّ كلمة المرور الحالية لا نهائية المدّة. 7: تُمثّل أيام التحذير قبل انتهاء صلاحية كلمة المرور وذلك في حال كانت الخانة السابقة تحمل قيمةً ما، فإن المُستخدم سيحصل على تنبيه لتغيير كلمة المرور خلال هذه الأيام. [فارغة]: آخر ثلاث حقول فارغة هنا، يُستخدم الأول للإشارة إلى المُهلة الإضافية التي تلي انتهاء المدة المحدّدة بالخانة السابقة حيث سيلغى تفعيل الحساب بعدها. الحقل الثامن يُمثّل مدّة إلغاء الحساب بالأيام منذ تاريخ بداية نظام يونكس (أي منذ 1-1-1970). الحقل التاسع فارغ دومًا ويُترك لأية استعمالات مستقبلية.كيف تغير كلمات المرور؟يمكن تعديل كلمات مرور المستخدمين بواسطة الأداة passwd. وبشكل افتراضي فإن هذا الأمر سيغيّر كلمة مرور حساب المستخدم الحالي دون أن يتطلب ذلك صلاحيات الجذر. passwd أما إذا رغبت بتعديل كلمة مرور حساب آخر فستحتاج حينها إلى صلاحيات الجذر، حيث يمكنك استخدام الصيغة التالية: sudo passwd username ستطلب منك الصدفة كلمة مرور الجذر، ثم ستسألك تعيين كلمة مرور جديدة للمستخدم وتأكيدها مرةً ثانية. ولو قارنت القيمة المُشفرة و المخزّنة في ملف etc/shadow/ لكلمة مرور هذا المستخدم فستلاحظ تغيّرها بعد تنفيذ الأمر السابق. كيف تنشئ مستخدما جديدا؟يمكن إنشاء حسابات مستخدمين جديدة عن طريق عدد من الأدوات، ولعلّ أسهلها adduser، وفي أنظمة Ubuntu تُشير هذه الأداة إلى سكربت بيرل والذي يتولى عملية إضافة مستخدم جديد. يمكن استدعاء السكربت من خلال: adduser demo Adding user `demo' ... Adding new group `demo' (1000) ... Adding new user `demo' (1000) with group `demo' ... Creating home directory `/home/demo' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for demo Enter the new value, or press ENTER for the default Full Name []: test Room Number []: room Work Phone []: work phone Home Phone []: home phone Other []: other Is the information correct? [Y/n] ستطلب منك الأداة الإجابة على مجموعة من الأسئلة لملئ المعلومات اللازمة عن المستخدم في ملفي etc/passwd/ و etc/shadow/. يمكنك بعد ذلك أن ترى المُدخل الذي تمت إضافته إلى الملف etc/passwd/ عن طريق الأمر: tail -1 /etc/passwd demo:x:1000:1000:test,room,work phoneme phone,other:/home/demo:/bin/bash وكما ترى فقد عُبّئت الحقول كما هو متوقع، باستثناء أننا حصلنا على حقل ملاحظات أكثر فائدة. بنفس الطريقة يمكن تنفيذ الأمر التالي لرؤية التعديلات التي أدخلت على ملف etc/shadow/: sudo tail -1 /etc/shadowdemo:$6$XvPCmWr4$HXWmaGSeU5SrKwK2ouAjc68SxbJgUQkQ.Fco9eTOex8232S7weBfr/CMHQkullQRLyJtCAD6rw5TVOXk39NAo/:15952:0:99999:7:::الخلاصةكما ترى فإنه يمكنك تعديل معلومات تسجيل الدخول لأي مستخدم على نظام التشغيل الخاص بك بأسلوب سهل من خلال هذه الأدوات البسيطة. تجدر الإشارة أخيرًا إلى أهمية اختبارك لقابلية تسجيل الدخول مجددًا عقب أي تغيير تجريه، كما أنه من الضروري الإبقاء على صلاحيات ملفات الضبط السابقة كما هي للمحافظة على الأمان والقدرة على تأدية المهام. ترجمة -وبتصرف- للمقال How To Use passwd and adduser to Manage Passwords on a Linux VPS لصاحبه Justin Ellingwood. حقوق الصورة البارزة: Designed by Freepik.
  13. FreeBSD هو نظام تشغيل شبيه بيونكس Unix-like حرّ ومفتوح المصدر يشيع استخدامه على الخوادم. يتشارك FreeBSD والأنظمة الأخرى المبنية على BSD قواسم عدّة مع أنظمة مثل لينكس Linux؛ وفي المقابل تبقى هناك نقاط اختلاف مهمة تُميّز بين هاتين العائلتين. سنناقش في هذا الدرس بإيجاز بعض القواسم المشتركة بين FreeBSD و لينكس، ثم سنتحدث بشكلٍ أكثر استفاضة عن الفروقات المهمّة بينهما. تنطبق معظم النقاط الواردة في هذا الدرس على باقي أنظمة BSD أيضًا رغم تركيزنا على FreeBSD فقط. السمات المشتركة بين FreeBSD و لينكسقبل أن نبدأ بدراسة نقاط الاختلاف بين FreeBSD و لينكس دعونا نتحدث بصورة عامة عن القواسم المشتركة بينهما. ينتمي كلا النظامين إلى دائرة البرمجيات الحرّة ومفتوحة المصدر؛ حيث يمكن للمستخدمين الإطلاع على الشيفرة المصدرية، التعديل عليها والمساهمة في تطويرها، وذلك رغم استخدام كل منهما لأنواع رخص مختلفة (المزيد عن هذا لاحقًا). ويُعتبر كلًا من FreeBSD و التوزيعات المبنية على غنو لينكس من عائلة الأنظمة الشبيهة بيونكس Unix-like أساسًا، حيث يمتلك FreeBSD جذورًا شديدة الصلة بنظام يونكس في الماضي، في المقابل أُنشئ غنو لينكس من الصفر كبديلٍ حرّ للأنظمة الشبيهة بيونكس. هذا الترابط يُعطينا لمحة عن أسلوب تصميم النظامين، كيفيّة تفاعل المكوّنات بين بعضها البعض، والتوقعات العامة حول كيف يجب أن يبدو النظام وكيف تُنجز المهام عليه. لهذه الاعتبارات فإن FreeBSD وتوزيعات لينكس المختلفة تتقاسم الكثير من الأدوات والتطبيقات. ورغم أنّ بعض الحالات تُحتّم وجود اختلافات في إصدارات هذه البرامج بين النظامين، إلا أنه يمكن وبسهولة أكثر تمرير البرامج بينهما مما لو كنّا نتعامل مع أنظمة غير شبيهة بيونكس non-Unix. بعد أخذ هذه النقاط بعين الاعتبار ننتقل الآن إلى مناقشة المجالات التي تختلف فيها هاتين العائلتين من أنظمة التشغيل، وكلي أمل أن يساعدك الإطلاع على القواسم المشتركة السابقة بفهم أكثر دقّة لنقاط الاختلاف التالية. الاختلاف في الرخصأحد الفروق الأساسية بين نظامي FreeBSD و لينكس هي مسألة التراخيص المُستخدمة. إذ تُرخّص نواة لينكس، تطبيقات غنو الأساسيّة GNU-based، والعديد من البرامج المكتوبة لبيئة لينكس أساسًا تحت رخصة GPL أو رخصة غنو العموميّة، والتي غالبًا ما توصف بأنها رخصة “حقوق متروكة copyleft”، حيث تسمح بحرية عرض، توزيع، وتعديل الشيفرة المصدريّة للبرنامج مع مطالبة الأعمال المشتقة منها الالتزام بذات الرخصة. وفي المقابل يُرخّص نظام FreeBSD بما في ذاك النواة وأية أدوات تمّ إنشاؤها من قبل مُساهمي FreeBSD تحت "رخصة BSD"، والتي توصف بأنها أكثر تساهلًا من GPL حيث لا تطلب من الأعمال المشتقّة استخدام الرخصة عينها. وهذا يعني بأنّ أي شخص أو منظمة يمكنها استخدام أو توزيع أو تعديل برامج BSD دون الحاجة لإعادة المساهمات إلى المنبع أو إتاحة الشيفرة المصدرية لتغييراتها تلك. الشروط الوحيدة المفروضة هي إرفاق نسخة من رخصة BSD مع الشيفرة المصدرية أو مع وثائق العمل المشتق (بناءً على أسلوب الإصدار) إضافةً إلى تنويه حدود المسؤولية. على العموم تُعتبر رخصة BSD قصيرة للغاية ويمكنك الإطلاع على محتواها من هنا. يميل المستخدم في اختياره لأحد هذين الترخيصين بناء على الفلسفة التي يتبعها واحتياجاته في العمل، فرخصة GPL تهتم بتعزيز المشاركة والإبقاء على نظام برمجي مفتوح مُلزمةً الأعمال المشتقة بنفس الترخيص وذلك فوق أية اعتبارات أخرى؛ لذا تحرص البرمجيات الاحتكارية بشدّة ألا تضم أجزاء مُرخّصة وفق GPL. من ناحية أخرى تسمح رخصة BSD بتضمين برامجها في إصدارات احتكارية مغلقة المصدر؛ وهذا ما يجعلها أكثر جاذبية للعديد من الشركات والأفراد التي تأمل بتحقيق دخل من بيع البرامج الخاصة والتكتم على المصدر. إن فهم هاتين الفلسفتين يساعدنا على ادارك ما يقف وراء خيارات المطوّرين والتفضيلات التي يميلون إليها، ويبقى بالتأكيد لكل فلسفةٍ ما يميزها عن الأخرى. نشأة FreeBSDمن الفروق المهمّة بين نظامي FreeBSD و لينكس هو تاريخ نشأة كل واحدٍ منهما، فإلى جانب الاختلافات في التراخيص التي ناقشناها للتوّ، لعل هذا هو أكبر مؤثّر على اختيار المطورين لهذه الفلسفة أو تلك. كتب لينوس تورفالدز النواة لينكس بدءًا من عام 1991 أثناء دراسته في جامعة Helsinki في فنلندا كهواية مستخدمًا حاسوبه الشخصي العامل بنظام MINIX، لكن وبسبب القيود المفروضة على استخدام وتطوير MINIX كتب لينوس بديلًا له. بإضافة نواة لينوس مع الكثير من مكونات النظام المكتوبة من طرف GNU حصلنا على نظام التشغيل غنو/لينكس الذي يملك عددًا من خصائص الأنظمة الشبيهة بيونكس على الرغم من أنه لم يُكتب اعتمادًا على نسخة سابقة من يونكس؛ إذ انطلق لينوس مع نواته بدءًا من الصفر ممّا أورث المشروع اختلافاتٍ أيضًا من الناحية التصميمية عن تلك النظم التي تربطها مع يونكس علاقة أوثق. في المقابل يرتبط FreeBSD مع يونكس بصلات مباشرة. حيث أُنشئ BSD أو توزيعة برمجيات بيركلي كإحدى توزيعات نظام التشغيل يونكس في جامعة كاليفورنيا في بيركلي، والذي أضاف عددًا من الميزات على نظام التشغيل يونكس المملوك آنذاك لشركة AT&T مع رخصة تسمح بالتعديل والتحسين. في وقتٍ لاحق اتُّخِذ قرار لمحاولة استبدال أكبر جزء ممكن من نظام التشغيل الخاص بـ AT&T مع بدائل حرّة ومفتوحة المصدر بحيث لا تُجبر المستخدمين الحصول على رخصة من AT&T لاستعمال BSD. في نهاية المطاف تمّ إعادة كتابة جميع المكونات المعتمدة على رخصة AT&T وإتاحتها برخصة BSD وتطويعها لتعمل على معالجات i386 والتي صدرت باسم “386BSD”. لاحقًا اشتقت FreeBSD من هذه الإصدارة في محاولة للحفاظ على عملية التطوير، دعمها وتحسينها، فيما بعد أعيد إصدار FreeBSD بناء على النسخة المسماة BSD-Lite والتي لا تحتوي على أية شيفرة من يونكس المملوك لـ AT&T نتيجة إحدى الدعاوي القضائية وللتخلص من كافة مشاكل الترخيص. خلال هذه العملية الطويلة ومتعدّدة المراحل من الاشتقاق غدا FreeBSD غير مرتبط بشروط الترخيص المُقلقة. حيث ركّز المطوّرون على كتابة نظام يستفيد ويستثمر في أسلوب يونكس لإنجاز المهام؛ يعود ذلك ربّما إلى الافتراض الشائع بأنّ FreeBSD هو النسخة المجانية من يونكس، وقد أثّرت هذه الجذور على عمليات التطوير اللاحقة وهي التي تقف اليوم وراء بعض النقاط التي سنتطرّق إليها. فصل جوهر نظام FreeBSD عن التطبيقات الإضافيةالفارق الرئيسي من الناحية التصميمية بين FreeBSD و توزيعات غنو/لينكس يكمن في مجال scope النظام. حيث طوّر فريق FreeBSD نظام التشغيل والنواة كوحدة واحدة متجانسة، بينما يشير “لينكس” من الناحية الفنيّة إلى النواة فقط، والتي تُضاف إلى باقي المكونات الأخرى متنوعة المصادر لتشكيل ما يعرف بنظام غنو/لينكس. ورغم أنّ هذا يبدو كفارقٍ صغير للوهلة الأولى، إلا أنّه يؤثّر في الواقع على أسلوب تفاعلك مع النظام وإدارته، ففي لينكس تضم التوزيعة مجموعة مختارة من الحزم بعد التأكد من توافقها معًا بشكل جيد، وبكل الأحوال فإن معظم المكوّنات الأخرى تأتي من قبل مجموعة واسعة من المصادر والمطوّرين وموزّعي البرامج والمشرفين والتي تتضافر جهودهم معًا لضمان عمل النظام بشكل صحيح. بهذا المعنى، لا تختلف كثيرًا المكونات الأساسية للنظام عن الحزم الاختيارية المتاحة من خلال المستودعات الإضافية، حيث تُستخدم أدوات إدارة الحزم نفسها مع مجموعتي المكونات هذه بنفس الطريقة تمامًا. قد تُخصّص التوزيعة مستودعات مختلفة للحزم تبعًا للفِرق المسؤولة عن صيانتها (المستودعات الأساسية، الإضافية، وتلك الخاصة بالمجتمع)، حيث يتسنى لفريق التطوير الأساسي التركيز على مجموعة الحزم المتاحة تحت المستودعات الأساسيّة فقط، إلا أن هذا الفصل بغرض تنظيمي ولا يؤدّي إلى أية اختلافات في إدارة الحزم من وجهة نظر المستخدم النهائي. في المقابل يُطوّر فريق FreeBSD لبّ نظام التشغيل بأكمله بما في ذلك النواة ومجموعة البرامج الأساسيّة التي كُتبت من قبلهم مما يجعل النظام يبدو كوحدة واحدة متجانسة. لذا فليس من البساطة استبدال أحد المكونات ببديل آخر خارجي بسبب التجانس والتكامل بين جميع المكونات؛ وهذا ما يسمح لفريق FreeBSD إدارة نظام التشغيل بأكمله عن قرب وضمان التوافق المناسب بين أجزائه والتنبؤ بسلوكه ومشاكله. كما تُعتبر البرامج الأساسيّة المُضمّنة مع لبّ نظام التشغيل معزولة تمامًا عن المكونات الاختياريّة الأخرى، حيث يقدّم فريق FreeBSD مجموعة كبيرة من البرامج الإضافية، تمامًا كما مع توزيعات لينكس، إلا أنّ إدارتها تبقى منفصلة، فبينما يُحدّث النظام الأساسي كوحدة واحدة، يتم تحديث البرامج الاختيارية بشكل مستقل. كيف تتشكّل الإصدارات؟تتشكّل إصدارات لينكس نتيجة دمج مجموعة كبيرة ومتنوعة من البرامج من مختلف المصادر مع إدخال بعض التعديلات عند الحاجة، ويُقرّر مشرفو التوزيعة المكونات التي يريدون تضمينها في وسائط التثبيت وتلك التي يرغبون بإتاحتها عبر المستودعات الأخرى، بعد اختبار توافق المكونات مع بعضها يتم إصدار التوزيعة مُضمّنةً بالبرمجيات المُختبرة. ذكرنا في الفقرة السابقة: يُطوّر فريق FreeBSD الجزء الأكبر من نظام التشغيل FreeBSD. بشكل رئيسي يُنتج الفريق لبّ نظام التشغيل الأساسي. تُعتبر البرمجيات الأساسية وحدة متجانسة. تقودنا هذه النقاط إلى النهج المُتبع في إصدار البرامج هنا والمختلف عن ما تتبعه معظم توزيعات لينكس، حيث يُنظّم FreeBSD المهام على مستوى نظام التشغيل محتفظًا بكل المكونات الأساسية في مستودعٍ واحد للشيفرة المصدرية، الأمر الذي يُفرز عددًا من النتائج المهمة. في البداية، وبسبب تطوير جميع الأدوات جنبًا إلى جنب في مستودعٍ واحد، يتشكّل الإصدار ببساطة عن طريق اختيار إحدى تنقيحات فروع المستودع، وهذا يشبه الطريقة التي تصدر بها معظم البرامج المستقرة حيث يتم اختيارها من شيفرة أساسية منظمة. وبما أنّ نظام التشغيل الأساسي بأكمله تحت التطوير النشط، هذا يعني بأنّه يمكن للمستخدمين “تتبّع track” فروع أو درجات مختلفة من الاستقرار اعتمادًا على درجة الاختبار التي يفضّلون عندها استخدام النظام، وهكذا فالمستخدمون ليسوا بحاجة لانتظار المطورين ريثما يصادقوا على التغييرات الجديدة كي تصبح جاهزة للاستخدام على أنظمة تشغيلهم. يشبه هذا إلى حدٍ ما تتبّع مستخدمي لينكس لمستودعات مختلفة من ناحية الاستقرار ورقم الإصدار، ففي لينكس يمكنك تتبّع مستودع حزمة ما، بينما في FreeBSD أنت تتبع فرع من مستودع مركزي. الفروق البرمجيّة وتصميم النظامسنناقش فيما تبقى من نقاط الفروق المتعلقة بالبرمجيات نفسها والصفات العامة لكل نظام. الحزم المدعومة والتثبيت من المصدرأحد الفروق الرئيسية بين نظام FreeBSD و معظم توزيعات غنو/لينكس من وجهة نظر المستخدم هي كم البرامج المتاحة والمدعومة بصيغة مُحزّمة أو كبناء من المصدر. ففي حين توفّر معظم توزيعات لينكس حزم البرامج مُترجمة فقط وجاهزة للتثبيت الفوري من المستودعات الرسميّة، فإن FreeBSD توفّر إضافة إلى ذلك نظام لبناء وتثبيت الحزم من المصدر، وهذا ما يتيح لك حريّة الاختيار بين تركيب الحزم مسبقة الترجمة بقيم افتراضية معقولة أو بناءها من المصدر وتخصيصها بما يلائم مع احتياجاتك من خلال نظام يُدعى المنافذ “ports”. يضم نظام المنافذ هذا مجموعة من البرامج التي يملك FreeBSD دليلًا عن كيفيّة بنائها من المصدر، تُتاح هذه البرامج في الدليل “/usr/ports” بشكلٍ هرمي مُنظّم حيث يمكن للمستخدمين من خلالها الوصول للبرامج. تضم هذه الأدلة عددًا قليلًا من الملفات والتي تُحدّد مواقع الملفات المصدريّة للبرامج، إضافةً لتعليمات الترجمة والتي تتيح بناء البرنامج بشكل متوافق مع FreeBSD. تُنتَج الإصدارات المُحزمّة سلفًا من البرامج من قبل نظام المنافذ أيضًا، ممّا يجعل FreeBSD توزيعة مصدرية بالدرجة الأولى مع توفير حزم مُترجمة للتسهيل، ويبقى بإمكانك تركيب البرامج من كلا النوعين أو أحدهما على نظام التشغيل الخاص بك ومن خلال نظام إدارة البرمجيات نفسه. الاختلاف في نهج تعديل البرامجإحدى الأشياء التي قد تبدو غريبة بعض الشيء على مستخدمي توزيعات لينكس الشائعة هو أن FreeBSD لا تُدخل تعديلات على البرامج بعد المنبع إلا للضرورة. حيث تجري العديد من توزيعات لينكس تعديلات متنوعة على البرامج بهدف جعلها أسهل في التواصل والتشبيك مع مكونات النظام الأخرى أو لتسهيل إدارتها، إحدى الأمثلة على ذلك هي إعادة هيكلة هرمية إعدادات خوادم الوِب الشائعة لجعل عملية ضبط الخوادم قياسيّة أكثر. وعلى الرغم من أن المستخدمين يرون هذه التعديلات مفيدة غالبًا، فهناك نقاط ضعف تُعيب هذا النهج، فهو على سبيل المثال يفترض معرفة ما هي الإعدادات الأفضل للمستخدمين، كما أنه يُصعّب التعامل مع البرنامج على المستخدمين القادمين من منصات أخرى بمقدار انحرافه عن مواصفات المنبع. يُعدّل مشرفو نظام FreeBSD البرامج بواسطة “رقع patches”، إلا أنّ هذه التعديلات غالبًا ما تكون أكثر تحفظًا مما تقوم به توزيعات لينكس, وهي تهدف بالعموم إلى إدخال تغييرات ضرورية لبناء الحزم من المصدر مع بعض الافتراضات المناسبة لضمان عملها بشكل سليم في بيئة FreeBSD. لا يتم تعديل ملفات ضبط البرامج والتي توضع مع ملفات النظام بشكل كبير عادةً، لذا فقد تحتاج إلى بعض العمل الإضافي لتأمين تواصل وتشبيك مناسب بينها وبين باقي مكونات النظام. نكهات FreeBSD للأدوات الشائعةإحدى الجوانب التي قد تسبب ارتباك لمستخدمي لينكس في نظام FreeBSD هو الاختلاف البسيط في أسلوب عمل الأدوات المعروفة مقارنة مع أنظمة لينكس. يحتفظ فريق FreeBSD بنسخهم الخاصة لعددٍ كبير من الأدوات الشائعة، فبينما تستورد توزيعات لينكس العديد من أدواتها من فريق GNU، فإن فريق FreeBSD يعتمد تنويعاته الخاصة من هذه الأدوات. في الحقيقة هناك عدّة أسباب لإتباع هذا النهج، أولها أنّ فريق FreeBSD مسؤول عن تطوير وصيانة لبّ نظام التشغيل الأساسي، إضافةً للتحكم في عملية تطوير هذه التطبيقات وإدراجها تحت رخصة FreeBSD إذا كانت ضرورية أو مفيدة. بعض هذه الأدوات ترتبط أيضًا بشكل وثيق وظيفيًا مع أدوات BSD و يونكس التي تم اشتقاقها عنها، وهذا خلافًا لأدوات GNU والتي تميل لعدم التوافق عكسيًا بين بعضها في العادة. غالبًا ما تُعبّر هذه الاختلافات عن نفسها في خيارات الأوامر أو صياغتها عمومًا. فإذا كنتَ ترغب بتنفيذ الأوامر بأسلوب ما موافق لما هو عليه الحال في أجهزة لينكس فإنّ هذا قد لا يعمل على خوادم FreeBSD، لذا فمن المهم دومًا أن تطلع على أدلة استخدام الأوامر man للتحقق من الخيارات المتاحة على أنظمة FreeBSD. صدفة شل Shell القياسيّةمن النقاط الأخرى التي يُفترض أن تسبب بعض الارتباك لمستخدمي لينكس في FreeBSD هو أنّ صدفة شل الافتراضية ليست bash وإنما tcsh، وهي النسخة المُحسنّة من csh المكتوبة بلغة C بواسطة BSD. عدم اختيار bash يعود إلى كونها إحدى مكونات نظام GNU وليس BSD. وبينما تعمل كلا الصدفتين بأسلوب متشابه في سطر الأوامر، فإن نصوص سكربت البرمجية لن تعمل في tcsh. إلا أنّه يمكن استخدام صدفة Bourne الأساسية والمعروفة بصدفة sh بهدف الحصول على قدر أعلى من الموثوقية لتجنب المشاكل المرتبطة بكل من tcsh و csh، علاوةً على سهولة تغيير الصدفة الافتراضية للنظام إلى صدفة bash إن كنتَ تفضّل ذلك. طبقات أكثر لنظام الملفاتذكرنا آنفًا أن FreeBSD يُميّز بين نظام التشغيل الأساسي والمكونات الاختيارية (المنافذ)، والتي يمكن تثبيتها أعلى تلك الطبقة، وهذا ما ينعكس على الأسلوب المُتبع في FreeBSD لتنظيم المكونات ضمن هياكل الملفات. توضع الملفات التنفيذية في لينكس عادةً ضمن الأدلة bin ،/sbin ،/usr/sbin/، و usr/bin/ بناءً على الغرض منها ومدى أهميتها لعمل الوظائف الأساسيّة، وبينما يُراعي FreeBSD هذا المعيار التنظيمي فإنه يُضيف مستوىً آخر من الفصل بين المكونات المثبتة كجزء من النظام الأساسي أو تلك الاختيارية (المنافذ)، حيث توضع أدوات النظام الأساسية في أحد الأدلة السابقة، وتُعتمد الأدلة usr/local/bin/ و usr/local/sbin/ لبرمجيات المنافذ. يضم الدليل usr/local/ بنية تعكس صيغة الأدلة / و usr/، وهو الدليل الجذر الرئيسي للبرامج المُثبتة من نظام المنافذ، وغالبًا ما يتم حفظ إعدادات المنافذ عبر ملفات تُخزن في usr/local/etc/، بينما تُخزّن ملفات الضبط الخاصة بالنظام الأساسي في etc/ كالمعتاد. وهذا يُسهّل معرفة إذا كان برنامج ما جزء من نظام المنافذ الأساسي ويُبقي نظام الملفات نظيف. كلمة أخيرةيتقاسم FreeBSD و لينكس العديد من الخصائص المشتركة، وإذا كنت قادمًا من إحدى توزيعات لينكس فمن المهم إدراك وفهم نقاط الاختلاف بينهما، وما يُميّز كل نظام عن الآخر، لمعرفة الأسباب التي دفعت بأنصار كل طرف إلى اختياره. التعامل مع FreeBSD كنظام تشغيل مستقل بدلًا من النظر إليه من خلال عدسة لينكس سوف يجنبك مشاكل عدّة في الفهم والتعامل ويساعدك على بناء تجربة أفضل عمومًا مع FreeBSD. آمل أن أكون قد تمكنت من شرح الاختلافات بين النظامين بشكل جيّد. ترجمة وبتصرف للمقال: A Comparative Introduction to FreeBSD for Linux Users لصاحبه Justin Ellingwood.
  14. Nginx (وتلفظ "engine x") هو خادوم ويب حرّ ومفتوح المصدر، يعمل كخادوم بروكسي معكوس reverse proxy للبروتوكولات HTTP ،POP3 ،SMPT ،IMAP، كتبه Igor Sysoe بهدف التركيز على المرونة، الخفة، وقلّة استهلاك الموارد وذلك بالمقارنة مع أباتشي Apache. المتطلبات كشرط مسبق لهذا الدرس سأفترض أنك انتهيت من الإعدادات الأولية على الخادوم الافتراضي الخاص بك VPS إضافةً إلى تثبيت Nginx بنجاح. الخطوة الأولى: تثبيت Apache Utilsنحتاج أولًا إلى الأداة htpasswd بهدف إنشاء وتحديث ملف لتخزين معلومات التوثيق الأساسية للمستخدم (الاسم وكلمة المرور)، htpasswd هي جزء من حزمة apache2-utils والتي يمكنك تركيبها بالأمر التالي: sudo apt-get install apache2-utils الخطوة الثانية: إنشاء مستخدمإنشاء ملف htpasswd. داخل دليل موقع الويب الخاص بك يؤمن بواسطة Nginx. يُنشئ الأمر التالي الملف اللازم ويضيف اسم مُستخدم مع كلمة مرور مُشفّرة له: sudo htpasswd -c /etc/nginx/.htpasswd exampleuser هنا ستطلب منك الأداة اختيار كلمة المرور: New password: Re-type new password: Adding password for user exampleuser وهكذا تكون صيغة ملف htpasswd. مشابهة لهذا: login:password خُذ بعين الاعتبار أن htpasswd يجب أن يكون قابلًا للوصول بواسطة حساب المستخدم الذي يُشغّل Nginx. الخطوة الثالثة: تحديث إعدادات Nginxيقع ملف ضبط Nginx ضمن الدليل /etc/nginx/sites-available/. أضف السطرين التاليين إلى آخره لحماية مسار النطاق الذي ترغب به: auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; يحمل السطر الثاني مكان ملف htpasswd. الخاص بموقعك. على سبيل المثال لنقل بأنّ ملف ضبط nginx لموقعنا هو /etc/nginx/sites-available/website_nginx.conf/؛ افتح الملف بواسطة المحرّر النصيّ الذي تفضّله: sudo vi /etc/nginx/sites-available/website_nginx.conf ثم أضف هذين السطرين إلى المسار التالي: server { listen portnumber; server_name ip_address; location / { root /var/www/mywebsite.com; index index.html index.htm; auth_basic "Restricted"; #For Basic Auth auth_basic_user_file /etc/nginx/.htpasswd; #For Basic Auth } } الخطوة الرابعة: أعد تحميل Nginxيتوجب علينا أخيرًا إعادة تحميل إعدادات Nginx لتأخذ التغييرات الجديدة موضع التنفيذ على موقع الوِب الخاص بنا. بعد ذلك جرّب الدخول إلى النطاق الذي تمّت حمايته بواسطة معلومات التوثيق السابقة: $ sudo /etc/init.d/nginx reload * Reloading nginx configuration... حاول الآن الدخول إلى موقعك أو إلى مسار النطاق المحمي وسيطلب منك المتصفح إدخال اسم المستخدم وكلمة المرور للمتابعة، ولن يكون بإمكانك استعراض المحتوى دون معلومات الولوج الصحيحة. رائع! أصبح لديك الآن نطاق ويب محمي باستخدام توثيق Nginx الأساسي. ترجمة -وبتصرف- للمقال How To Set Up HTTP Authentication With Nginx On Ubuntu 12.10. حقوق الصورة البارزة: Designed by Freepik.
  15. Ajenti هي لوحة تحكّم عبر الويب حرّة ومفتوحة المصدر يمكن استخدامها لتنفيذ مجموعة كبيرة ومتنوعة من مهام إدارة الخوادم، علاوةً على إمكانية تغطيتها لمجموعة أخرى من المهام عبر تركيب إضافات add-ons كإضافة Ajenti V والتي تسمح بإدارة عدّة مواقع من خلال لوحة تحكم واحدة. المتطلباتفي هذا الدرس ستحتاج إلى: عنوان نطاق domain مُسجّل ومربوط مع خادوم مُثبّت عليه لوحة التحكم Ajenti مع الإضافة Ajenti V (خلال الدرس سأستخدم النطاق example.com للتوضيح).لوحة التحكم Ajenti مُثبتة ومضبوطة بشكل صحيح مع الإضافة Ajenti V، يمكنك قراءة هذا الدرس لتثبيت Ajenti خطوة بخطوة.ضبط عنوان النطاقيُفترض هنا أنك تستطيع الوصول إلى لوحة تحكّم Ajenti الخاصّة بك عبر المسار https://panel.your_domain_name:8000، وقبل البدء بإعداد موقعك على الرابط http://your_domain_name وضبط عناوين البريد لنطاقك ينبغي علينا القيام ببعض تعديلات DNS الضرورية أولًا. حيث يتوجب علينا إضافة سجّلين (records) للتأكد من أن موقعك وعناوين البريد ستعمل كما ينبغي. إن كنت على DigitalOcean مثلا فاذهب إلى الرابط https://cloud.digitalocean.com/domains واضغط على زر View الأزرق (يبدو على شكل عدسة مُكبّرة) لعنوان النطاق الذي قمت بضبطته أثناء إعداد لوحة تحكم Ajenti وAjenti V. انقر على زر Add Record الأزرق ثم اختر MX، في مربع Enter Hostname النصيّ أدخل @ وأدخل الرقم 10 في مربع Enter Priority النصيّ، ثم اضغط على الزرق الأزرق Create MX Record. إذا كنتَ ستضبط عنوان النطاق الذي تستضيف عليه لوحة التحكم Ajenti فأنتَ بحاجة إلى إضافة سجل نصيّ TXT record. إن كان اسم نطاق على مزود خدمة آخر، فعليك الرجوع إلى أدلة المساعدة الخاصة بواجهة المزود لإضافة سجلّي MX و TXT بنفس الطريقة السابقة. على سبيل المثال إذا كان رابط دخول لوحة التحكم لديك يتمّ عبر المسار panel.example.com عليك حينها إضافة هذا السجل، أما لو كانت اللوحة تتبع لنطاق آخر (مثلا panel.otherdomain.com) فلستَ بحاجةٍ إلى شيء إذًا. لإضافة السجل النصيّ TXT record اضغط مجددًا على الزر الأزرق Add Record واختر TXT. في المربع النصيّ Enter Name أدخل @، وفي مربع Enter Text ألصق: v=spf1 a ip4:your_server_ip ~all (استبدل IP برقم الـIP الخاص بخادومك). اضغط أخيرًا على Create TXT Record. الآن يفترض أن تبدو إعدادات DNS الخاصة بنطاقك كهذه، انتبه أنّ عنوان نطاق سيكون بدلًا النطاق المُستخدم هنا jonaharagon.me. أما ملف المنطقة zone file فسيبدو على النحو التالي: $ORIGIN example.com. $TTL 1800 example.com. IN SOA ns1.digitalocean.com.hostmaster.example.com. 1434177047 10800 3600 604800 1800 example.com. 1800 IN NS ns1.digitalocean.com. example.com. 1800 IN NSns2.digitalocean.com. example.com. 1800 IN NS ns3.digitalocean.com. example.com. 1800 IN A 111.111.111.111 example.com. 1800 IN MX 10example.com. example.com. 1800 IN TXT v=spf1 a ip4:111.111.111.111 ~all panel.example.com. 1800 IN A 111.111.111.111 إنشاء مجلد الموقعفي متصفح الويب لديك انتقل إلى https://panel.example.com وسجّل دخولك إلى Ajenti، من الشريط الجانبي، أسفل قسم Web اختر Websites. عند الدخول الأول قد تظهر لك رسالة بأنّ الميزة غير مُفعّلة بعد، اضغط على Enable لتفعيلها والسماح لـ Ajenti V القيام بعدد من عمليات الضبط اللازمة. الآن من قسم New Website لدينا مربع نصيّ بعنوان Name يمكنك فيه كتابة أي معرّف لموقعك. اضغط على الزر Create، وستلاحظ أن موقعك الجديد قد أدرج أسفل قسم Websites في أعلى الصفحة. اضغط على Manage لإدارته. من أسفل قسم Website Files غيّر srv/new-website/ إلى أي مجلد آخر، على سبيل المثال srv/example.com/ اضغط على الزر Set ثم Create Directory. تذكّر الدليل الذي ستحدّده هنا حيث سنرفع إليه الملفات بعد قليل. ومن أسفل علامة التبويب General ألغ التحديد عن خيار Maintenance mode ثم انقر Apply changes أسفل الصفحة. الآن من علامة التبويب Domains أعلى الصفحة اضغط الزر Add واكتب عنوان النطاق الخاص بك في الحقل النصيّ الظاهر ثم انقر على Apply Changes. إنشاء/رفع ملفات الموقعالآن لدينا مجلّد خاص لملفات الموقع، ويتوجب علينا إنشاء أو رفع بعض الملفات إليه. في الشريط الجانبي وأسفل القسم Tools اختر File Manager، انقر على اسم المجلد الذي أنشأته منذ قليل للدخول إليه مثل srv/example.com/ والذي سيكون فارغًا بطبيعة الحال. هنا يمكنك رفع الملفات والمجلدات التي تريد تزويد موقعك بها. لهذا الدرس التعليمي سوف نُنشئ صفحة "!Hello world" بسيطة للموقع. اضغط على الزر New File أعلى الصفحة ليظهر أمامك ملفٌ جديد باسم new file ضمن المجلد. في نهاية السطر الخاص بالملف اضغط على زر القائمة: في حقل Name غيّر القيمة new file إلى index.html ثم اضغط على Save. افتح نفس القائمة مجددًا واختر Edit لفتح الملف ضمن المحرّر النصيّ Notepad. النصّ التالي هو مثال بسيط للتأكد فقط من أنّ كل شيء يعمل كما ينبغي، وبالتأكيد يمكنك كتابة المحتوى الذي ترغب به: <!DOCTYPE html> <html> <head> <title>This website is working!</title> </head> <body> <h1>Hello, world!</h1> <p>If you can read this correctly, your website is functional!</p> </body> </html>اضغط على Save أعلى المُحرّر، لحفظ التعديلات المُدخلة. أعد الخطوة السابقة لكتابة ملفات أخرى للموقع إن رغبت، أو استخدم مدير الملفات لرفع ملفات كنتَ قد كتبتها بالفعل على جهازك. عُد إلى File Manager ثم توجّه إلى أسفل الصفحة لتجد زرًا باسم Choose File، يمكنك من هنا رفع الملفات إلى موقعك عبر مربع اختيار بسيط. تصفّح موقعكفي متصفح الويب انتقل إلى عنوان موقعك مثل http://example.com، وحالما ترى صفحة "!Hello World" التي قمنا بإنشائها قبل قليل فهذا يعني بأن كلّ شيء يعمل كما يجب. إلى هنا نكون قد أنهينا شرح كيفية إنشاء موقع باستخدام لوحة التحكّم Ajent، سنتحدث الآن عن إنشاء عناوين بريد باستخدام نطاقك الخاص. إنشاء عناوين البريدمن لوحة تحكّم Ajenti الخاصّة بك وأسفل القسم Web انقر على Mail ثم اضغط Enable إذا طلب منك. أسفل New Mailbox يتوجب عليك ملئ عدّة خانات. أدخل في المربع النصيّ Address مُعرّف عنوان البريد الذي يَسبق عادةً الإشارة @، فإذا أدخلت sammy على سبيل المثال فسيكون عنوان البريد كاملًا sammy@example.com، هناك أيضًا قائمة منسدلة لاختيار عنوان النطاق الذي سيُسجّل البريد من خلاله فيما لو كنتَ تدير عدّة مواقع باستخدام Agenti V. أبق خانة Custom domain فارغة، وبعد ذلك انقر على + Mailbox. كما ترى فإن عنوان البريد الجديد سيظهر أسفل القسم Mailboxes ضمن الصفحة. انقر عليه ثم اختر Change password لإدخال كلمة مرور جديدة لصندوقك. اضغط على ENTER ثم Apply Changes أسفل الصفحة. الآن انتقل إلى علامة التبويب Advanced من أعلى الصفحة ومن قسم TLS حدّد صندوق التفعيل بجوارها ثم انقر على Generate new certificate بعد الانتهاء اضغط Apply changes أسفل الصفحة. تزيد هذه الخطوة من آمان اتصالك بصندوق البريد وتحسّن من توافقه مع عملاء البريد الإلكتروني. لاستقبال البريد الخاص بك يمكنك الاتصال عبر أحد عملاء سطح المكتب أو الأجهزة الذكية (مثل Outlook, Thunderbird, K-9 Mail الخ) أو يمكنك تركيب RainLoop كتطبيق وِب للوصول إلى صناديق البريد الخاصة بموقعك من خلال المتصفح عبر Ajenti. إليك أخيرًا معلومات الاتصال بصندوق البريد الخاص بك لتزويدها للعميل الذي ترغب باستخدامه: Username: user@example.com Password: your_mailbox_password IMAP Server: panel.example.com IMAP Port: 143 IMAP Encryption: STARTTLS (Accept all certificates) SMTP Server: panel.example.com SMTP Port: 25 SMTP Encryption: None الخاتمةيُفترض أنك قد نجحت الآن بإنشاء موقع ويب خاص بنطاقك بالإضافة إلى صندوق بريد من خلال لوحة التحكم Ajenti والتي تُمكّنك من إدارتهما بكلّ سهولة في الوقت عينه. ترجمة -وبتصرف- للمقال: Creating a Website and an Email Account on Ajenti V لصاحبه: Jonah Aragon.
  16. تحدثنا في الدرس السابق عن الآلية التي تعمل وفقها خدمة fail2ban لحماية خوادم لينكس حيث تحظر أرقام IP المُسيئة التي تحاول اختراق خدمة ما عبر محاولات دخول متكرّرة باستخدام حسابات شائعة. وفصلنا في شرح ملفات الضبط الخاصة بكل من المُرشّح والإجراءات. نشرح في هذا الدرس ما يحدث عندما تبدأ خدمة fail2ban بالعمل. تحميل ملفات الضبط الأولىفي البداية يُقرأ ملف fail2ban.conf الرئيسي لتحديد الشروط التي يجب أن تُنفَّذ العمليّة الرئيسيّة وفقها، ويتم إنشاء كلّ ما يلزم لذلك كالمقابس socket، ملفات السجل log files، وقيم PID. يقرأ fail2ban بعد ذلك الملف jail.conf للحصول على تفاصيل الضبط، وهذا يعني قراءة ملفات الضبط الموجودة ضمن الدليل jail.d والمنتهية باللاحقة conf. تبعًا للترتيب الأبجدي، بحيث تُضاف الإعدادات الموجودة ضمن هذه الملفات إلى الضبط الداخلي وتُكتب القيم الجديدة للخصائص على تلك الموصوفة في ملف jail.conf. يبحث fail2ban بعد ذلك عن ملف jail.local ويكرّر ذلك مُتكيفًا مع القيم الجديدة التي تحملها. أخيرًا فإنه يبحث في الدليل jail.d مرةً أخرى لقراءة الملفات ذات اللاحقة local. حسب الترتيب الأبجدي. وبهذه الطريقة نرى أن fail2ban يملك عددًا كبيرًا من الملفات التي يمكن استخدامها للتحكّم بالسلوك النهائي للبرنامج. وفي حالتنا هذه نحن نملك الملفين jail.conf و jail.local فقط، حيث وضعنا في الملف jail.local القيم التي نحتاج فقط لأن تكون مغايرة عن تلك الموجودة في jail.conf. في المحصلة يملك fail2ban الآن مجموعة من التعليمات التي يمكن تحميلها إلى الذاكرة وتُمثّل مزيجًا مُركبًا من جميع الملفات التي تمكّن من العثور عليها. يفحص البرنامج بعد ذلك كل قسم باحثًا عن عبارة enabled = true، فإذا وجدها في قسمٍ ما فإنّه يقرأ المُعاملات المكتوبة فيه لبناء خطّة عمله وتحديد ما يلزم من الإجراءات، بينما تُستخدم المُعاملات الموجودة في المقطع الافتراضي [DEFAULT] لتلك التي لا تملك تعريفًا خاصًا في أقسام الخدمات. تحليل ملفات الإجراء لتحديد إجراءات البدايةيبحث fail2ban عن action موجِّه لمعرفة سيناريو العمل بهدف تنفيذ سياسات الحظر أو رفعه. فإذا لم يجد واحدًا فإنه يعود إلى الإجراء الافتراضي الموضّح أعلاه. يتكّون الإجراء الموجّه من اسم ملف(ات) الإجراء التي ستُقرأ، فضلًا عن قاموس قيم المفاتيح key-value التي تُمرّر المُعاملات اللازمة لتلك الملفات، وغالبًا ما تأخذ هذه القيم شكل مُعاملات الاستبدال عن طريق الرجوع إلى الإعدادات المضبوطة في قسم الخدمة. ويُمرّر مفتاح name قيمة المتغيّر __name__ التي ستُعيّن كقيمة لترويسة القسم. بعد ذلك يستخدم fail2ban هذه المعلومات للعثور على الملفات المرتبطة بها في الدليل action.d، حيث يبحث في المقام الأوّل عن الملفات ذات اللاحقة conf. ثم يُعدّل المعلومات الموجودة فيها مع الإعدادات المُضمّنة في الملفات ذات اللاحقة local. والموجودة أيضًا في الدليل نفسه. تُحلّل تلك الملفات لتحديد الإجراءات الواجب تنفيذها، حيث تُقرأ قيمة actionstart لمعرفة الإجراءات التي يجب اتخاذها لإعداد بيئة العمل، والتي غالبًا ما تشمل على إنشاء صيغة لجدار الحماية بهدف استيعاب قواعد الحظر. تستخدم الإجراءات المُعرّفة في هذا الملف المُعاملات التي تُمرّر إليها من قبل الإجراء المُوجّه، إذ تُستخدم هذه القيم لإنشاء القواعد المناسبة بشكلٍ حيويّ. وإذا لم يتم تعريف متغيّر ما فإنه يمكن النظر إلى القيم الافتراضية في ملف الإجراء حينها. تحليل ملفات المرشح لتحديد قواعد التصفيةتشمل مُعاملات الخدمة الموجودة في ملفات jail.* مسار ملف السجل، إضافةً إلى آلية الانتخاب التي يجب استخدامها لفحص الملف (والتي تُعرّف بواسطة الخيار backend)، كما تضم المُرشّح filter الذي يجب استعماله لتحديد الأسطر المُمثّلة لحالات فشل المصادقة. يبحث fail2ban في الدليل filter.d عن ملف المُرشّح ذو اللاحقة conf.. يُقرأ هذا الملف لتعريف الأنماط التي يمكن استخدامها لمطابقة الأسطر المُسيئة، ثم يقوم البرنامج بالبحث عن ملف المرشح ذو اللاحقة local. لمعرفة فيما إذا كان أيٍ من المُعاملات الافتراضية قد حصل على قيمة أخرى، تُستخدم في هذه الملفات التعابير النمطيّة المعرّفة. يقوم fail2ban بقراءة ملف سجل الخدمة. حيث يحاول كل سطر failregex مُعرّف في ملفات filter.d مقابلة كل سطر جديد يكتب إلى ملف سجل الخدمة. إذا ضُبط عنوان IP مُسيء عن طريق إرجاع التعبير النمطي لمطابقة فإنّه يتحقق أولًا من مطابقته كذلك مع التعبير النمطي المُعرّف بواسطة ignoreregex، فإذا تمت المطابقة معه أيضًا يتجاهل fail2ban الأمر، وإلا يزداد العداد الداخلي للعميل الذي تسبّب بالمطابقة ويتم إنشاء طابع زمني مرتبط بهذا الحدث. عندما يبلغ الإطار الزمني المُحدد بواسطة المُعامل findtime في ملفات jail.* نهايته (على النحو الذي يُحدّده الطابع الزمني للحدث)، يتم إهمال العدّاد الداخلي مجددًا، ولا يُعتبر هذا الحدث ذو صلة بسياسة الحظر. أما إذا وقعت محاولة ولوج فاشلة إضافية خلال الوقت المُحدّد يزداد العداد الداخلي مرة أخرى، فإذا ما وصل العداد إلى عتبة الفشل المُحدّدة من قبل الخيار maxretry ضمن الإطار الزمني المضبوط يُنفّذ fail2ban خطّة الحظر عبر استدعاء الإجراء actioncheck للخدمة المُعرّفة في ملفات action.d/، وهذا يُحدّد فيما إذا كان إجراء actionstart أعدّ الصيغة اللازمة. وبعد ذلك يُدعى الإجراء actionban لحظر العميل المُسيء مُحدّدا الطابع الزمني لهذا الحدث كذلك. بعد انقضاء الوقت المُحدّد من قبل المُعامل bantime؛ يرفع fail2ban الحظر عن العميل عبر استدعاء الإجراء actionunban. عندما تتوقف خدمة fail2ban فإنها تحذف قواعد جدار الحماية التي تمّ إنشائها من قبل الإجراء actionstop، الأمر الذي يحذف السلسلة الحاوية على قواعد fail2ban ويحذف القواعد من سلسلة INPUT والتي كانت تنقل حركة مرور البيانات إلى تلك السلسلة. خاتمةهكذا نأمل أن تكون قد امتلكت فهمًا عميقًا لآلية عمل fail2ban، وفي العموم فإن التعامل مع هذه الخدمة ليس بالأمر الصعب بالنسبة لأغلب المستخدمين؛ فمعظم مهمات الضبط تكون مُعدّة بشكل مسبق، ومع هذا فإذا أردت التعديل على إعدادات الضبط الافتراضية فسيكون من المفيد لك أن تتعرف على كيفية عمل fail2ban لتسهيل التعديل بما يتلاءم مع احتياجاتك. ترجمة -وبتصرف- للمقال How the Fail2ban Service Processes Configuration Files to Implement Bans لصاحبه Justin Ellingwood.
  17. تتعرّض جميع الخدمات التي يتم تقديمها عبر الإنترنت لمختلف أنواع الهجمات من قبل أطرافٍ مُسيئة. فإذا كانت الخدمة تتطلب تسجيل دخول (أو ما يُعرف بالتوثيق أو المُصادقة)؛ فسيحاول بعض المستخدمين غير الشرعيين أو برمجيات bot الخبيثة الولوج إلى الخدمة من خلال تكرار محاولات المُصادقة بتجريب بيانات تسجيلٍ مختلفة في كلّ مرة. من الأمثلة الشائعة على ذلك الهجمات التي تتعرض لها خدمة SSH من قبل شبكة الروبوت Botnet لتجريب أسماء حسابات شائعة بشكل آلي بهدف اختراق الخدمة، إلا أنّه لحسن الحظّ فقد تمّ إنشاء عدّة خدمات مثل fail2ban لمساعدتنا على التخفيف من هذه الهجمات. يعمل fail2ban عن طريق تعديل قواعد جدار النار بشكل حيوي لحظر العناوين التي تحاول تسجيل الدخول بعد عددٍ مُحدّدٍ من المرات الفاشلة. في هذا الدرس سنُناقش بمزيدٍ من التعمق كيفيّة عمل الأداة fail2ban وكيف يمكننا تعديل سلوكها لتتوافق مع متطلباتنا. المفهوم الأساسيالفكرة الأساسية في عمل fail2ban هي مراقبة سجلات logs الخدمات الشائعة لرصد محاولات تسجيل الدخول الفاشلة. عندما يُضبط fail2ban لمراقبة سجل خدمة ما، فإنه يبحث في مُرشّح filter مُخصّص لهذه الخدمة. يتم تصميم المُرشِّح لتعريف حالة "فشل المُصادقة" لهذه الخدمة باستخدام تعابير نمطيّة مُعقّدة Regular Rxpressions تُعرّف متغيرًا يُدعى failregex. لحُسن الحظ يأتي fail2ban مع مجموعة مُرشحات جاهزة للخدمات الأكثر شيوعًا. عندما يطابق سطر ما من سجل الخدمة المُراقبة المُتغيّر failregex من المُرشّح؛ يتم تنفيذ الإجراءات المُحدّدة لهذه الخدمة، والتي يمكن ضبطها للقيام بأشياء مختلفة اعتمادًا على ما يفضّله مُدير الخادوم. الإجراء الافتراضي الذي يتمّ تنفيذه عادةً هو حظر عنوان الـ IP المُسيء عن طريق تعديل قواعد iptables لجدار الحماية. يمكنك أيضًا توسيع هذا الإجراء لإرسال بريد إلكتروني إلى مدير الخادوم مع تقرير whois عن المهاجم، أو إرفاق الأسطر التي أدّت إلى إطلاق إجراءات الحماية من سجل الخدمة. يمكن كذلك تعديل إجراءات الحماية لتنفيذ أوامر مختلفة عن سلوك iptables المُعتاد، إذ يمكنك اختيار أوامر أكثر تعقيدًا أو أبسط كما تريد، بالإضافة إلى ملفات الضبط الخاصة بجدار الحماية، وخيارات التنبيه المتاحة. بشكل افتراضي يتم تنفيذ إجراءات الحماية عند الكشف على ثلاث محاولات تسجيل دخول فاشلة خلال عشرة دقائق، ويكون وقت الحظر الافتراضي هو عشرة دقائق أيضًا. العدد الافتراضي لمحاولات المُصادقة الفاشلة ضروريّ لتفعيل الحظر على جانب SSH إلا أنّه يمكن تعديل ملف الضبط من قبل مدير الخادوم ورفع عدد المحاولات اللازمة لتشغيل إجراءات الحماية إلى ست مرات مثلًا. عند استخدام أسلوب iptables الافتراضي لحماية حركة SSH، تُنشئ الأداة fail2ban سلسلة جديدة عند بدء الخدمة، مُضيفةً قاعدة جديدة إلى سلسلة الإدخال INPUT chain والتي تُرسل حركة مرور البيانات TCP الموجّهة عند المنفذ 22 إلى السلسلة الجديدة. في السلسلة الجديدة تُضاف قاعدة مُفردة مُعيدةً الحركة إلى سلسلة الإدخال INPUT chain. هذا ما يجعل حركة البيانات تقفز إلى السلسلة الجديدة أولًا ومن ثم تقفز عائدةً، ورغم أن ذلك لا يؤثر على حركة مرور البيانات بدايةً إلا أنه مع تكرار عنوان IP ما لعملية المُصادقة عدّة مرات ووصوله إلى عتبة "فشل المصادقة"؛ تُضاف قاعدة إلى بداية السلسلة الجديدة لمنع حركة المرور الصادرة من عنوان IP المُسيء، والذي يؤدي إلى حظره فورًا. بعد انتهاء فترة الحظر تُحذف القاعدة من iptables، ويتم إزالة السلسلة والقواعد المرتبطة بها عند انتهاء خدمة fail2ban. استعراض إعدادات خدمة Fail2banيتم ضبط fail2ban من خلال مجموعة متنوعة من الملفات الموجودة ضمن الدليل /etc/fail2ban/ والمرتبة بشكلٍ هرمي. فعلى سبيل المثال يضبط الملف fail2ban.conf بعض إعدادات التشغيل الأساسية مثل طريقة daemon في تسجيل المعلومات وكيفيّة استخدام المقابس socket وملفات pid. بكل الأحوال فإن الإعدادات الرئيسية تُحفظ في ملفات تُدعى "jails". بشكل افتراضي يأتي fail2ban مع الملف jail.conf والذي يُستبدل عادةً مع كلّ تحديث، لذا يُنصح المستخدمون بنسخ هذا الملف تحت اسم jail.local وإجراء التعديلات هناك. إذا كنت تملك بالفعل الملف jail.local افتحه على الفور باستخدام محرّر نصيّ: sudo nano /etc/fail2ban/jail.local أما إذا لم يكن الملف موجودًا بالفعل أو كان فارغًا بعد فتحه؛ انسخه من جديد باسم jail.local ثم افتحه بمحرّر نصيّ: sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo nano /etc/fail2ban/jail.local لنُلقي نظرة على الخيارات المتاحة هنا ونرى كيف يتفاعل هذا الملف مع ملفات الضبط الأخرى ضمن النظام. القسم الافتراضييُعرّف الجزء الأول من الملف القيم الافتراضية لآلية عمل fail2ban. يمكن تجاوز هذه الخيارات من قبل مقاطع الضبط اللاحقة والخاصة بكل خدمة على حدا. بإهمال التعليقات سيبدو القسم الافتراضي مشابهًا لهذا: [DEFAULT] ignoreip = 127.0.0.1/8 bantime = 600 findtime = 600 maxretry = 3 backend = auto usedns = warn destemail = root@localhost sendername = Fail2Ban banaction = iptables-multiport mta = sendmail protocol = tcp chain = INPUT action_ = %(banaction)s[name=%(name)s, port=”%(port)s”, protocol=”%(protocol)s”, chain=”%(chain)s”] action_mw = %(banaction)s[name=%(name)s, port=”%(port)s”, protocol=”%(protocol)s”, chain=”%(chain)s”] %(mta)s-whois[name=%(name)s, dest=”%(destemail)s”, protocol=”%(protocol)s”, chain=”%(chain)s”, sendername=”%(sendername)s”] action_mwl = %(banaction)s[name=%(name)s, port=”%(port)s”, protocol=”%(protocol)s”, chain=”%(chain)s”] %(mta)s-whois-lines[name=%(name)s, dest=”%(destemail)s”, logpath=%(logpath)s, chain=”%(chain)s”, sendername=”%(sendername)s”] action = %(action_)s دعونا نشرح ماذا يعني ذلك في الواقع: ignoreip: يُعرّف هذا الخيار مجموعة عناوين IP كقائمة بيضاء يتمّ تجاهلها من قبل نظام الحظر. افتراضيًا يتم تعيين هذا الخيار لتجاهل حركة المرور القادمة من قبل الجهاز نفسه فقط، ومن الجيد أن نُبقي على ذلك. bantime: يُحدّد هذا الخيار طول مدّة الحظر بالثواني، وبشكل افتراضي يأخذ القيمة 600 ثانية (أي عشرة دقائق). findtime: يُحدّد الفترة الزمنية التي ستتم مراقبتها للنظر في تكرار محاولات تسجيل الدخول الفاشلة. القيمة الافتراضية هي 600 ثانية (أي عشرة دقائق أيضًا)، والذي يعني أن fail2ban سيحسب عدد محاولات الولوج الفاشلة في آخر عشرة دقائق. maxretry: يُحدّد عدد محاولات تسجيل الدخول الفاشلة التي سيُحظر بعدها عنوان IP مباشرةً من قبل fail2ban وذلك ضمن الإطار الزمني المُحدّد من قبل findtime. backend: يُحدّد هذا الخيار كيف يراقب fail2ban ملفات السجل، فالقيمة auto تعني أن fail2ban سيجرّب أسلوب pyinotify ثم gamin وبعدها يختار خوارزمية بناءً على ما هو متاح. usedns: يُحدّد خوادم DNS التي سوف تُستخدم للمساعدة في تنفيذ الحظر. فالقيمة "no" تعني استخدام عناوين IP نفسها في الحظر بدلًا من استعمال اسم المضيف hostnames. بينما تسعى القيمة "warn" إلى الاستفادة من أدلة DNS للبحث عن اسم المضيف وحظره مع تسجيل النشاط للمراجعة. destemail: يُوضع هنا عنوان البريد الإلكتروني الذي ستُرسل إشعارات التنبيه إليه (فيما إذا كانت ميزة الإشعارات مُفعّلة). sendername: يُحدّد محتوى الحقل "from" في رسائل الإشعارات المولّدة من الخيار السابق. banaction: يُعيّن هذا الخيار العمل الذي سيتم تنفيذه حال الوصول إلى عتبه "فشل المُصادقة"، وفي الواقع هناك ملف ضمن الدليل /etc/fail2ban/action.d/ باسم iptables-multiport.conf يُعالج مهمة iptables لحجب عناوين IP، وهو ما سنتطرق إليه لاحقًا. mta: وكيل نقل البريد المُستخدم لإرسال التنبيهات البريدية. protocol: يُحدّد نوع حركة مرور البيانات التي سيتم إسقاطها عند تنفيذ حظر IP، وكذلك نوع حركة المرور التي سيتم إرسالها إلى سلسلة iptables جديدة. chain: وهي السلسلة التي سيتم ضبطها مع قاعدة قفز jump rule لإرسال حركة المرور إلى fail2ban. باقي المُعاملات تُعرِّف إجراءات مختلفة يمكن تخصيصها. تُمرّر هذه الإجراءات في بعض المُعاملات السابقة من خلال سلسلة استيفاء string interpolation على النحو التالي: %(var_name)s في السطر أعلاه يُستبدل محتوى var_name. باتباع هذه الطريقة يتم إسناد المتغيّر action إلى المُعرّف action_ بشكلٍ افتراضي (ما يؤدي إلى تنفيذ الحظر دون إرسال إشعار عبر البريد)، وهذا بدوره يُضبط عبر استدعاء الإجراء iptables-multiport مع قائمة من المُعاملات (مثل اسم الخدمة، المنفذ، البروتوكول، والسلسلة) اللازمة لتنفيذ الحظر. يتم استبدال name مع اسم الخدمة كما هو مُحدّد بواسطة ترويسات الأقسام في الأسفل. أقسام الخدمات الخاصةأسفل القسم الافتراضي هناك أقسام مُخصّصة لكل خدمة على حدا والتي يمكن استخدامها لتجاوز الإعدادات الافتراضية، وهذا يتبع للخيارات التي يمكن لها أن تأخذ قيمًا مُختلفة عن القيم العادية. تُحدّد ترويسة كل مقطع كما يلي: [service_name] أي مقطع يحتوي على هذا السطر سيُقرأ ويٌفعّل: enabled = true تُضبط المُعاملات ضمن كل قسم بما في ذلك ملف المُرشّح والذي يجب استخدامه لتحليل السجلات ومواقع ملفات السجلات نفسها. خذ بعين الاعتبار أن المقطع الذي يُحدِّد إجراءات الحماية لخدمة SSH يبدو مثل هذا: [SSH] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 6 يُفعّل السطر الأول enabled= true القسم الخاص بخدمة SSH ويُعيّن المنفذ إلى منفذ SSH (بالرقم 22) مُخبرًا fail2ban بالنظر إلى السجل var/log/auth.log/ وتحليله باستخدام آليات الترشيح المُحدّدة ضمن الدليل /etc/fail2ban/filters.d/ في الملف المُسمى sshd.conf. تؤخذ جميع أجزاء المعلومات اللازمة من المُعاملات المُعرّفة ضمن القسم [DEFAULT] . فعلى سبيل المثال يتم تعيين إجراء تنفيذ الخيار action_ والذي يحظر عنوان IP المُسيء باستخدام iptables-multiport والذي يشير إلى الملف iptables-multiport.conf ضمن المسار /etc/fail2ban/action.d/. وكما ترى يجب أن تكون الإجراءات ضمن المقطع [DEFAULT] عامة ومرنة. الاستخدام المُكثّف لمُعاملات الاستبدال جنبًا إلى جنب مع المُعاملات المزودة بقيم افتراضية معقولة يجعل التعريفات سهلة التجاوز عند الضرورة. شرح ملف الترشيحمن أجل فهم ما يجري في إعدادات الضبط الخاصة بنا، نحن بحاجة إلى فهم كلًا من ملف المُرشّح filter file وملف الإجراء action file، والتي تُشكّل الجزء الأكبر من العمل. يُحدّد ملف المُرشّح الأسطر التي يبحث عنها fail2ban في ملفات السجل لتحديد خصائص المُسيء. بينما يُزوّد ملف الإجراء بجميع الإجراءات المطلوبة، من بناء صيغة لجدار الحماية firewall structure عند بدء تشغيل الخدمة، وحتى إضافة وحذف القواعد، علاوةً على إلغاء صيغة جدار الحماية عند توقّف الخدمة. دعونا ننظر في ملف المُرشّح المدعو بواسطة خدمة SSH لدينا من الإعدادات أعلاه: sudo nano /etc/fail2ban/filter.d/sshd.conf [INCLUDES] before = common.conf [Definition] _daemon = sshd failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from ( via \S+)?\s*^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from \s* ^%(__prefix_line)sFailed \S+ for .? from (?: port \d)?(?: ssh\d*)?(: (ruser .|(\S+ ID \S+ (serial \d+) CA )?\S+ %(__md5hex)s(, client user “.“, client host “.“)?))?\s^%(__prefix_line)sROOT LOGIN REFUSED.* FROM \s* ^%(__prefix_line)siI user .* from \s*^%(__prefix_line)sUser .+ from not allowed because not listed in AllowUsers\s* ^%(__prefix_line)sUser .+ from not allowed because listed in DenyUsers\s*^%(__prefix_line)sUser .+ from not allowed because not in any group\s* ^%(__prefix_line)srefused connect from \S+ ()\s*^%(__prefix_line)sUser .+ from not allowed because a group is listed in DenyGroups\s* ^%(__prefix_line)sUser .+ from not allowed because none of user’s groups are listed in AllowGroups\s*$ ignoreregex = يبدو هذا مُعقّدًا للغاية، لنبسطّه قليلًا فيما يلي. يُحدّد المقطع [INCLUDES] الملفات الأخرى التي ستتم قراءتها قبل أو بعد الملف، في مثالنا هذا يُقرأ الملف common.conf وتُوضع محتوياته أمام الأسطر الأخرى من الأصل، وهذا ما يُضيف بعض المعاملات اللازمة لضبط الإعدادات لدينا. بعد ذلك لدينا المقطع [Definition] والذي يُحدّد القواعد الفعلية لمطابقات المرشّح. بدايةً نُحدّد اسم خدمة daemon المراقبة بواسطة المعامل _daemon. ومن ثمّ يأتي تعريف المتغيّر failregex المُحدّد بواسطة أنماط تبحث عن أية أسطر مطابقة في ملفات السجل، وهي عبارة عن تعابير نمطيّة Regular Expressions تتطابق مع مختلف الأخطاء والإخفاقات التي يمكن أن تحدث عندما لا تتم مصادقة تسجيل الدخول بشكل صحيح. فعلى سبيل المثال يُستبدل الجزء prefix_line)s__)% من التعريف السابق مع قيمة معاملات الإعداد من ملف common.conf. يُستخدم هذا التعبير لمطابقة المعلومات التي تكتبها أنظمة التشغيل إلى ملفات السجل عندما تستخدم الأساليب القياسية. فعلى سبيل المثال بعض الأسطر من السجل var/log/auth.log/ قد تبدو مثل هذا: May 6 18:18:52 localhost sshd[3534]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=101.79.130.213 May 6 18:18:54 localhost sshd[3534]: Failed password for invalid user phil from 101.79.130.213 port 38354 ssh2 May 6 18:18:54 localhost sshd[3534]: Received disconnect from 101.79.130.213: 11: Bye Bye [preauth] الجزء الملّون بالأحمر يُمثّل نمطًا قياسيًا standard pattern مُدرجًا من قبل نظام التشغيل لدعم السياق context. بعد ذلك هناك عدد غير قليل من الطرق المختلفة التي يمكن لخدمة iptables كتابة محاولات الفشل وفقها إلى السجل. يحتوي ملف السجل السابق على محاولتي تسجيل دخول فاشلتين في السطرين الأوّل والثاني (إحداهما خطأ مصادقة من نوع PAM والأخرى خطأ كلمة مرور)، يتم تعريف التعابير النمطية في المرشّح لمطابقة أي سطر يحمل رسالة فشل في المصادقة، لا ينبغي عليك أن تعدّل أيٍ من هذه الأسطر، لكنك يجب أن تكون مدركًا لأهمية العثور على جميع مُدخلات السجل الدالة على وقوع خطأ استخدام غير مُصرّح به للتطبيق الذي تعمل على حمايته؛ فيما لو رغبت بتصميم مرشّح خاص بشكل يدوي. في الجزء السفليّ من الملف يمكنك أن ترى المعامل ignoreregex فارغ حاليًا، والذي يمكن استخدامه لاستبعاد أنماط أكثر تحديدًا تطابق عادةً حالات فشل مصادقة لا ترغب لـ fail2ban بنفيها لاحتمالات مختلفة. لن نُعدّل شيئًا هنا. احفظ الملف وأغلقه بعد الانتهاء من دراسته. شرح ملف الإجراءدعونا الآن نلقي نظرة على ملف الإجراء action file المسؤول عن إعداد جدار الحماية وفق صيغة تُسهّل التعديلات لحظر المُضيفين المُسيئين malicious hosts إضافةً إلى ضمهم أو حذفهم عند الضرورة. وكما تذكرون يُدعى الإجراء الخاص باستدعاء خدمة SSH لدينا بـ iptables-multiport، لنفتح الآن الملف المرتبط بها: sudo nano /etc/fail2ban/action.d/iptables-multiport.conf بحذف التعليقات يبدو الملف مشابهًا لهذا: [INCLUDES] before = iptables-blocktype.conf [Definition] actionstart = iptables -N fail2ban- iptables -A fail2ban- -j RETURN iptables -I -p -m multiport –dports -j fail2ban- actionstop = iptables -D -p -m multiport –dports -j fail2ban- actioncheck = iptables -n -L | grep -a ‘fail2ban-[ \t]’ actionban = iptables -I fail2ban- 1 -s -j actionunban = iptables -D fail2ban- -s -j [Init] name = default port = ssh protocol = tcp chain = INPUT يبدأ الملف بتضمين محتوى ملف إجراء آخر يُدعى i iptables-blocktype.confوالذي يُعرّف ببساطة المُعامل blocktype المسؤول عن ضبط القيود التي سيتم فرضها على العميل المحظور. بشكلٍ افتراضي يتم تعيين blocktype لرفض الحزم packets الواردة من قبل العميل المحظور وإعادتها مع رسالة تفيد بأنّ المنفذ المطلوب غير قابل للوصول حاليًا، وهذا ما سوف نستخدمه في قواعد الحظر تاليًا. بعد ذلك تأتي تعريفات القواعد نفسها حيث معظم الإجراءات واضحة إلى حدٍ ما، فالإجراء actionstart يقوم بإعداد جدار الحماية iptables عند بدء تشغيل خدمة fail2ban، إذ يُنشئ سلسلة جديدة مُضيفًا إليها قاعدة للعودة إلى سلسلة الدعوة calling chain، ثم يدرج قاعدة في بداية سلسلة INPUT والتي تقوم بتمرير حركة البيانات المُطابقة للبروتوكول والمنفذ الصحيحين المتجهين إلى السلسلة الجديدة. يتم ذلك باستخدام القيم التي قمنا بتمريرها مع الإجراء المُعرّف في ملف jail.local الخاص بنا. كما تؤخذ قيمة الخانة name من ترويسة المقطع المرتبط بكلّ خدمة، بينما تؤخذ قيم chain،protocol وport من سطر action نفسه من الملف. ولعلكم تذكرون أن هذه أيضًا - بدورها- أضيفت إلى سطر الإجراء عبر إدخال مُعاملات أخرى مُحددة في أماكن أخرى من هذا الملف. إلى الآن فإن fail2ban قد مرّر وحوّل العديد من المُعاملات بين الأجزاء المختلفة من ملفات الضبط الخاصة به. جميع المُعاملات التي تم تعيينها من قبل ملف آخر يُشار إليها عبر تضمين اسم المُعامل بقوسي زاوية: عندما ننتقل إلى الأسفل نحو تعريف الإجراء actionstop نرى بأن أوامر جدار الحماية تُنفّذ ببساطة عكس أوامر الإجراء actionstart؛ حيث نُنهي صيغة جدار الحماية المُنشأة عندما نوقف خدمة fail2ban. يتأكّد الإجراء actioncheck من إنشاء السلسة المناسبة قبل محاولة إضافة قواعد الحظر. بعد ذلك نصل إلى قاعدة الحظر الفعلية actionban والتي تعمل عن طريق إضافة قاعدة جديدة إلى السلسلة المُنشأة، تطابق هذه القاعدة عنوان IP المصدر للعميل المُسيء (يُقرأ هذا المُعامل من قبل سجلات التصريح authorization logs عندما تُبلغ العتبة maxretry) ويتم تأسيس الحظر بتعريف المُعامل blocktype الموجود في المقطع [INCLUDE] في الجزء العلوي من الملف. تزيل actionunban ببساطة القاعدة المُنشأة ويتم ذلك تلقائيًا بواسطة fail2ban بعد انقضاء وقت الحظر. أخيرًا نصل إلى القسم [Init] والذي يقتصر دوره على تزويد بعض الافتراضات في حال استدعاء ملف الإجراء من دون تمرير جميع القيم اللازمة. ترجمة -وبتصرف- للمقال How Fail2ban Works to Protect Services on a Linux Server لصاحبه Justin Ellingwood.
  18. Ghost هي منصة تدوين حرّة ومفتوحة المصدر تتميّز بخفتها (~7.5MB)، سهولة استخدامها، قابليتها العاليّة للتخصيص، بالإضافة إلى توفّر العديد من السِمات themes لها عبر الإنترنت مجانًا أو بشكل مدفوع. في هذا الدرس سوف نشرح خطوات تركيب وإعداد منصة Ghost على نظام Ubuntu 14.04، بالإضافة إلى إعداد خادوم Nginx لمنافذ البروكسي proxy ports، وكذلك تركيب حزمة forever للمحافظة على تشغيل Ghost في الخلفية. المتطلباتلا يشترط Ghost توفّر أي حد أدنى من المساحة على الخادوم، لكن خُذ بعين الاعتبار عدد الزوار المتوقعين لمدوّنتك وكمّ المحتوى الذي ترغب بمشاركته لتتمكّن من تقدير المساحة المناسبة عند الإنشاء. في هذا الدرس ولغرضٍ تعليمي فقط سوف نختار أقلّ مساحة ممكنة. قبل البدء نحن نحتاج ما يلي: نظام Ubuntu 14.04 على خادومك. عنوان نطاق مُسجّل ومربوط مع الـ IP الخاص بخادومك. مستخدم عادي non-root مع صلاحيات الجذر، والذي سوف نستخدمه لتنفيذ جميع الأوامر المذكورة هنا، وفي حال كان الأمر يحتاج إلى صلاحيات الجذر فسنستخدم sudo.الخطوة الأولى: تركيب Node.js و Npmفي البداية نحن بحاجة إلى تحديث فهارس مدير الحزم وتركيب كلًا من zip و wget حيث سنحتاجهما لاحقًا أثناء الدرس. sudo apt-get update sudo aptitude install zip wget يتطّلب Ghost تركيب Node.js v0.10.x (آخر إصدار مستقل)، فالإصدار غير المستقر (v0.12.x) ليس مدعومًا بعد. يوصي موقع Ghost.org تحديدًا بكلًا من Node.js v0.10.36 و npm v2.5.0. يمكنك تركيب Node.js باستخدام PPA على Ubuntu [من هذا الدرس][1]. عند الانتهاء من تثبيت Node.js، تحقّق من رقم الإصدار عبر تشغيل: node -v يُفترض أن يكون الخرج مشابهًا لهذا: v0.10.38 تحقّق أيضًا من وجود npm: npm -v إذا كانت مثبّتة فهذا سيُعيد لك رقم الإصدار: 1.4.28 في غير ذلك ستظهر أمامك رسالة خطأ. عندها يمكنك تركيب npm بهذا الأمر: sudo apt-get install npm ثم حدّث إصدار npm إلى الرقم 2.5.0 بتشغيل الأمر: sudo npm install npm@2.5.0 -g تحقّق مجددًا من الإصدار المُثبّت: npm -v يُفترض أن يكون الخرج كهذا: 2.5.0الخطوة الثانية: تركيب Ghostيتوجب علينا الآن تركيب Ghost، مُتبعين نصيحة موقع Ghost.org بتثبيت المنصّة على المسارvar/www/ghost/. بدايةً سنُنشئ الدليل var/www/ ثم سنحصل على أحدث إصدار من Ghost من خلال مستودع GitHub الخاص بهم: sudo mkdir -p /var/www cd /var/www/ sudo wget https://ghost.org/zip/ghost-latest.zip هكذا نكون قد حصلنا على الإصدار الأخير لـ Ghost، وعلينا الآن فكّ الضغط عن الحزمة والانتقال إلى الدليل /var/www/ghost/: sudo unzip -d ghost ghost-latest.zip cd ghost/ بقي علينا أخيرًا تركيب بعض الاعتماديات اللازمة للمنصّة: sudo npm install --production هكذا نكون قد أنهينا عملية تركيب Ghost. لننتقل الآن إلى إعداد المنصّة قبل البدء بتشغيلها. الخطوة الثالثة: إعداد Ghostملف الضبط الخاص بمنصة Ghost يجب أن يكون على المسار التالي var/www/ghost/config.js/ إلا أنّه وعند التركيب لن يكون هناك ملف بهذا الاسم، وعوضًا عن ذلك سنجد الملف config.example.js. أنشئ نسخة من الملف config.example.js باسم config.js ضمن نفس المجلد عبر الأمر cp لاستخدامه في كتابة الإعدادات الخاصة بك. sudo cp config.example.js config.js من أهم المعلومات التي نحتاج إلى تعديلها في الملف السابق هو الرابط URL وإعدادات البريد أسفل القسم production. في غير ذلك سيأخذك الرابط إلى الصفحة الافتراضية للمدوّنة http://my-ghost-blog.com. وعلى الرغم من أنه يمكن تشغيل Ghost بدون ضبط إعدادات البريد إلا أنه لا يُنصح بذلك، فعلى سبيل المثال يُرسل Ghost كلمة مرور مُستخدم المدوّنة إلى هذا البريد في حال نسيانها. حرّر الملف بإحدى الأدوات التي تُفضّل: sudo nano config.js عليك أولًا تغيير قيمة url إلى عنوان نطاقك (أو استخدم رقم IP الخاص بخادومك في حال لم ترغب باستعمال عنوان النطاق حاليًا). انتبه إلى الصياغة الصحيحة لعنوان الرابط بحيث تشبه http://example.com أو http://45.55.76.126 وإلا فإن Ghost لن يعمل. قم أيضًا بتغيير قيمة host ضمن قسم server إلى 0.0.0.0. يُظهر الملف التالي النموذج المُعدّل الخاص بالدرس: var path = require(‘path’), config; config = { // ### Production // When running Ghost in the wild, use the production environment // Configure your URL and mail settings here production: { url: ‘http://my-ghost-blog.com’, mail: { // Your mail settings }, database: { client: ‘sqlite3’, connection: { filename: path.join(__dirname, ‘/content/data/ghost.db’) }, debug: false }, server: { // Host to be passed to node’s `net.Server#listen()` host: ‘127.0.0.1’, // Port to be passed to node’s `net.Server#listen()`, for iisnode s$ port: ‘2368’ } }, (…)احفظ الملف واخرج من المحرّر النصيّ nano عبر الضغط على CTRL+X ثم Y واضغط Enter. تأكّد أنك لا تزال ضمن الدليل /var/www/ghost/ ثم شغّل Ghost من خلال الأمر: sudo npm start --production يُفترض أن يكون الخرج شيئًا مشابهًا لهذا: > ghost@0.6.4 start /var/www/ghost > node index Migrations: Database initialisation required for version 003 Migrations: Creating tables… Migrations: Creating table: posts […]إذا كان كلّ شيء قد تمّ كما يجب؛ حينها يمكنك الوصول إلى مدونتك عبر المنفذ 2368: http://your_domain._name:2368 (أو http://your_servers_ip:2368). اضغط الآن على CTRL+C لإيقاف عمل Ghost الخطوة الرابعة: تركيب Nginxالخطوة التالية هي تثبيت Nginx والذي يسمح للاتصالات على المنفذ 80 أن تتمّ عبر منفذ Ghost، بعبارة أبسط يسمح لنا Nginx الوصول للمدوّنة من دون الحاجة لإضافة المنفذ 2368: sudo apt-get install nginx نحتاج الآن إلى ضبط Nginx، لننتقل أولًا إلى الدليل etc/nginx/ لحذف الملف الافتراضي etc/nginx/sites-enabled/: cd /etc/nginx/ sudo rm sites-enabled/default سنُنشئ ملف جديد في المسار /etc/nginx/sites-available/ باسم ghost ثم نحرّره باستخدام nano: sudo touch /etc/nginx/sites-available/ghost sudo nano /etc/nginx/sites-available/ghost الصق النصّ التالي في الملف السابق بعد تغيير المحتوى المُحدّد باللون الأحمر إلى عنوان نطاقك أو رقم الـ IP الخاص بخادومك: server { listen 80; server_name your_domain.tld; location / { proxy_set_header X-Real-IP remoteaddr;proxysetheaderHosthttp_host; proxy_pass http://127.0.0.1:2368; } }سنُنشى اختصارًا لإعداداتنا في sites-enabled: sudo ln -s /etc/nginx/sites-available/ghost /etc/nginx/sites-enabled/ghost ثم نُعيد تشغيل Nginx: sudo service nginx restart الآن سنُنشئ مستخدمًا جديدًا لأغراض أمنيّة بحيث لا يمتلك أذوات سوى على الدليل var/www/ghost/؛ ففي حال تعرّض Ghost لخطرٍ ما فإن نظامك سيظل في أمان: sudo adduser --shell /bin/bash --gecos 'Ghost application' ghost إسناد الصلاحيات المُناسبة: sudo chown -R ghost:ghost /var/www/ghost/ يمكنك الآن الولوج مستعملا المستخدم الجديد: su - ghost أخيرًا نحن بحاجة إلى إعادة تشغيل Ghost: cd /var/www/ghost npm start –productionيمكنك الآن الوصول إلى مدونتك عبر المنفذ 80 من خلال ///:http. الخطوة الخامسة: الإبقاء على تشغيل Ghost في الخلفيةالخطوة الأخيرة هي المحافظة على تشغيل Ghost في الخلفية طوال الوقت، وسوف نستخدم لذلك الأداة forever التي تُبقي Ghost يعمل في الخلفية وتراقبه في حال انهياره بحيث تُشغّل نسخة أخرى منه من جديد. قم بتركيب الأداة forever بالأمر التالي ضمن مجلّد ghost /var/www/ghost، لكن أولًا عليك الخروج من المستخدم Ghost ثم الدخول بالمستخدم العادي: exit sudo npm install -g forever شغّل Ghost مع المستخدم ghost على أن تكون ضمن الدليل الصحيح: su - ghost cd /var/www/ghost forever start index.js يفترض أن يكون الخرج مشابهًا لهذا: warn: –minUptime not set. Defaulting to: 1000ms warn: –spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms info: Forever processing file: index.jsبشكل افتراضي يعمل forever ضمن وضع المطوّرين، يمكنك تعديل هذا من خلال الأمر: NODE_ENV=production forever start index.js أما إذا رغبت بإيقاف عمل forever فنفّذ الأمر الآتي ضمن دليل Ghost: forever stop index.jsأخطاء مُحتملةإذا واجهت رسالة الخطأ التالية: Error: SQLITE_READONLY: attempt to write a readonly database شغّل forever كجذر root (اكتب exit للخروج من المستخدم الحالي أولًا): sudo forever start index.js إذا أعاد لك الأمر الأخير رسالة تفيد بعدم وجود forever استخدم الأمر مع المسار الكامل: sudo /usr/local/bin/forever start index.js إذا واجهت رسالة الخطأ التالية: error: Cannot start forever error: script /home/ghost/index.js does not exist. فهذا يعني أنك لست ضمن الدليل الصحيح var/www/ghost/. انتقل إليه أولًا ثم نفّذ الأمر من جديد. الخلاصةتهانينا. لقد تمكّنت من تثبيت Ghost وتعلّمت كيفيّة استخدام Nginx لضبط بروكسي المنافذ. كما تعلّمت كيفيّة الإبقاء على المهام تعمل ضمن الخلفية باستخدام العقدة forever. ترجمة -وبتصرف- للمقال How To Create a Blog with Ghost and Nginx on Ubuntu 14.04 لصاحبه Hamza Shezad.
  19. Ajenti هي لوحة تحكّم عبر الويب حرّة ومفتوحة المصدر يمكن استخدامها لتنفيذ مجموعة كبيرة ومتنوعة من مهام إدارة الخوادم، علاوةً على إمكانية تغطيتها لمجموعة أخرى من المهام عبر تركيب إضافات add-ons كإضافة Ajenti V والتي تسمح بإدارة عدّة مواقع من خلال لوحة تحكم واحدة. في هذا الدرس سوف نشرح تركيب مدوّنة ووردبريس WordPress على لوحة التحكم Ajenti مع الإضافة Ajenti V، حيث أفترض أنك قمت بتركيبهما في وقتٍ سابق. المتطلباتفي هذا الدرس ستحتاج إلى: عنوان نطاق domain مُسجّل ومربوط مع خادوم مُثبّت عليه لوحة التحكم Ajenti مع الإضافة Ajenti V (خلال الدرس سأستخدم النطاق example.com للتوضيح). لوحة التحكم Ajenti مُثبتة ومضبوطة بشكل صحيح مع الإضافة Ajenti V، يمكنك قراءة هذا الدرس لتثبيت Ajenti خطوة بخطوة.الخطوة الأولى: ضبط ووردبريسمن خلال متصفح الويب لديك انتقل إلى عنوان لوحة تحكم Ajenti الخاصة بك مثل https://panel.example.com وسجّل دخولك باستخدام حساب المدير admin الذي أنشأته أثناء تركيب Ajenti و Ajenti V. من الشريط الجانبي وتحت القسم Web اختر Websites. في المرة الأولى قد تُعطى إشعارًا بأنّ الخاصيّة غير مُفعّلة بعد، فقط اضغط على الزر Enable ودع Ajenti V يقوم ببعض عمليات الضبط الضروريّة. الآن سيظهر لنا قسمٌ يُسمى New Website وأسفله حقل نصيّ بعنوان Name. اكتب اسمًا معرّفًا لموقعك في هذا الحقل ثم اضغط على الزر Create، حيث ستلاحظ إدراج الموقع أسفل القسم Websites. اختر Manage لإدارته. أسفل قسم Website Files غيّر المسار srv/new-website/ إلى أي مجلد آخر مثل srv/example.com/. اضغط على الزر Set ثم Create Directory. تذكّر المجلد الذي اخترته، حيث سترفع إليه الملفات بعد قليل. أسفل القسم General أزل تفعيل الخيار Maintenance mode. ثم انقر على Apply changes أسفل الصفحة. الآن من أعلى الصفحة اختر علامة التبويب Domains، اضغط على الزر Add واكتب عنوان نطاقك مثل example.com ضمن المربع النصي الظاهر، ثم انقر على Apply Changes. انتقل إلى علامة التبويب Advanced، وأدخل النصّ التالي ضمن مربع Custom configuration:# This order might seem weird - this is attempted to match last if rules below fail. location / { try_files uriuri/ /index.php?$args; } # Add trailing slash to */wp-admin requests. rewrite /wp-adminscheme://hosturi/ permanent; # Directives to send expires headers and turn off 404 error logging. location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) location ~ /\. { deny all; } # Deny access to any files with a .php extension in the uploads directory # Works in sub-directory installs and also in multisite network # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) location ~* /(?:uploads|files)/.*\.php$ { deny all; }انقر Apply changes. لننتقل الآن إلى لسان التبويب Content ومن القائمة المنسدلة اختر PHP FastCGI واضغط Create. انقر على القائمة Advanced أسفل new PHP entry، وأدخل المحتوى التالي ضمن Custom configuration. انتبه إلى أنه غير متطابق مع محتوى Custom configuration في الخطوة السابقة. try_files uri=404;fastcgisplitpathinfo(.+\.php)(/.+);انقر Apply Changes. انتقل إلى علامة التبويب MySQL أسفل قسم Databases، أدخل اسمًا لقاعدة البيانات، لهذا الدرس سأختار الاسم database_name وانقر على Create. الآن ومن أسفل قسم Users انقر على Create يمكنك الإبقاء على اسم المستخدم وكلمة المرور المولّدة تلقائيًا أو تغييرها إن شئتْ، ولهذا الدرس سأستخدم db_user و db_password على التوالي، عندما يكون كل شيء جاهزًا انقر على Apply Changes. احتفظ بالمعلومات التي أدخلتها جانبًا؛ اسم قاعدة البيانات، اسم المستخدم، وكلمة المرور، حيث ستحتاجها بعد قليل لإكمال إعداد ووردبريس. الخطوة الثانية: رفع الملفاتقبل أن تتمكّن من فك ضغط ملفات نظام ووردبريس أنت تحتاج لأداة فك الضغط zip أولًا. من الشريط الجانبي وأسفل قسم Tools اختر Terminal واضغط على New، انقر على الصندوق الأسود الذي سيظهر أمامك واطبع بداخله الأمر التالي: apt-get install zip unzip بعد انتهاء العملية انقر على X بجوار Terminal 0 أعلى الصفحة. عُد الآن مجددًا إلى قسم Websites واضغط على Manage بجوار موقعك، ثم اذهب إلى لسان التبويب General ضمن موقعك وأسفل القسم Automatic Downloader أدخل http://wordpress.org/latest.zip واضغط على Download and Unpack، حيث ستظهر نافذة طرفية وتتولى عملية تنزيل وفك ضغط حزمة ووردبريس، يمكنك الضغط على الزر X بجوار Terminal 0 في أعلى الصفحة بعد الانتهاء. عُد إلى القسم Tools في الشريط الجانبي وانقر على File Manager ثم توجّه إلى الدليل الذي أنشأته مسبقًا داخل المجلد /srv/ بالنقر على اسم المجلد، هناك يجب أن تُشاهد مجلد باسم wordpress والذي يتمّ إنشائه أثناء تنزيل وفك الضغط التلقائي للحزمة ووردبريس، ادخل إليه وحدد جميع الملفات والمجلدات التي بداخله كما يلي: الآن اختر العملية Cut من شريط الأدوات أعلى الشاشة: عُد إلى مجلدك داخل الدليل /srv/ مثل srv/example.com/ وألصق جميع الملفات والمجلدات بداخله مباشرةً. سيأخذ ذلك بضعة دقائق للانتهاء يمكنك بعدها حذف المجلد الفارغ wordpress. الآن جميع ملفات ووردبريس بداخل المجلد الجذر root لموقعك. الخطوة الثالثة: تركيب ووردبريسفي متصفح الإنترنت لديك انتقل إلى عنوان موقعك مثل http://example.com وستظهر أمامك صفحة ترحيبية من مُثبّت برنامج ووردبريس، اختر اللغة التي ترغب باستخدامها مع البرنامج واضغط على Continue ثم .. !Let’s go. في حقل اسم قاعدة البيانات غيّر القيمة الافتراضية wordpress إلى الاسم الذي اخترته سابقًا (database_name مثلًا هي القيمة التي اخترناها لهذا الدرس)، كذلك أدخل اسم المستخدم وكلمة المرور التي قمتَ بتحديدها. أبقِ قيمة Database host كما هي localhost. كما يمكنك ترك قيمة الخانة Table Prefix على حالها wp_ إلا أنه يُنصح بتغييرها لدواعٍ أمنيّة، مثلا يمكنك كتابة blog_ أو شيء من هذا القبيل، المهم أن لا يتجاوز طول الاسم خمسة محارف وأن ينتهي بالرمز _. الآن يمكنك النقر على زر Run the install لإكمال عملية التثبيت، وبعدها سيتبقى عليك تزويد البرنامج ببعض المعلومات عن موقعك (كالاسم، ومعلومات تسجيل الدخول). الخلاصةفي نهاية هذا الدرس يُفترض أن تكون قد تمكّنت من تثبيت برنامج ووردبريس بنجاح على لوحة تحكم Ajenti الخاصة بك. ترجمة -وبتصرف- للمقال Installing WordPress on Ajenti V لصاحبه Jonah Aragon.
  20. Ajenti هي لوحة تحكّم عبر الوِيب حرّة ومفتوحة المصدر يمكن استخدامها لتنفيذ مجموعة كبيرة ومتنوعة من مهام إدارة الخوادم: كتثبيت الحزم، تنفيذ الأوامر، عرض المعلومات الأساسية عن حالة الخادوم مثل مقدار الذاكرة العشوائية RAM المستخدمة، تحرير مساحة القرص الصلب ...الخ. ويمكن الوصول لكل ذلك من خلال مستعرض الوِيب مباشرةً، علاوةً على إضافة Ajenti V والتي تتيح لنا إدارة عدّة مواقع عبر لوحة تحكم واحدة. نشرح في هذا الدرس كيفيّة تركيب لوحة تحكم Ajenti وإضافة Ajenti V والتي تسمح بإنشاء المواقع وحسابات البريد الإلكتروني من داخل اللوحة. المتطلباتقبل البدء بتثبيت Ajenti أنت تحتاج إلى: عنوان نطاق domain محجوز بالفعل.نظام التشغيل Ubuntu 14.04 مركّب على خادومك الخاص ومضبوط على عنوان مثل panel.example.com.وجود مستخدم عادي non-root يملك صلاحيات الجذر. فجميع الأوامر المذكورة في هذا الدرس ستُطبّق كمستخدم عادي، وفي حال كان الأمر يحتاج إلى صلاحيات الجذر نلجأ إلى الأمر sudo.تركيب Ajentiفي هذه الخطوة سنركّب لوحة التحكم Ajenti الأساسيّة. للبدء اتصل بخادومك عن طريق SSH، وبعد نجاح الاتصال أضف مفتاح المستودع الخاص باللوحة عن طريق المستخدم العادي مع صلاحيات الجذر، وذلك بهدف التحقّق من صحة مصدر الحزمة Ajenti والتي سنعمل على تثبيتها: wget http://repo.ajenti.org/debian/key -O- | sudo apt-key add - ثم أضف مستودع الحزمة إلى ملف المصادر sources list: echo "deb http://repo.ajenti.org/ng/debian main main ubuntu" | sudo tee -a /etc/apt/sources.list الآن قم بتحديث فهارس Index مدير الحزم ثم ثبّت الحزمة المطلوبة: sudo apt-get update && sudo apt-get install ajentiسيسألك مدير الحزم عن رغبتك في تنزيل الحزمة اطبع Y ثم Enter وانتظر لبضعة لحظات ريثما تتم عملية التركيب، أخيرًا فعّل خادوم Ajenti: sudo service ajenti restart إذا كان كل شيء على ما يرام سترى العبارة: * started في آخر سطر ضمن الطرفية، وعندها يمكنك الانتقال إلى الخطوة التالية. ضبط Ajentiسنقوم الآن ببعض التعديلات المهمة على لوحة التحكم، افتح متصفح الوبِ الذي تستخدمه وأدخل العنوان التالي: https://panel.your_domain_name:8000/ أما إذا لم تكن قد ضبطت عنوان النطاق المُسجّل للإشارة إلى خادومك مثل panel.yourdomainname عندها يتوجب عليك التوجه إلى العنوان التالي بدلا عنه: https://your_server_ip:8000/ ملاحظة، بعد دخولك إلى العنوان السابق ستواجه تحذيرًا يتعلق بالخصوصيّة (يظهر كقفل أحمر في متصفح Chrome)، هذا أمر عاديٌ تمامًا، باعتبار أن Ajenti يستخدم شهادة موقّعة ذاتيًا self-signed بشكل افتراضي، ولا يوجد أي داعي لتغيير ذلك، فقط تجاهل هذه الرسالة وكن مطمئنًا إلى أن اتصالك سيبقى آمنًا. في متصفح Google Chrome اضغط على الرابط Advanced في صفحة الخطأ السابقة، ثم انقر على Proceed to panel.example.com... مجددًا لا يُعتبر هذا التصرف غير آمن. الآن لتسجيل الدخول استخدم البيانات الافتراضية التالية: Username: root Password: admin وهكذا ستجد نفسك أمام لوحة تحكم كما في الصورة التالية: قبل البدء بتغيير أية إعدادات، انقر على خيار Password ضمن الشريط الجانبي، وأمام خانة old password اكتب admin ثم عيّن كلمة مرور جديدة. انطلاقًا من هذه اللحظة عندما تريد الدخول إلى لوحة التحكم الخاصة بك استخدم البيانات التالية: Username: root Password: yournewpasswordاضغط الآن على الخيار Configure من الشريط الجانبي الأيسر (تجده أعلى الخيار السابق)، وانتقل إلى أسفل الصفحة واضغط الزر Restart ثم اضغط Ok لتأكيد إعادة تشغيل خادوم Ajenti، حيث سيعرض متصفحك أثناء ذلك عبارة Reconnecting..... إذا لم تجد نفسك أمام لوحة التحكم مجددًا خلال دقيقة؛ أعد تحميل الصفحة، ولا تنسَ استخدام معلومات تسجيل الدخول المُعدّلة. تخصيص Ajentiتُسمى الصفحة الرئيسيّة في Ajenti بلوحة القيادة، والتي يمكن تخصيصها لتُظهر الكثير من المعلومات المفيدة لتسهيل فراءتها فور تشغيل Ajenti، وهي تأتي افتراضيًا مزودة ببعض الودجات widgets كمقدار استهلاك المعالج CPU وزمن التشغيل. لإضافة المزيد من الودجات انقر على زر Add Widget في الزاوية اليمينية العلوية من الشاشة. الإضافاترغم أن Ajenti تحتوي على العديد من الوظائف المتنوعة افتراضيًا، إلا أنك قد ترغب بالحصول على المزيد من الإعدادات أو العناصر القابلة للضبط في لوحة التحكم، وهذا ما يمكن فعله من خلال قسم Plugins. كما ستشاهد فإن بعض هذه الإضافات مُفعّلة بشكل افتراضي، وبعضها غير مفعل (عادةً ما يكون ذلك بسبب اعتماديات غير متوفّرة). يمكنك تركيب أية إضافة بالنقر عليها في قائمة الإضافات Plugins والضغط على الزر المجاور للاعتماديات المطلوبة. أما في حال قمت بتركيب إضافات خارجية بشكل يدوي فسيتوجب عليك إعادة تشغيل خادوم Ajenti وتسجيل الدخول مجددًا قبل أن تظهر الإضافات الجديدة في هذه القائمة. إدارة النظامأسفل قسم System في الشريط الجانبي ستجد العديد من المواد القابلة للضبط لتختار من بينها. فمثلًا يمكنك إدارة القرص الصلب من قائمة Filesystems، أو تغيير nameservers لخادومك من خلال Nameservers، أيضًا تثبيت الحزم والتطبيقات التي ترغب بها من قسم Packages إلى ما هنالك من الخيارات. قائمة Filesystems: قائمة Nameservers: قائمة Users: قائمة Packages: تثبيت Ajenti V لإعداد موقعيمكنك الآن تركيب الإضافة Ajenti V للوحة التحكم الخاصة بك، فيما لو رغبت بإنشاء موقع وِب من خلالها. لعمل ذلك انقر على الخيار Terminal في الشريط الجانبي الأيسر من اللوحة (تجده أسفل قسم Tools) والتي ستزودك بمحاكي للطرفية ضمن متصفح الوِب للاتصال المباشر مع خادومك. انقر على New + أعلى الشاشة ثم انقر في منتصف الصندوق الأسود الفارع الظاهر أمامك لفتح محاكي الطرفية (قد يأخذ دقيقة ليتمّ تحميله). ملاحظة: الأوامر التي تُشغّل ضمن طرفية Ajenti تنفّذ ضمن حساب المستخدم الجذر root. تحرّك إلى أسفل الشاشة، حيث ستشاهد صندوق بعنوان Paste here، انقر عليه لتفعيله والصق بداخله الأوامر التالية بعد نسخها: apt-get install ajenti-v ajenti-v-nginx ajenti-v-mysql ajenti-v-php-fpm ajenti-v-mail ajenti-v-nodejs php5-mysqlثم اضغط على Enter، اطبع Y عند سؤالك عن رغبتك بتركيب الحزم السابقة و اضغط Enter مجددًا. قد تظهر أمامك على الشاشة بعض مربعات الحوار، كهذه: فيما يتعلق بالرسائل التأكيدية اضغط فقط Enter للخيارات التي تُحدّدها، حيث لن تطالب بضبط أي شيء. قد يسألك MySQL عدّة مرات عن كلمة مرور الجذر root، اضغط حينها على Enter لاستخدام الكلمة الحالية. عند الانتهاء اضغط X من جوار Terminal 0 في أعلى الشاشة للعودة إلى الشاشة الرئيسيّة. عُد مجددًا إلى قائمة Configure من الشريط الجانبي وأعد تشغيل Ajenti من خلال الزر أسفل الشاشة، بعد تسجيل الدخول ستشاهد قسم جديد يدعى Web ضمن الشريط الجانبي والذي يحتوي على الخيار Websites أسفله تمامًا، من هنا يمكنك مشاهدة، إدارة، وضبط مواقع الوِب التي تعمل على إنشائها بحيث تتأكّد من أن كل شيء يعمل كما يجب. الخلاصةاستعرضنا خلال هذا الدرس كيفيّة تركيب كل من Ajenti و Ajenti V على خادومك، أمّا لتعلّم كيفية استخدام بعض ميزات لوحة التحكم هذه تابع بقية هذه السلسلة. ترجمة -وبتصرف- للمقال How To Install the Ajenti Control Panel and Ajenti V on Ubuntu 14.04 لصاحبه Jonah Aragon.
  21. ما هو Cron؟Cron هي أداة جدولة تسمح لك بتخصيص المهام ليتمّ تشغيلها في أوقاتٍ مضبوطة بشكل مُسبق، حيث يمكن أن تُستخدم لأتمتة أي شيء تقريبًا على نظام التشغيل الخاص بك لا سيما تلك المهام التي يجب أن تُشغّل على فترات منتظمة. تُعتبر Cron أداةً أساسيّة لمديري الأنظمة إذ تبرع في المهام الروتينيّة التي ينبغي تنفيذها كلّ ساعة/يوم بالمقدار الذي تبرع فيه تجاه المهام التي يجب القيام بها مرةً أو مرتين في العام. نناقش في هذا الدرس كيفيّة استخدام Cron من خلال سطر الأوامر، وفهم ملف الضبط الخاص بها، إضافةً إلى حديثنا عن Anacron، وهي الأداة التي يمكن استخدامها لضمان تشغيل المهام حتى عندما يتم إيقاف تشغيل الخادوم لبعض الوقت. سوف نستخدم في درسنا هذا توزيعة Ubuntu 14.04، ويمكنك بالتأكيد تطبيق الشرح هنا على أي توزيعة غنو لينكس أخرى. كيف تعمل Cron؟تبدأ Cron مع إقلاع النظام وتعمل في الخلفية مع باقي خدمات Daemon، وهذا يعني أنها تعمل دون تدخّل من قبل المستخدم مُترقبةً أحداثًا معينة لتشغيل المهام المضبوطة. بالنسبة لـ Cron فإن هذه الأحداث هي مواقيت محدّدة من الزمن، حيث يعمل Cron في الخلفية ويتحقّق كلّ دقيقة فيما إذا كان من المقرّر تشغيل أمر ما هذه الدقيقة، وذلك تبعًا لملف الضبط الخاص به، وفي حال الإيجاب يُنفّذ Cron الأوامر المُحددّة له بشكل مسبق لهذه اللحظة، ومن ثم يعود للعمل ضمن الخلفية مترقبًا الدقائق القادمة، أما في حال النفي فإنه سينتظر لستين ثانية قبل أن يعاود تحقّقه. ونظرًا لأسلوبه في الجدولة والفحص دقيقةً بدقيقة؛ فإنه يعتبر قابلًا للضبط بشكل مرن للغاية، وحالما تُثبّت Cron على توزيعة غنو لينكس لديك فإنه سيضُبط لتشغيل مجموعة متنوعة من المهام. كيفيّة قراءة Crontabيُقرّر Cron ما هي الأوامر التي سيتم تشغيلها وفي أي توقيت من خلال قراءة مجموعة من الملفات التي يُعرف كلّ منها باسم "crontab"، يمكنك على سبيل المثال مشاهدة ملف "crontab" المطبّق على مستوى النظام system-wide بالنظر إلى محتويات الملف "etc/crontab/": less /etc/crontabSHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts –report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts –report /etc/cron.monthly )يُمثّل الخرج السابق ملف crontab الخاص بالنظام والذي لا ينبغي تعديل محتوياته في معظم الحالات، لذا يجدر بك دومًا كتابة ملف crontab خاص بك، إضافةً إلى أن الملف الخاص بالنظام معُرض للاستبدال عند تحديث النظام مما يعرّض تعديلات للضياع. بكل الأحوال يحتوي الملف السابق على بضعة أجزاء مُهمّة والتي نحتاج إلى فهمها. يُحدِّد أول سطرين الصدفة shell التي ستُنفذ الأوامر المدرجة، والمسار الذي توجد به هذه الأوامر. بينما يُحدّد ما تبقى من الملف الأوامر المجدولة مع مواقيتها، حيث كل سطر في هذه القائمة يمثّل سِجلًا أو صفًا في جدول، بينما تشير مسافات "tab" إلى أعمدة هذا الجدول، وتُمثّل كل خلية بأعمدة مفصولة بمسافات أو علامات تبويب tabs. أما سطر التعليقات (والذي يبدأ بإشارة #) فيشرح ما يمثّله كل عمود من الأعمدة.جدولة الساعات والدقائق باستخدام Cronيُخصّص العمود الأول لدقائق الساعة التي يفترض أن يُنفذ بها الأمر ويأخذ قيمة ضمن (0-59)، بينما يُحدّد العمود الثاني قيمة "ساعة من اليوم" ضمن (0-23)، وتعني علامة النجمة (*) "كل قيمة ممكنة" وتستخدم كعلامة شاملة. من خلال الجمع بين هذين العمودين نحصل على التوقيت الزمني للأمر. على سبيل المثال يحتوي السطر الثاني في الجدول على الرقم 25 ضمن عمود الدقائق و 6 لعمود الساعات: 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) وهذا يعني أن السطر الثاني سيُشغّل في الساعة 6:25 صباحًا. وبالمثل يُشغِّل السطر الأول الأمر الخاص به في الدقيقة 17 من كل ساعة: 17 * * * * root cd / && run-parts --report /etc/cron.hourly لذا سيتم تشغيله في الساعات 1:17am ،2:17am ،3:17am ...الخ جدولة الأيام باستخدام Cronتُحدّد كلًا من العمود الثالث، الرابع، والخامس؛ الأيام التي يجب أن تُشغِّل الأوامر، حيث يُحدِّد العمود الثالث قيمة "يوم من الشهر" ضمن المجال (1-31) (لا تنسَ أن الشهور مختلفة بعدّد أيامها؛ لذا كن حذرًا)، ويحدّد العمود الرابع أيّ الشهور التي ستُنفّذ فيها الأوامر ويأخذ قيمة من (1-12)، بينما يُحدّد العمود الخامس أي يومٍ من أيام الأسبوع التي يجب أن تنفّذ فيها الأوامر ويأخذ قيمة من (0-7). حيث يمكنك الجدولة باستخدام واحدة "الأسبوع" عوضًا عن "الشهر". إذا لم تتطابق خانتا "اليوم من الأسبوع" و "اليوم من الشهر" فإن الأمرّ سينفّذ إذا تحقّق أيٍ منهما. كما يمكن تحديد أيام الأسبوع والأشهر باستخدام الأحرف الثلاثة الأولى من أسمائها. إضافةً للنجمة يمكن استخدام الشرطة (-) لتحديد نطاق ما، واستخدام الفاصلة (,) لتحديد قيم متعدّدة. كما يمكننا تحديد "فاصل زمني" بإتباع قيمة ما مع إشارة "/"، فعلى سبيل المثال لتنفيذ الأمر كل ساعة يمكننا استخدام "*/2" في عمود الساعات. إذا نظرنا إلى ملف crontab سنلاحظ أن السجل الثالث يُشغّل كل أحد الساعة 6:47 صباحا: 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) أما السجل الرابع فهو يعمل أوّل كل شهر في الساعة 6:52 صباحًا: 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )استخدام اختصارات الوقت للجدولةيمكننا استبدال الأعمدة الخمسة الأولى من كل سجل بـ "مُسمى مختصر" إذا لم يكن لديك طلبًا مُعقّدًا، صيغة الاختصار تبدأ بإشارة "@" ويتلوها مُسمى الفترة. فعلى سبيل المثال يمكننا جدولة أمر بحيث يُنفّد كل أسبوع بتحديد "weekly@" بدلًا من إنشاء سجل بخمسة أعمدة، الخيارات الأخرى هي: "yearly" ،"@monthly" ،"@daily@" و "hourly@" إضافةً لذلك لدينا الاختصار "reboot@" والذي يعمل فقط عند تشغيل النظام وبدء تشغيل cron، ولهذا يُسمى بـ "reboot@" وليس "cron-restart"أو شيئًا من هذا القبيل. ضع في اعتبارك دومًا أن هذه الاختصارات لا توفّر إمكانيات تخصيص الأعمدة الخمسة، وبدلًا من ذلك فإنها تضبط الأوامر بحيث تعمل عند أول لحظة ممكنة تتطابق مع الاختصار. فعلى سبيل المثال يُشغّل الاختصار "monthly@" الأمر في منتصف الليل من أوّل الشهر، ما يعني أن جميع الأوامر المضبوطة على هذا الاختصار ستعمل في وقتٍ واحد، حيث لا إمكانية لترتيب هذه الأوامر كما مع أسلوب الأعمدة الخمسة في الضبط. تخصيص الأوامر والمستخدمين مع Cronيشمل العمود السادس والموجود فقط في ملف crontab الخاص بالنظام على اسم المستخدم الذي سيُنفّد الأمر من خلاله. بينما يُحدّد العمود الأخير الأوامر المطلوب تشغيلها، يمكن للأمر أن يحتوي على علامة النسبة المئوية (%) والتي تعني أن كل ما هو بعدها يتم تمريره إلى الأمر كدخل قياسي. ليعمل ملف crontab بشكل صحيح يجب إنهاء كل سجل مع محرف سطر جديد، هذه ليست مشكلة بالنسبة لمعظم السجلات، لكن تأكد من وجود سطر فارغ بعد آخر مُدخل ضمن الملف، وإلا فإنه لن يعمل كما يجب. استخدام ميزة “run-parts” والأدلةلو تمعّنا في الأوامر المكتوبة ضمن ملف crontab السابق والخاص بالنظام، فسنشاهد إشارة إلى ما يسمى "anacron" (المزيد عن ذلك لاحقًا)، إضافةً لـ "run-parts". يتيح لنا الأمر "run-parts" ببساطة تشغيل كل أمر قابل للتنفيذ ضمن مجلّد محدّد، ويستخدم هذا الأسلوب على نحو واسع مع cron لأنه يتيح لنا تشغيل سكربتات scripts عديدة في توقيتٍ واحد عن طريق وضعها في مكانٍ واحد، وهو ما يسمح لأن يبقى ملف crontab مرتبًا وبسيطًا، ويسمح لنا بجدولة المزيد من المهام عن طريق وضعها (أو إنشاء اختصار لها) كسكربتات في الدليل المناسب بدلًا من تعديل ملف crontab. عادةً ما تُخصّص معظم التوزيعات مجلد لكل فترة بحيث يتم وضع السكربتات بها ليتم تشغيلها في تلك الفترة، فعلى سبيل المثال تخصص توزيعة Ubuntu المجلدات التالية: cron.daily ،cron.hourly cron.monthly وcron.weekly. إنشاء ملفات Crontabs للمستخدمينبعد استعراضنا لأساسيات التعامل مع Cron يمكنك الآن البدء بجدولة المهام الخاصة بك عن طريق استخدام الأمر "crontab". لاحظ أن ملف "crontab" الخاص بك لن يحتوى عمود "المستخدم"، لأنه سيتم تشغيل الأوامر المضمّنة به من خلال امتيازات المستخدم الخاصّة بك. لمعرفة الـ crontab الحالي، اكتب: crontab -l غالبًا فلن يكون هناك ملف مسبق إلا إذا كنت قد أنشأت واحدًا بشكل يدويّ، وفي هذه الحالة فمن الأفضل أخذ نسخة احتياطية من الملف الحالي قبل البدء بالتحرير بحيث يمكنك التراجع عن أي تغييرات قد تقوم بها. لأخذ نسخة احتياطية إلى مجلد المنزل باسم "cron.bak"، نفّذ الأمر: crontab -l > ~/cron.back للبدء بتحرير ملف crontab اكتب: crontab -eno crontab for demouser - using an empty one Select an editor. To change later, run ‘select-editor’. 1. /bin/nanoاستخدام Anacron مع Cronواحدة من أكبر نقاط ضعف Cron افتراضها أن خادومك أو جهاز الحاسوب الخاص بك يعمل طوال الوقت 24/7، حيث يُلغى تنفيذ كل مهمة مجدولة في وقتٍ يكون فيه حاسوبك مطفئًا. يعتبر ذلك مشكلة خطيرة مع الأنظمة التي لا يمكن ضمان تشغيلها طوال الوقت، وكحلّ لهذه المشكلة تم تطوير أداة Anacron المبنية على anachronistic لضمان تنفيذ الأوامر طوال الوقت. يستخدم Anacron المُعاملات غير المُفصّلة في خيارات Cron، وهذا يعني أن Anacron تكمل عمل Cron وليست بديلًا عنه. أسلوب عمل Anacron يعتمد على إنشاء ملفات بأختام زمنية time-stamped عند تنفيذ أمر ما مجدول من خلال Cron، فإذا كان الأمر قد جُدول للتنفيذ بشكل يومي إلا أنه قد تم إيقاف تشغيل الحاسوب في الوقت الذي يفترض أن يُنفّذ به الأمر، فعندما يعمل anacron في المرة التالية سيرى أنه قد مضى أكثر من 24 ساعة على آخر تنفيذ للجدول اليومي وهذا ما يعني فوات موعده، فيقوم بتنفيذ الأوامر المجدولة. تملك الأداة anacron جدولًا للمواعيد مثل Cron يدعى "anacrontab" ويخزّن في دليل "etc/" كذلك. لنلقي نظرة كيف يبدو: less /etc/anacrontab# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # These replace cron’s entries 1 5 cron.daily nice run-parts –report /etc/cron.daily 7 10 cron.weekly nice run-parts –report /etc/cron.weekly @monthly 15 cron.monthly nice run-parts –report /etc/cron.monthlyبالعموم فإن بنية الملف شبيهة بملفات crontab السابقة مع عدد أعمدة أقل، وبعض الملاحظات الجديرة بالانتباه. يُحدّد العمود الأول عدد المرات التي يجب تنفيذ الأمر بها تبعًا للأيام، فالقيمة "1" تعني أنّه جيب تشغيل الأمر يوميًا، بينما تشغّل القيمة "3" الأمر كل ثلاثة أيام. يُحدّد العمود الثاني التأخير الزمني قبل تنفيذ الأوامر، حيث لا يعمل Anacron في الخلفية daemon بل يتم تشغيله بشكل صريح لمرة واحدة، وهذا يسمح بتنظيم العمل، فلا تُنفّذ جميع الأوامر دفعةً واحدة. على سبيل المثال يُشغّل السطر الأوّل كل يوم بعد خمس دقائق من استدعاء anacron: 1 5 cron.daily nice run-parts --report /etc/cron.daily بينما يُشغّل السطر التالي أسبوعيًا (كل سبعة أيام) بعد عشرة دقائق من استدعاء anacron: 7 10 cron.weekly nice run-parts --report /etc/cron.weekly يحتوي العمود الثالث على الاسم الذي سيعرّف مهمة السطر في رسائل anacron وفي سجلات النظام، بينما يحتوي العمود الرابع على الأوامر الفعليّة التي سيجري تشغيلها. يمكنك أن ترى أنه قد تم تعيين anacron لتشغيل بعض السكربتات التي تُنفّذ أيضًا من قبل Cron، ولدرء التعارض تلجئ التوزيعات عادةً إلى إعطاء أولوية لإحدى الأداتين على الأخرى بحيث تعمل واحدة منهما فقط على تنفيذ الأمر المجدول. في توزيعة Ubuntu مثلًا يختبر ملف "/etc/crontab/" إذا كانت anacron مُثبّتة على النظام، بحيث يُشغّل السكربتات النصيّة في أدلة cron فقط في حال لم يتم العثور على anacron. بعض التوزيعات تتبع أسلوب آخر بجعل cron يُحدّث الأختام الزمنية ل anacron في كل مرّة يتم فيها تنفيذ مهمة مجدولة مما يمنع anacron عن تنفيذ نفس الأمر عند استدعاءه. خاتمةتعتبر أداتي cron و anacron من أفضل أدوات أتمتة تنفيذ المهام الروتينية، لذا من المهم استيعاب كيفية الاستفادة من نقاط القوّة في كلّ منهما وتجنب نقاط ضعفهما مما يعطيك أقصى قدر من الفائدة والفعالية. ورغم أنه قد يبدو أمر إعدادهم للمرة الأولى مربكًا بعض الشيء، إلا أن ذلك سيوفّر عليك الكثير من الوقت على المدى الطويل في تكرار العمليات مرّةً بعد أخرى دون أن تحتاج غالبًا لتعديلات تذكر على ملفات الإعداد لاحقًا.
  22. تُعتبر الشبكات موضوعًا واسع التفاصيل مليئًا بالتشعبات بالنسبة للعديد من مديري الأنظمة المبتدئين، فهناك الكثير من الأدوات والخدمات التي يجب الإلمام بها لفهم هذه المواضيع بشكل جيّد، كالطبقات Layers المختلفة للإتصال، الواجهات Interfaces، والبروتوكولات Protocols. يُغطّي هذا الدرس مفهوم المنافذ Ports وكيفيّة استخدام برنامج Nmap للحصول على معلومات حول حالة منافذ الجهاز على الشبكة. ملاحظةيُغطّي هذا الدرس النسخة الرابعة من بروتوكول الإنترنت الآمن IPv4. في أنظمة غنو لينكس يُحفظ IPv6 بشكل منفصل عن IPv4، فعلى سبيل المثال تفحص الأداة Nmap عناوين IPv4 افتراضيًا، أما لفحص عناوين IPv6 فنحن نحتاج إلى تحديد الخيار المناسب (nmap -6). إذا ضُبط خادومك لاستخدام IPv6، فلا تنسَ من فضلك تأمين واجهات شبكة كل من IPv4 و IPv6 بالأدوات المناسبة. لمزيد من المعلومات حول أدوات IPv6 يمكنك الرجوع إلى درس كيفية استخدام IPv6 في خواديم غنو لينكس ما هي المنافذ؟يتألف نموذج OSI كما نعلم من سبع طبقات وتُعتبر طبقة النقل transport layer مسؤولة في المقام الأوّل عن الترابط ما بين الخدمات المختلفة و التطبيقات، وهي الطبقة التي ترتبط معها المنافذ بشكل رئيسي. مصطلحات المنافذلنفهم عملية ضبط المنافذ بشكل جيّد نحتاج إلى بعض المعرفة بالمصطلحات المُستخدمة في هذا المجال؛ لذا نعرض هنا عدّة مصطلحات تساعدك في فهم المناقشة التي ستتلوها. المنفذ Port: هو منطقة اتصال قابلة للعنونة، مُطبّقة داخل نظام التشغيل (ليست ماديّة)، تساعد على تمييز حركة البيانات المتجهة لمختلف التطبيقات والخدمات. مقابس الإنترنت Internet Sockets: هو ملف واصف يُحدّد عنوان IP ورقم المنفذ المرتبط به ونوع البروتوكول المستخدم في طبقة النقل لمعالجة البيانات. الربط أو التقييد Binding: هي العملية التي تحجز أو تحدّد مكانًا عندما يستعمل أحد التطبيقات أو الخدمات مقبس إنترنت للتعامل مع البيانات قيد الإرسال والاستقبال. الاستماع Listening: نقول عن خدمة ما أنها “تستمع” على منفذ، عندما يتم تقييد عنوان مركّب من منفذ/بروتوكول/عنوان IP من أجل انتظار الطلبات من عملاء الخدمة. وعند استلام الطلب يُؤسّس اتصال مع العميل (عند الحاجة) باستخدام نفس المنفذ الذي يتم الاستماع إليه، حيث مقابس الإنترنت المستخدمة ترتبط بعنوان IP مُحدّد للعميل، وهذا لا يمنع الخادوم من الاستماع إلى طلبات العملاء الآخرين وتلبية طلباتهم في نفس الوقت. فحص المنفذ Port Scanning: هي العملية التي تسعى للاتصال مع عدد من المنافذ بشكل متعاقب، بغرض الحصول على معلومات حول ما هي المنافذ المفتوحة منها، وما هي الخدمات وأنظمة التشغيل التي تعمل ورائها.المنافذ الشائعةتُحدّد المنافذ بأرقام تقع ضمن المجال من 1 إلى 65535. العديد من المنافذ التي تقع تحت الرقم 1024 ترتبط مع الخدمات التي يعتبرها لينكس والأنظمة الشهبية بيونكس Unix-like حسّاسة أو خطرة لوظائف الشبكة الأساسيّة وتُسمى "بالمنافذ المعروفة"، لذا يتوجب عليك الحصول على صلاحيات الجذر root لتخصيص خدمات هذه المنافذ. تُعتبر المنافذ التي تنتمي للمجال بين 1024 و49151 مُسجّلة، وهذا يعني أنها قد تكون "محفوظة" (بالمعنى الواسع للكلمة) لخدمات معينة، يتم ذلك بتقديم طلب إلى هيئة IANA (الهيئة الدولية المسؤولة عن ذلك)، والتي لا تُطبقها بشكل صارم، وإنما يمكنها أن تعطي دليلًا عن الخدمات التي يمكن تشغيلها على منفذ معيّن. أما المنافذ الواقعة في المجال بين 49152 و65535 فتسمى بالمنافذ المتغيّرة وهي التي لا يمكن تسجيلها، وتُقترح للاستخدام الخاص. ونظرًا لوجود عدد كبير من المنافذ المتاحة، فلا ينبغي القلق حيال الغالبية العظمى من الخدمات التي تربط عادةً منافذ معيّنة. بكل الأحوال هناك بعض الخدمات التي من الجيّد معرفة المنافذ التي ترتبط بها: 20: بيانات FTP 21: منفذ تحكم FTP 22: SSH 23: Telnet. غير آمن، لا يُنصح باستخدامه 25: SMTP 43: بروتوكول WHOIS 53: خدمات DNS 67: منفذ خدمة DHCP 68: منفذ عميل DHCP 80: HTTP traffic. حركة الوِب العاديّة 110: منفذ البريد POP3 113: Ident الخدمات الموثقّة على شبكات IRC 143: منفذ البريد IMAP 161: SNMP 194: IRC 389: منفذ LDAP 443: HTTPS. حركة الوِب المُشفّرة 587: SMTP. منفذ تسليم البريد 631: منفذ خدمة الطباعة CUPS 666: DOOM. منفذ ألعاب 3D هذه فقط بعض الخدمات الشائعة المرتبطة بمنافذ، ويمكنك دومًا أن تجد المنافذ المناسبة للتطبيقات التي ترغب بضبطها ضمن مستندات التوثيق الخاصة بكلّ منها. معظم الخدمات يمكن ضبطها لتستعمل منافذ أخرى غير تلك الافتراضية، لكن ينبغي عليك التأكد دومًا أن كلًا من المخدّم والعميل قد ضُبطا لاستعمال ذات المنفذ. يمكنك الحصول على قائمة صغيرة ببعض المنافذ الشائعة من خلال الأمر: less /etc/services يطبع الأمر السابق قائمة بالمنافذ الشائعة والخدمات المرتبطة بها: … tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol …وسنستعرض لاحقًا عند حديثنا عن nmap كيف يمكنك الحصول على قائمة شاملة بجميع المنافذ. كيفية فحص المنافذ المفتوحة على جهازكهناك عدد من الأدوات التي يمكن استخدامها لفحص المنافذ المفتوحة. واحدة من هذه الأدوات تدعى netstat وهي تأتي بشكل افتراضي مع معظم توزيعات غنو لينكس. يمكنك بسهولة استعراض الخدمات قيد التشغيل عبر تنفيذ الأمر التالي: sudo netstat -plunt Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 785/sshd tcp6 0 0 :::22 :::* LISTEN 785/sshdيعرض الخرج السابق منافذ ومقابس الإنترنت المُستمع عليها والمرتبطة مع خدمات وقوائم كلًا من بروتوكولي UDP وTCP . تركيب Nmapيعتبر اختبار "قابلية الإصابة" جزءًا مُهمًا من عملية تأمين وحماية الشبكات، وهذا يعني أن تحاول التسلل إلى شبكتك الخاصة واكتشاف مواطن الضعف فيها بنفس الطريقة التي قد يتبعها مهاجم ما. ومن بين كل الأدوات المتاحة لهذا الغرض، فإن nmap هي الأكثر شيوعًا وقوّة. لتثبيت nmap على دبيان أو Ubuntu والأنظمة المبنية عليهما: sudo apt-get update sudo apt-get install nmap إحدى الفوائد الجانبية لتثبيت هذا التطبيق هي تحسين ملف تعيين mapping file المنافذ، والذي يضم قائمة أوسع بكثير من الارتباطات ما بين الخدمات والمنافذ. less /usr/share/nmap/nmap-services … tcpmux 1/tcp 0.001995 # TCP Port Service Multiplexer [rfc-1078] tcpmux 1/udp 0.001236 # TCP Port Service Multiplexer compressnet 2/tcp 0.000013 # Management Utility compressnet 2/udp 0.001845 # Management Utility compressnet 3/tcp 0.001242 # Compression Process compressnet 3/udp 0.001532 # Compression Process unknown 4/tcp 0.000477 rje 5/udp 0.000593 # Remote Job Entry unknown 6/tcp 0.000502 echo 7/tcp 0.004855 echo 7/udp 0.024679 echo 7/sctp 0.000000 …لا يُشكّل الخرج السابق سوء جزءًا بسيطًا جدًا من ما يقارب 20 ألف سطر، مزوّدة بحقول إضافيّة، كالعمود الثالث الذي يسرد التردد المفتوح للمنفذ كما هو أثناء إجراء البحث على الإنترنت. كيفية فحص المنافذ باستخدام Nmapيمكن لـ nmap أن يكشف الكثير من المعلومات حول المضيفhost، لذا فإن استخدامه قد يجعل مديري الأنظمة يعتقدون أن شخصًا ما لديه نوايا خبيثة، لهذا السبب اختبر nmap فقط على الخوادم التي تملكها بالفعل أو التي يمكنك إخبار أصحابها بما تريد القيام به. في الحالات الأخرى يمكنك استخدام خادوم scanme.nmap.org والذي يقدّمه فريق عمل nmap لأغراض الاختبار والتعلّم. نبدأ الآن باستعراض بعض العمليات التي يمكنك القيام بها مع nmap، وسوف نستخدم أثناء ذلك صلاحيات الجذر root لتجب إرجاع نتائج جزئية مع بعض الاستفسارات. بعض الأوامر كذلك قد تستغرق وقتًا طويلًا لإكمالها. إجراء فحص لنظام تشغيل المُضيف: sudo nmap -O remote_host إذا كنت قد حصلت على الرد "Note: Host seems down" في اختبار سابق فنحن بحاجة لتخطّي اكتشاف جزء من الشبكة وتحميل المضيف أونلاين، أضف هذا الخيار: sudo nmap -PN remote_host تحديد نطاق باستخدام "-" لفحص عدد من المضيفين دفعةً واحدة: sudo nmap -PN xxx.xxx.xxx.xxx-yyy فحص نطاق الشبكة للخدمات المتوفرة: sudo nmap -sP network_address_range فحص من دون إجراء بحث DNS عكسي على عنوان IP محدد؛ وذلك بهدف تسريع النتائج في معظم الحالات: sudo nmap -n remote_host فحص منفذ مُحدّد بدلًا من كافة المنافذ: sudo nmap -p port_number remote_host لفحص اتصالات TCP مع منفذ مستهدف لدينا ثلاث طرق (موضحة في الأسفل)، نفّذ الأمر التالي: sudo nmap -sT remote_host لفحص اتصالات UDP نفّذ: sudo nmap -sU remote_host لفحص منافذ TCP و UDP المفتوحة: sudo nmap -n -PN -sT -sU -p- remote_host يعتبر فحص SYN من أقوى الفحوص حيث يستغل الطريقة التي يؤسّس بها بروتوكول TCP اتصالًا فيرسل رزمة SYN تسمح بالاتصال مع النظام وعرض المعلومات أول بأول لبدء اتصال TCP، يرسل الجهاز رزمة packet "طلب تزامن" إلى الخادوم، فإذا كان المنفذ مفتوح ولا يوجد جداري ناري يمنع الاتصال حينها يُعيد الخادوم رزمة بـ"إقرار تزامن" synchronized acknowledgment، يعود الجهاز المرسل بإكمال العملية مرسلًا رزمة "إقرار" مجددًا إلى الخادوم، ويتم الاتصال. أسلوب الـ "SYN" في الفحص، من الأكثر الأساليب استخدامًا ويسمى أيضًا فحص half-open لأنه لن يقوم بالاعتماد على النظام وإنشاء اتصال TCP بدلًا عن ذلك تقوم الأداة Nmap بإنشاء وإرسال رزمة لتتصل مع النظام، وفي حال الحصول على استجابة فهذا يعني أن المنفذ مفتوح: sudo nmap -sS remote_host أسلوب آخر يمكن إتباعه للمزيد من التخفي وذلك بإرسال TCP غير صالحة، فإذا توافق المضيف مع مواصفات TCP فحينها سيرسل رزمة عائدة في حال كان المنفذ مُغلقًا. تعمل هذه الطريقة على الخوادم المُشغّلة بأنظمة غير مبنية على Windows. يمكنك استخدام الخيارات "sF", "-sX-" أو "sN-" وجميعها ستعطينا الاستجابة المطلوبة: sudo nmap -PN -p port_number -sN remote_host لمعرفة ما هو إصدار الخدمة التي تعمل على المُضيف يمكنك تجريب الأمر التالي، والذي يحاول تحديد الخدمة ورقم إصدارها باختبار استجابات مختلفة من الخادوم: sudo nmap -PN -p port_number -sV remote_host هناك بالتأكيد عدد آخر كبير من تراكيب الأوامر والتي يمكنك استخدامها مع nmap، لكن يمكن لما سبق أن يشكّل بداية في استكشاف نقاط الضعف وقابلية الإصابة للشبكة الخاصة بك. الخاتمةإن فهم ضبط المنافذ واكتشاف المسارات المحتلمة للهجوم على خادومك هي مهارة أساسية و الخطوة الأولى فقط لتحقيق أمن المعلومات على خادومك الخاص. اكتشاف المنافذ المفتوحة وطبيعة المعلومات التي يمكن الحصول عليها من الخدمات التي تقبل الاتصالات على هذه المنافذ يمنحك المعرفة التي تحتاجها لتأمين الخادوم الخاص بك، حتى المعلومات العرضية التي قد تتسرب من جهازك يمكن استخدامها من قبل المتطفلين في محاولة استغلال نقاط الضعف المعروفة أو تطوير أخرى جديدة، لذا فإنه كلما كان ما يمكن معرفته أقل كلما كان ذلك أفضل. OSI Open Systems Interconnection Basic Reference Model أو النموذج المرجعي الأساسي لترابط الأنظمة المفتوحة، هو نموذج مرجعي وضعته منظمة المعايير الدولية ISO عام 1977 ليكون مرجعًا أو نموذجًا يشرح كيف يجب أن تُصمم البروتوكولات بطريقة معياريّة.
  23. واحدة من الإمكانيات الأساسيّة التي يجب أن تتمتّع بها معظم خوادم الإنترنت؛ القدرة على استقبال وإرسال المعلومات إلى الأجهزة الأخرى المُتصلة بالشبكة، فعلى الرغم من أن الناس تنظر عمومًا إلى الخوادم باعتبارها منصات تزويد بالمحتوى، إلا أنها يجب أن تملك القدرة على استقبال المحتوى لأسبابٍ عديدة. وفي حين أنّ معظم حزم البرامج في غنو لينكس متوفرة ضمن المستودعات الرسمية لكل توزيعة ويمكن تحميلها وتركيبها باستخدام أدوات مدراء الحزم المعروفة، إلا أنّ باقي أنواع الملفات والمعلومات تستخدم آليات مختلفة. نناقش في درسنا هذا بعضًا من الطرق الشائعة لتحميل الملفات والمعلومات إلى خادوم لينكس الخاص بك. سوف نستخدم بشكل رئيسي خادوم يعمل بنظام Ubuntu 14.04 لتطبيق الأمثلة الواردة هنا، إلا أنه يمكنك المتابعة معنا بالتأكيد بغض النظر عن إصدار ونوع توزيعتك. الحصول على البيانات والتطبيقات من المستودعاتقد يكون استخدام المستودعات الرسميّة لجلب الحزم والتطبيقات إلى خادومك أكثر الطرق شيوعًا. تُشير المستودعات في سياقنا هنا إلى عدّة أشياء مختلفة، فقد تُعبّر مثلًا عن المجموعات الكبيرة من التطبيقات المتوفرة بصيغة مُترجمة compiled جاهزة للتثبيت، والتي تمّ اختبارها وضبطها بحيث تناسب التوزيعة التي تستخدمها. إضافةً لذلك لدينا المستودعات المصدرية، والتي تحتوي على كافة الملفات الضروريّة لبناء تطبيق ما انطلاقًا من المصدر. وسنتناول كلا النوعين من المستودعات فيما يلي. تركيب البرامج من المستودعات العاديّة لتوزيعتكالطريقة القياسيّة لتركيب البرامج في بيئة غنو لينكس هي استخدام مدير الحزم، والمُعدّ مسبقًا للاتصال مع مجموعة من الخوادم المُجهزّة بمستودعات تضم آلاف الحزم التي تمّ فحصها، تحزيمها، واختبار توافقها مع النظام. تستخدم توزيعات غنو لينكس أنواعًا مختلفة من صيغ التحزيم ومدراء الحزم لإنجاز ذلك. وتعتبر صيغة التحزيم deb. الأكثر شهرةً، وهي الصيغة المُستخدمة في توزيعة دبيان و Ubuntu وعدد آخر من مشتقاتهما، ولدينا أيضًا صيغة التحزيم rpm. والتي تُستخدم عادةً في توزيعة RedHat والتوزيعات المبنية عليها مثل CentOS و Fedora، أخيرًا هناك بعض التوزيعات التي تستخدم نظامًا ثالثًا أبسط مما سبق وهو صيغة التحزيم tar.xz. كتوزيعة Arch Linux. وفي العموم، فإن التوزيعات التي تستخدم التحزيم ذو اللاحقة deb. تعتمد على مدير الحزم apt، بينما تعتمد التوزيعات التي تستخدم تحزيم rpm. على مدير الحزم yam أو إصداره المُحدّث dnf. وباعتبار أن Arch Linux تُحزّم البرامج بصيغة ثالثة، فإنها تملك كذلك مدير حزمها الخاص والذي يدعى pacman لإدارة عمليات التثبيت والحذف وما إلى هنالك، يمكنك قراءة المزيد عن كيفيّة استخدام pacman من خلال صفحة الويكي الخاصّة به في موسوعة Arch. كيفيّة استخدام أرشيف الحزم الشخصيّ PPAواحدة من الطرق الإضافيّة للحصول على البرامج والتطبيقات في الأجهزة العاملة بنظام Ubuntu هي استخدام أراشيف الحزم الشخصية أو ما يعرف بـ PPA، والتي تُكسب توزيعة Ubuntu مرونة جيّدة. تشير الـ PPA بشكل أساسيّ إلى مستودع على الإنترنت، عادةً ما يشمل واحدة أو عددًا قليلًا من الحزم، و يدار بواسطة شخص أو فريق عمل مستقل عن قنوات Ubuntu الرسميّة، مما يزوّد المستخدمين بمصادر إضافيّة لمدير الحزم، بحيث تصبح التطبيقات المخزّنة ضمن هذه المستودعات متاحة للتركيب بشكل سلس إلى جانب الحزم الأخرى. تتمتع أراشيف الحزم الشخصيّة بعددٍ من المميزات إذ تُمكّنك من الحصول على أحدث نسخ التطبيقات بين إصدارات Ubuntu الرسميّة كلّ ستّة أشهر، حيث عادةً ما يترك فريق Ubuntu مهمة تحديث نسخ البرامج الجديدة حتى موعد الإصدار القادم من التوزيعة، إضافةً إلى إتاحة الوصول لمجموعة أوسع من التطبيقات التي لا يقوم فريق Ubuntu الرسمي بتحزيمها أصلًا، فيما لو توفر فريق من المتطوعين الذين يتخذون على عاتقهم مهمة توفير هذه الحزم. والميزة الأهم عن البناء من المصدر هي أن هذه الحزم تُدار بواسطة أدوات مدير الحزم التقليدي، وهذا يشمل إمكانية استقبالها للتحديثات بشكل دوري ودمجها مع نظام التحزيم العام، الأمر الذي يسهّل عليك عددًا من المهام كحل مشاكل الاعتماديات. وفي المقابل هناك بعض المساوئ التي تعتري هذا الأسلوب بطبيعة الحال، أحدها أنك ستضع الكثير من الثقة في مشرفي ومطوري مستودعات PPA. فبينما هناك أسباب وجيهة لمنح منتجي Ubuntu هذه الثقة، فإنه يتوجب عليك أن تسائل نفسك فيما إذا كانت مستودعات PPA تُقدَّم من قِبل جهة جديرة بالثقة. فحتى لو لم يملك المطورون أغراضًا خبيثة، فقد لا يدركون بالشكل المثالي المحاذير الأمنيّة مما قد يُسبّب مخاطر جديّة عن غير قصد. أمرٌ آخر يجب أن تحتفظ به في ذهنك، ألا وهو فترة حياة مستودعات PPA، إذ عليك أن تملك خطّة عمل فيما لو توقّف الدعم فجأةً عن هذه المستودعات من قبل المصدر، ثم هل تملك الوقت لمراقبة الحالات التي تُقرّر فيها توزيعتك أخيرًا إضافة الدعم رسميًا لهذه الحزم من خلال المستودعات الافتراضية؟ قبل أن نتابع، قد يتوجب عليك تركيب الحزمة التالية في Ubuntu لتسهيل إدارة مستودعات PPA، والتي يختلف اسمها تبعًا للإصدار الذي تستخدمه، إلا أنه يجب أن تكون قادرًا على استخدام أحد هذين الخيارين: sudo apt-get update sudo apt-get install python-software-properties # For Ubuntu 12.04 and lower sudo apt-get install software-properties-common # For Ubuntu versions > 12.04 بعد ذلك يمكنك إضافة مستودعات PPA بواسطة الصيغة العامة التالية: sudo add-apt-repository ppa:PPA_name ولتفعيل المستودع الجديد ينبغي تحديث فهرس الحزم للحصول على المعلومات الجديدة من PPA المُضاف، وأخيرًا يمكنك تركيب البرنامج الجديد الذي يُقدّمه المستودع كالعادة: sudo apt-get update sudo apt-get install new_packageمستودعات Gitتُعتبر Git نوعًا آخر من المستودعات والتي يُرجّح أنك سمعت بها من قبل، في الأصل فإن Git هو برنامج مُوزّع وغير مركزي لإدارة إصدارات البرامج وتسهيل المشاركة في تطويرها وإدارة نُسخها، فإذا كان البرنامج الذي تبحث عنه مُستضافًا على مستودع git أو بواسطة إحدى خدمات الوِب لاستضافة البرمجيات باستخدام git مثل GitHub، Bitbucket، private GitLab، فيمكنك حينها تنزيل نسخة من الملفات بسهولة عن طريق الأمر git. في البداية دعنا نتأكد من وجود الأداة git مُثبّتة على نظام التشغيل: sudo apt-get update sudo apt-get install git بعد ذلك يمكنك إنشاء مجلّد جديد والانتقال إليه لتحفظ المشروع وتستنسخ مستودعه باستخدام المعلومات التي يقدّمها موقع الاستضافة. فعلى سبيل المثال للحصول على رابط URL لمستودع مشروع في موقع GitHub انظر إلى الجانب الأيمن: يمكنك الآن نسخ عنوان الرابط URL وتمريره بعد ذلك إلى الطرفية باستخدام الأمر: git clone https://github.com/user/project.git ينسخ الأمر السابق المشروع بالكامل إلى الدليل النشط في الطرفيّة. موارد الويب العامّةفي حين أن استخدام المستودعات لإدارة البرامج أمرٌ سهل، ويوفّر طريقة رائعة لتتبّع الترقيعات والإصدارات الجديدة، إلا أنها قد لا تكون الطريقة المتاحة دومًا لأسباب عديدة؛ من ذلك أن عددًا آخر من التطبيقات غير موجودة لا يتوفر ضمن مستودعات، كما أنك قد تحتاج إلى أنواع أخرى من البيانات (غير حزم البرمجيات) على الخادوم الخاص بك. ولهذه الحالات نحن نحتاج إلى مجموعة أخرى من الأدوات التي يمكن أن تساعدنا. سنناقش فيما يلي عددًا من الطرق متفاوتة التعقيد، لهذا الغرض. تحميل ونقل البيانات عن بُعدقد تكون الطريقة الأكثر بداهةً لتحميل البيانات إلى الخادوم الخاص بك هي تنزيل هذه البيانات إلى حاسوبك المنزلي أولًا ومن ثم إعادة رفعها إلى الموقع. وعلى الأرجح أنك استخدمت هذه الطريقة بالفعل لرفع بعض المحتوى إلى موقعك، فرغم أنها قد لا تكون الأكثر أناقة إلا أنها سهلة بالتأكيد. أي نوع من المحتوى، كالملفات والحزم، والتي ترغب بتضمينها في موقعك، يمكن تنزيلها إلى حاسوبك باستخدام متصفحات الوبِ التقليديّة. تأكد عند تحميلك تطبيق ما من حصولك على الإصدار الصحيح المطابق للتوزيعة المُثبتة على خادومك، بما في ذلك نوع الحزمة، إصدارها، ومعماريتها (في حال كان المصدر يتيح ذلك). بعد ذلك، يمكنك نقل هذه الملفات بسهولة إلى خادومك، الطريقة التي أنصح باتباعها هي الاتصال عبر sftp، والتي ستؤّمن لك اتصالًا آمنًا ويسيرًا لنقل الملفات، يمكنك قراءة درسنا عن استخدام sftp من سطر الأوامر. الطريقة الأخرى هي استخدام عميل FTP مع إمكانية sftp، والتي شرحناها في درسنا هنا عن استخدام تطبيق FileZilla مع sftp. هذه غالبًا الطرق الأكثر مرونةً لتزويد خادومك بالمحتوى، حيث تتيح لك نقل الملفات الجديدة التي أنشأتها إضافةً إلى تلك الموجودة على الوِب. تصفح الوب من خلال الطرفيّةهناك طريقة أخرى أجدها ممتعة لتزويد موقعك بالمحتوى وهي استخدام متصفح الإنترنت ضمن الخادوم. وعلى الرغم من أنه يمكنك تثبيت واجهة رسومية على الخادوم الخاص بك ومن ثم استخدام أحد المتصفحات التقليدية إلا أنني أعتبر ذلك نوعًا من المبالغة المُسرفة غير الضرورية، طالما هناك بديل آخر، ألا وهو استخدام المتصفحات المُخصّصة للاستعمال ضمن الطرفيّة نفسها والتي تسمح لك بزيارة المواقع واستعراض محتواها النصيّ. لنستعرض الآن بعضًا من الخيارات المتوفرة لمتصفحات الوِب من خلال الطرفية. lynxيعتبر lynx أقدم متصفح وِب لا يزال تطويره واستخدامها نشطًا، كما أنه سهل الاستخدام، بشكل أساسي يتمّ التصفح باستخدام السهمين العلوي والسفلي للتنقل بين روابط الصفحة، وللضغط على رابط ما يتم تحديده بدايةً ثم الضغط على مفتاح الإدخال Enter أو السهم اليمني. قد لا يكون lynx متاحًا بشكل افتراضي على نظام التشغيل لديك، إلا أنه يمكنك تثبيته بسهولة من مدير الحزم: sudo apt-get update sudo apt-get install lynx يدعم متصفح lynx كلًا من ملفات تعريف الارتباط cookie والعلامات المرجعيّة bookmarks، كما يمكنه تلوين خرجه فيما لو دعمت الطرفية التي تستخدمها ذلك، وفي العموم يمكنك استخدامه لزيارة أي نوع من المواقع باستثناء تلك التي تعتمد على إضافات خارجية (كجافاسكربت أو فلاش) لتوفير وظائفها. هنا على سبيل المثال استعرضنا موقع أكاديمية حسوب باستخدام المتصفح lynx ضمن طرفية mlterm: linksيقدّم links أداةً أخرى رائعة لتصفح الوِب من خلال الطرفيّة، ويتميز عن سابقه بأنه يحتوي على شريط قوائم علوي مماثلًا للمتصفحات التقليديّة (يمكن تفعيل شريط القوائم بالضغط على زر ESC). لتثبيت links في حال لم يكن مُثبتا بالفعل؛ استخدم مدير الحزم كالعادة: sudo apt-get update sudo apt-get install links وفي حين أنه لا يدعم تلوين النصّ بشكل افتراضي، مما قد يجعل من الصعب إلى حدٍ ما التمييز بين النصوص الصرفة وعناوين الروابط، إلا أنه يستفيد من ميزات مكتبة ncurses البرمجيّة لتقديم واجهة مرتبة بشكل جيّد، حيث أن استعراض موقع رسومي من خلال متصفحٍ نصيّ سيسبب دومًا مشاكل في التنسيق، links يتولى المهمة على نحوٍ جيّد. ميزة أخرى مهمة قد تجعلك تُقرّر استخدام links وهو دعمه لاستخدام الفأرة، وهذا يعني إمكانية الدخول إلى الروابط واستعراضها عن طريق النقر على عناوينها باستخدام المؤشّر كما لو كنت تتعامل مع متصفحك التقليدي. elinksفي عام 2001 اشتق elinks من متصفح links وأضيفت إليه ميزة دعم الامتدادات extended مع الاستفادة من قوّة وآليات عمل البرنامج الأب. للحصول على elinks في Ubuntu عن طريق مدير الحزم apt نكتب: sudo apt-get update sudo apt-get install elinks يتفوقelinks على links بعددٍ من الميزات، كقدرته على التعامل مع كلمات المرور وإدارة النماذج forms، تعدّد الألسنة، ودعم الجافاسكربت جزئيًا، بالإضافة إلى دعم بروتوكولي التورنت وIPv6، ورغم أن هذه الميزات قد تأتي على حساب السرعة، إلا أنه فرق بسيط للغاية. w3mw3m متصفحٌ نصيٌّ آخر يمكن اعتباره الأسهل في الاستخدام وبشكلٍ مشابه للتعامل مع المتصفح الرسومي، كما يأتي مع العديد من الميزات الأخرى، فعلى سبيل المثال تسمح لك معظم المتصفحات النصيّة بالتنقل بين الروابط، لكن التنقل خلال الصفحة نفسها قد لا يكون متاحًا بسهولة، w3m يسهّل هذه العملية عن طريق استخدام TABs للتنقل بين الروابط واستخدام مفاتيح الأسهم لتحريك المؤشر بشكل مستقل لتمرير الصفحة. عادةً ما يأتي w3m مُثبت بشكل افتراضي مع العديد من الأنظمة، أما إذا لم يكن مضمنًا في خادومك فيمكنك إضافته عن طريق تنفيذ: sudo apt-get update sudo apt-get install w3m إحدى المزايا التي قد تهم البعض هي إمكانية استخدام الأوامر المستعملة في برنامج vi، على سبيل المثال يمكن تحريك مؤشر الفأرة بواسطة الأزرار ‘j’, ‘k’, ‘l’, و ‘h’. أدوات التنزيلسيكون من المفيد أحيانًا أن تكون قادرًا على تصفح الإنترنت من الخادوم نفسه باستخدام الأدوات السابقة، إلا أنك ستجد نفسك في نهاية المطاف ترغب بالعودة إلى حاسبك الخاص للتصفح من خلال متصفحات الوِب الرسوميّة باعتبار ذلك أمرًا أكثر كفاءة، كما ستشعر بالثقة بأنّ ما تشاهده هو تمامًا ما يُفترض أن تحصل عليه. لهذه الأسباب يلجأ معظم الناس إلى تصفح الوِب من خلال المستعرضات التقليدية ومن ثم نسخ ولصق الروابط إلى الطرفية لاستخدامها مع أحد أدوات التنزيل. wgetتُعتبر الأداة wget خيارًا ممتازًا للحصول على الصفحات أو الملفات من المواقع. إذا لم تكن تملك wget مسبقًا على خادومك، يمكنك الحصول عليها عن طريق تنفيذ: sudo apt-get update sudo apt-get install wget كلّ ما عليك فعله بعد ذلك لتنزيل الملفات من الإنترنت هو لصق عنوان الرابط URL في الطرفيّة بعد استدعاء الأداة: wget www.example.com إذا كان عنوان الرابط URL المُستخدم يُشير إلى موقع على شبكة الإنترنت فإنه سيجري تحميل الفهرس أو الصفحة الرئيسيّة له، وفي حال كان الرابط يعيد توجهيك إلى ملف فسيتم تحميل هذا الملف ضمن الدليل النشط. وهكذا فأثناء تصفحك الإنترنت من خلال جهاز الحاسوب الخاص بك في المنزل، وحالما ترغب في تحميل ملف ما من الشبكة، انقر بزر الفأرة الأيمن على الرابط ثم اختر شيئًا مشابهًا لـ "انسخ عنوان الموقع" أو "copy link location"، ثم قم بلصق العنوان في الطرفية مسبوقًا باستدعاء الأداة wget. إذا حصل وقوطعت عملية التحميل لأي سبب (مثل ضُعف الاتصال بالإنترنت)، فإنه يمكنك استخدام wget مع الخيار c- والذي يستأنف التحميل الجزئي في حال تمّ العثور على ملف غير مكتمل في الدليل النشط. wget -c www.example.com تدعم الأداة wget التعامل مع ملفات تعريف الارتباط Cookies مما يجعلها مرشحًا جيدًا للنصوص التنفيذية scripting إضافةً إلى قدرتها على تحميل موقع وِب بالكامل. curlتُعتبر الأداة curl خيارًا جيدًا كذلك لهذا النوع من العمليات، ففي حين تعمل wget بواسطة جلب الملفات، فإن curl تستخدم الخرج القياسي مما يجعلها أداة مثالية للاستخدام مع السكربتات والأنابيب scripts and pipes، بالإضافة إلى دعمها عددًا كبيرا من البروتوكولات، وتمكّنها من التعامل مع أساليب توثيق http بشكل أكفأ من wget. تأتي العديد من أنظمة التشغيل مجهزة مع curl بشكل افتراضي، إذا لم يكن نظام تشغيلك كذلك: sudo apt-get update sudo apt-get install curl وبينما تستخدم curl الأنابيب عادةً، إلا أنه يمكنك أيضًا حفظ خرجها بسهولة إلى ملف، وهذا ما تريده غالبًا إذا كنت ترغب بتحميل ملفات لرفعها إلى خادومك. لتنزيل ملف وحفظه بالإبقاء على اسمه الافتراضي نفّذ: curl -O www.example.com/index.html يتوجب علينا تحديد الملف لأن هذه هي الطريقة التي نُعلم بها curl بالاسم المحليّ للملف. أما إذا كنت تريد أن تختار اسم للملف المحلي، فنحن لسنا بحاجة للإشارة إلى ملف معيّن في عنوان الموقع إذا كان ما نريده هو فهرس دليل الموقع، بدلًا من ذلك يمكننا أن نشير اختياريًا إلى الموقع وأيا يكن ملف الفهرس فإنه سيُهيئ ليوضع في الملف الذي اخترناه: curl -o file.html www.example.com لا تقتصر فائدة هذه الطريقة على تنزيل فهارس الأدلة وإنما تعمل بشكل جيّد أيضًا لتنزيل ملف بالاسم الذي تختاره. الخاتمةكما ترى فإنه لدينا عدد غير قليل من الخيارات المختلفة للحصول على الملفات، التطبيقات، والمواد المختلفة من الإنترنت لتمريرها إلى الخادوم الخاص بك. وفي حين أن كلا منها لديه القدرة على جلب المحتوى من شبكة الإنترنت فلا يوجد أداة واحدة من بينها مناسبة لجميع أنواع التحميلات؛ لذا فمن المفيد أن نتعرف على الأدوات المتاحة أمامنا لنكون قادرين على الاستفادة من نقاط القوّة في كلّ منها والتي صُممت أساسًا من أجلها، وهذا ما سوف يساعدك على تجنب القيام بأعمال لا لزوم لها، ويعطيك المرونة في الطريقة التي تقارب بها مشاكلك. تُرجم وبتصرف من مقال How To Download Software and Content onto your Linux VPS لكاتبه Justin Ellingwood. ncurses: هي مكتبة برمجيّة تُزوّد التطبيقات بواجهة برمجيّة لتسهّل على المطورين كتابة واجهات نصيّة لبرامجهم تعمل ضمن الطرفية بطريقة أقرب للبرامج الرسوميّة. Pipes: الأنبوب، هي أداة يمكن أن تُشغّل عدّة أوامر في لينكس بشكل متعاقب بحيث تفصل بين كل أمرين؛ مُرسلةً خرج العملية السابقة ليكون دخل العملية اللاحقة.
  24. يشكّل ضبط إعدادات المستخدمين والمجموعات في لينكس واحدًا من المهارات الأساسية لإدارة نظام التشغيل، ويتضمن ذلك مراقبة تسجيلات الدخول الممكنة لكافة مكونات النظام. نستعرض في هذا الدرس المعلومات الأساسية عن إدارة المستخدمين وتسجيلات الدخول، سنطبق أمثلتنا على توزيعة Ubuntu 14.04 إلا أنه يمكنك بالتأكيد المتابعة مهما كانت التوزيعة التي تستخدمها. استعراض المستخدمين الحاليينتخزّن أسماء ومعلومات جميع مستخدمي نظام لينكس ضمن ملف etc/passwd/ سواءً أكانت تشير إلى مستخدمين حقيقيين (مثلي ومثلك) أو مرتبطة بتشغيل إحدى الخدمات أو وظائف النظام. يتضمن الملف etc/passwd/ معلومات حول المستخدمين المنشأين على نظام التشغيل موزعة على عدّة أسطر، بحيث يُخصّص سطر لكل مستخدم، لنلقِ الآن نظرة على محتويات الملف: less /etc/passwdroot:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh … ينقسم كل سطر من الأسطر السابقة إلى عدّة خانات يفصل بينها علامة النقطتين (:)، وما يهمنا من هذه الخانات حاليًا هي الخانة الأولى والتي تعبّر عن الاسم الفريد لكل مستخدم، كما يمكن من خلال الأمر التالي الحصول على القائمة السابقة مُضمّنة بأسماء المستخدمين فحسب: cut -d : -f 1 /etc/passwdroot daemon bin sys sync games … وكما ترى حصلنا في هذه المرة على أسماء المستخدمين فقط، السطر الأول مثلًا يحوي اسم المستخدم الإداري ذي الصلاحيات المطلقة root، كما ستجد في القائمة اسم المستخدم الخاص بك، وبين هذا وذاك هناك عددٌ آخر من المستخدمين قد لا تكون مُلِمًا بوظائفهم، مثل المستخدم dbus والذي يُشغّل بواسطة خدمة dbus، أو polkitd المسؤول عن خدمة polkit، وهكذا.. ففي لينكس يتم فصل صلاحيات المهام كلًّا على حدى، وبهذه الطريقة نضمن ألّا تنتقل أيّة مشاكل محتملة في خدمة ما إلى سائر مكونات النظام. استعراض المجموعات الحاليةتخزّن أسماء المجموعات وبعض المعلومات عنها في ملف etc/group/، والذي يمكننا استعراض محتوياته بالأمر التالي: less /etc/grouproot:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: … وكما ترى فإن معظم الأسماء هنا ورد ذكرها في قائمة "المستخدمين الحاليين" منذ قليل، وهذا يدفعنا للتساؤل؛ لمَ؟ يعود السبب في ذلك إلى ما يسمى بـ"مجموعات المستخدم الخاصة" user private group أو UPG، وهو أسلوب في الإدارة والإعداد يسهّل إدارة المجموعات في لينكس، بحيث تنشئ مجموعة خاصة بكل مستخدم تتم إضافته، وتحمل هذه المجموعة ذات اسم المستخدم، وتُعيّن لتكون مجموعته الرئيسيّة، ويكون هو عضوها الوحيد، وحينها يغيّر قناع الطرح لـ umask من 022 إلى 002. ماذا يعني ذلك؟ تسمح هذه العملية بمزيد من المرونة في حالة عمل فريق ما ضمن مشروع، فبدلًا من أن تعود ملكية كل ملف يتم إنشاؤه في المشروع إلى الشخص المُنشئ، تنسد ملكية الملفات في هذه الحالة إلى ذات المجموعة المالكة للمجلد الأب، مما يسهل عملية التشارك. يتم ذلك عبر صلاحية تسمى setgid، إلا أنّ ذلك كلّه خارج نطاق موضوعنا اليوم. هنا أيضًا يمكن عرض أسماء المجموعات فقط من مجمل محتويات الملف etc/group/ عبر الأمر: cut -d : -f 1 /etc/grouproot daemon bin sys adm tty disk … معرفة المستخدم المُسجّل حاليًايتيح الأمر w في لينكس معرفة المستخدم النشط حاليًا على نظام التشغيل بالإضافة إلى مجموعة من المعلومات المهمة عنه، مثل توقيت تسجيل الدخول والأمر المستخدم حاليًا: w19:37:15 up 5:48, 2 users, load average: 0.33, 0.10, 0.07 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 rrcs-72-43-115-1 19:15 38.00s 0.33s 0.33s -bash demoer pts/1 rrcs-72-43-115-1 19:37 0.00s 0.47s 0.00s w إضافة للأمر w تعرض التعليمة who معلومات أكثر اختصارًا، تتضمن اسم المستخدم النشط وتوقيت دخوله فقط: root pts/0 2013-09-05 19:15 (rrcs-72-43-115-186.nyc.biz.rr.com) demoer pts/1 2013-09-05 19:37 (rrcs-72-43-115-186.nyc.biz.rr.com) تقييد تسجيلات دخول المستخدمينتقييد تسجيلات الدخول باستخدام etc/passwd/يمكن من خلال التعديل على ملف etc/passwd/ تقييد تسجيل دخول أحد المستخدمين عن طريق إسناد قيمة معينة للصدفة shell المحدّدة له، لنفترض أنه لدينا مستخدم مسجّل بالاسم "messagebus" ضمن ملف etc/passwd/: less /etc/passwd | grep messagebus messagebus:x:102:104::/var/run/dbus:/bin/false قيمة الحقل الأخير في الخرج السابق تعبّر عن الأمر الذي يتم تنفيذه عقب تسجيل الدخول بنجاح، وهي في مثالنا هنا bin/false/. فإذا حاولت تسجيل دخول المستخدم messagebus كمستخدم جذر root فستلاحظ عدم نجاح المحاولة، وفشل التحويل إلى المستخدم الجديد: sudo su messagebus لنحاول الآن تسجيل الدخول بواسطة المستخدم sshd: sudo su sshd This account is currently not available.حصلنا على الرسالة السابقة بسبب قيمة الصدفة shell المستخدمة لـ ssh وهي usr/sbin/nologin/. less /etc/passwd | grep sshd sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin أظن أنك قد عرفت الآن كيف نمنع دخول أحد المستخدمين بواسطة هذه الطريقة؟ ببساطة سنستخدم الأداة usermod لتغيير قيمة الصدفة shell من إحدى قيمها المسموحة إلى أخرى وهمية: sudo usermod -s /usr/sbin/nologin usernameتقييد تسجيلات الدخول باستخدام etc/shadow/يتيح التعديل على ملف etc/shadow/ طريقة أخرى مشابهة لتقييد تسجيلات الدخول، وهو ملف يضم كلمات سر مستخدمي النظام بشكل مشفّر، ولاستعراض محتوياته يمكننا كتابة الأمر التالي في الطرفية: sudo less /etc/shadowroot:6r79Dod3Y$3hi3QklpGEQMxwQGEss4ueNNPkoUrqUe3SwyAacaxl.Lmgq1r9i4mTblV1z6NfKMNXH1Cpnq.4iKhOiQd7Riy1:15953:0:99999:7::: daemon:*:15455:0:99999:7::: bin:*:15455:0:99999:7::: sys:*:15455:0:99999:7::: sync:*:15455:0:99999:7::: games:*:15455:0:99999:7::: man:*:15455:0:99999:7::: …يُعرَض الخرج السابق على عدّة أسطر، بحيث يُخصّص سطر لكل مستخدم، ويضم كل سطر اسم المستخدم في الخانة الأولى، وكلمة السر بشكل مشفّر في الخانة الثانية "6r79Dod3Y#3…" مسبوقة بإشارة ($)، أما الخانات التي تبدأ بعلامة النجمة (*) ولا تتلوها قيمة مشفرة من المحارف فهي تخصّ المستخدمين المتعلقين بإدارة خدمات النظام، والتي لا تملك كلمات مرور، ولا يمكنها تسجيل الدخول كمستخدم عادي. يمكننا تعطيل خانة كلمة المرور لأحد الحسابات بوضع إشارة التعجب(!) أمام قيمتها المشفّرة (تسمى هذه العملية بقفل الحساب)، ولإجراء ذلك يمكننا الاستعانة بواحدة من الأداتين التاليتين: أولًا الأمر passwd والذي يتيح قفل حساب مستخدم ما بواسطة الخيار "l-" أو إلغاء قفله مع الخيار"u-": sudo passwd -l username sudo less /etc/shadow | grep username username:!$6$vpNJ3oFe$5GSh2aU2BDcpdjvQeNFzh0zTgyRUl26x4dn77mFE/vaoXwd19m7okX44jO8TWaVqNRL8vUVTAcZVmgUT8dR.4.:15953:0:99999:7:::وكما ترى فإن كلمة المرور تبقى موجودة ضمن الملف بقيمتها المشفرة إلا أنها غير فعّالة بسبب وجود إشارة التعجب (!) أمامها. ولإلغاء قفل الحساب مجددًا يمكننا كتابة: sudo passwd -u username بِذَات الطريقة يمكن استخدام الأمر usermod لقفل أو إلغاء قفل حسابات المستخدمين وفق الخيارات "L-" و "U-" على الترتيب: sudo usermod -L username sudo usermod -U username يجب الانتباه هنا إلى أن هذه الطريقة في القفل تعمل مع حسابات المستخدمين العاديين أي تلك التي تستخدم كلمة مرور لتوثيق دخولها، بينما لا تعمل مع حسابات المستخدمين الخاصة بخدمات النظام (ممن لا تملك كلمة مرور). تقييد تسجيلات الدخول باستخدام etc/nologin/في بعض الحالات الحرجة قد تحتاج لتعطيل تسجيلات دخول كافة المستخدمين باستثناء المستخدم الجذر root، مثل حالات الصيانة الشاملة، أو فيما لو تعرض أحد تلك الحسابات لاختراق أمني. عمومًا، يمكن إنجاز ذلك ببساطة، عن طريق إنشاء ملف فارغ باسم etc/nologin/: sudo touch /etc/nologin بهذه الطريقة تمنع كافة تسجيلات الدخول للنظام باستثناء من يملك امتيازات المستخدم الجذر، حيث تتم إعادة المستخدمين إلى الصدفة المحليّة local shell أو إخبارهم بأن التوثيق خاطئ! ولإضافة بعض التوضيح يجب ألا يترك الملف السابق فارغًا، بحيث تطبع عبارة على الشاشة تقدّم بعض الشرح: sudo sh -c 'echo "Planned maintenance. Log in capabilities will be restored at 1545 UTC" > /etc/nologin' لنقوم بتجربة جديدة الآن لاختبار ما سبق: ssh user@host user@host's password: Planned maintenance. Log in capabilities will be restored at 1545 UTC Connection closed by host عند الانتهاء من التعامل مع الوضع الحرج يمكن إعادة كل شيء على حاله بحذف الملف السابق etc/nologin/: sudo rm /etc/nologinمراقبة تسجيلات الدخولبعد ضبط مختلف الإعدادات المتعلقة بالمستخدمين والمجموعات لديك، نأتي الآن إلى مهارة أخرى أساسية تتعلق بمراقبة النظام، إذ تحتفظ أنظمة لينكس الحديثة بسجلات لكافة محاولات تسجيل الدخول في ملف مستقل يخزّن على المسار var/log/auth.log/: sudo less /var/log/auth.logMay 3 18:20:45 localhost sshd[585]: Server listening on 0.0.0.0 port 22. May 3 18:20:45 localhost sshd[585]: Server listening on :: port 22. May 3 18:23:56 localhost login[673]: pam_unix(login:session): session opened fo r user root by LOGIN(uid=0) May 3 18:23:56 localhost login[714]: ROOT LOGIN on ‘/dev/tty1’ Sep 5 13:49:07 localhost sshd[358]: Received signal 15; terminating. Sep 5 13:49:07 localhost sshd[565]: Server listening on 0.0.0.0 port 22. Sep 5 13:49:07 localhost sshd[565]: Server listening on :: port 22 … باستخدام الأمر lastيتيح لنا الأمر last استعراض تسجيلات الدخول الأخيرة لنظام التشغيل موزعة على جدول: lastdemoer pts/1 rrcs-72-43-115-1 Thu Sep 5 19:37 still logged in root pts/1 rrcs-72-43-115-1 Thu Sep 5 19:37 - 19:37 (00:00) root pts/0 rrcs-72-43-115-1 Thu Sep 5 19:15 still logged in root pts/0 rrcs-72-43-115-1 Thu Sep 5 18:35 - 18:44 (00:08) root pts/0 rrcs-72-43-115-1 Thu Sep 5 18:20 - 18:20 (00:00) demoer pts/0 rrcs-72-43-115-1 Thu Sep 5 18:19 - 18:19 (00:00)يُستمد الخرج السابق من الملف etc/log/wtmp/. وكما نرى فإن السطرين الأول والثالث يوضحان لنا بأن المستخدم لا يزال قيد الدخول logged in، أما في باقي الأسطر فيعرض توقيت كل جلسة والزمن المستغرق فيها. باستخدام الأمر lastlogإذا رغبت باستعراض السجّل السابق من زاوية أخرى، فيمكنك مشاهدة توقيت آخر مرة سجّل بها مستخدمو النظام دخولهم وذلك عبر الأمر lastlog والذي يعرض لنا محتويات الملف etc/log/lastlog/ مرتبة وفقًا لمدخلات الملف etc/passwd/: lastlogUsername Port From Latest root pts/1 rrcs-72-43-115-1 Thu Sep 5 19:37:02 +0000 2013 daemon **Never logged in** bin **Never logged in** sys **Never logged in** sync **Never logged in** games **Never logged in** …كما ترى يعرض الخرج السابق تاريخ آخر تسجيل دخول لكل مستخدم، بينما تُعرض العبارة "Never logged in" أمام المستخدمين الذين يتم إنشاؤهم لإدارة خدمات النظام، والذين لا يملكون كلمات مرور كما مرّ معنا. خاتمةإنه لمن المهم أن نعلم أين يحتفظ النظام بالمعلومات المتعلقة بتسجيلات الدخول، وذلك بهدف مراقبة التغييرات التي قد تشك بأمرها، لتعطيل تسجيل الدخول عن بعض أو كل المستخدمين. ترجمة -وبتصرف- للمقال Configuring and Managing Users and Groups لصاحبه Justin Ellingwood.
  25. غالبا ما ينظر الناس إلى موظفي "الدعم الفني" بشكل يشبه نظرتهم للكائنات أسفل السلّم الغذائي، سيل من المشكلات والمتاعب لا أكثر، من تلك النظرات على سبيل المثال: مهمّة الدعم الفني التعامل مع العملاء الحمقى.على موظفي الدعم الفني الردّ على المكالمات؛ إنها وظيفة لا يقبل بها حتى مندوبي المبيعات.موظفو الدعم الفنّي يتعاملون بهدوء مع غضب العملاء، في حين أنهم لا يملكون حلًا حقيقيًا لمشاكلهم. يبدو هذا محبطًا للغاية، إذ كيف يمكنك التعامل في موقف يضعك أمام عميل محتقن غضبًا، ورغم قدرتك على مساعدته وحل مشكلته إلا أن صلاحياتك الإدارية لا تسمح لك بذلك؟ البعض قد يرى أنها وظيفة سيئة لشخص عاطل عن العمل لم تُعرض عليه فرصٌ لأعمالٍ أفضل، هل توافق ذلك؟ إذا كانت هذه هي رؤيتك وتصوّرك عن وظيفة الدعم الفني، فهو تصوّر سلبيّ للأسف، مما يعني أنك تفوّت على نفسك أسلوبًا مهمًا في التسويق، تطوير المنتجات، وزيادة المبيعات. الوجه غير المُتوقّع لشركتكهل سبق وتعرضت لموقف ما شعرت فيه بالتناقض وعدم الانسجام ما بين صوت أحدهم وصورته، كما لو أنك كنت تتوقع صوتًا آخر له، أو صورة تناسب الصوت أكثر؟ ديفيد بيكهام لاعب الكرة الإنكليزي مثال واضح على هذا؛ القائد السابق لمنتخب إنكلترا، وزوج المغنية ومصممة الأزياء فيكتوريا بيكهام، كل هذه الكاريزما ستتلاشى عندما يفتح فمه ويبدأ بالكلام، فصوته غير متوقع على الإطلاق، إنها صدمة ستبقى مطبوعة في ذاكرتك! موقع شركتك على الإنترنت يعكس الصورة الأنيقة لك، لكن ما الذي سيحدث عندما يصدر عن الشركة ما يتناقض وصورتها الجميلة تلك؟ ماذا يحدث عندما يتصل أحدهم بمندوبي الدعم الفني؟ بالنسبة لمعظم زبائنك، فموظف الدعم الفني هو الواجهة البشرية الوحيدة التي سيتعاملون معها، وهو من سيؤكّد الصورة البرّاقة للشركة أو سينفيها، فهل ستوظف لهذه المهمة الحساسة الأشخاص الأقل كفاءةً، والأسوأ خُلقًا، بأقل الأجور الممكنة؟ الدعم الفني سرّ المبيعات العاليةلقد حققنا ملايين الدولارات في شركة Smart Bear من خلال المبيعات للأفراد والشركات ومن دون القيام بـ "مبيعات" فعلًا، على الأقل لو ابتعدنا عن المفهوم التقليدي لكلمة مبيعات، والذي يعرف عادةً على أنه "مجموعة من العمليات والأشخاص والمدراء، تركز جميعها على زيادة الإيرادات في جداول زمنية ربع سنوية". لو سألني أحدهم؛ كيف حصلنا على صفقات تزيد على المئة ألف دولار دون بذل الكثير من الجهد أو الدخول في مراهنات متهورة؟ ببساطة: موظفو الدعم الفني لدينا كانوا البائعين! يمكنك القول بأنّ مهام موظفي الدعم الفني تقتصر بالرد على المكالمات والإجابة عن الأسئلة علاوةً على تهدئة الزبائن الغاضبين، لكن ذلك لن يحقق لك تغييرًا كبيرًا، في المقابل فإنني أرى أن مهمّة الدعم الفني الأساسيّة هي جعل الزبائن مبهورين بأداء موظفيك الرائع، الأمر الذي سيعود بالفائدة على منتجك ومبيعاتك بالتأكيد. (اقتبست هذه الفكرة من كاثي سيرا، حيث أراها تنطبق على الدعم الفني إضافةً لمطوري المنتجات). وهذا يعني ألّا تقتصر على مساعدة الزبائن في إيجاد أمر ما ضمن القوائم، بل اسألهم عما يحاولون القيام به لمساعدتهم في إنجاز المطلوب. لا تكتفي أيضًا بشرح خصائص المنتج بل ساعد العملاء للحصول على النتيجة. لا تتوقف عند الاعتذار لعدم وجود الميزة التي يرغبون بها بل ساعدهم بالالتفاف حول ذلك و إتمام المطلوب بدونها. أنت تعلم منتجك جيدًا وتعرف نوع المشكلات التي فيه بشكل يفوق الزبائن، لذا لن يكون من الصعب أن تجعل تجربتهم مع المنتج أكثر نجاحًا عقب اتصالهم وتعطي تلك المكالمة قيمة مضافة. ما تقوم به من تلبية زبائنك وتمكينهم من حل المشكلات وإنجاز المطلوب ليس مهمًا لمنتجك فحسب، إنه يشمل شركتك أيضًا. أعط زبونك تجربة مذهلة مع المنتج، وهو سيبذل المال بحيث يبقى مستمرا مع هذه التجربة الرائعة. هكذا تضاعف مبيعاتك. مفاجأة سارّةللأسف فإن الصورة النمطية التي يمتلكها معظمنا عن موظفيّ الدعم الفني سلبية، هذه بعض من تجارب الناس معهم: اسأل الدعم الفني عن طريقة تغيير الخط، وسيطلبون منك إعادة إقلاع حاسوبك الشخصي.التمس من الدعم الفني تغيير العنوان الخاص بفواتيرك، وسيعرضون عليك ثلاث خدمات لا تحتاج أيًا منها.الاتصال بالدعم الفنّي يحتاج خريطة مع نظام تحديد مواقع لتستطيع التنقل في متاهات الخيارات والقوائم، المكالمات قيد الانتظار، وكتابة رقم حسابك ثلاث مرات "لأغراض أمنية"، وكأن من سيسرق رقم حسابك عاجز عن كتابته لثلاث مرات.دعنا نستفد من هذه الصورة السلبية لموظفي الدعم الفني، فعندما يتوقّع عملاؤك خدمات ذات مستوى متدنّ، ويحصلون على خدمة عالية الجودة، فستحصد نقاط قوّة نوعية، كأن يقوم المستخدمون بكتابة تغريدات حول خدماتك، أو يجرّب آخرون طلبها للمرة الأولى، وذلك بسبب الدعم الفني المتميز الذي تقدمه، كما أن الزبائن لا يكتفون بمتابعة تغريداتك أحيانًا وإنما يشجّعون متابعيهم على فعل ذلك أيضًا. مهلًا، هل لاحظت ذلك؟ هكذا يصبح الدعم الفنّي أفضل حملة إعلانية عبر وسائل التواصل الاجتماعي، بل قد يكون برنامجًا دعائيًا أكثر فاعلية من تشغيل موظفين مناوبين لنشر إعلانات لك هنا وهناك. هل يدهشك هذا؟ يقال "قدّم وعودا أقل من استطاعتك، وأعط خدمات أكثر من المتوقع"، الدعم الفني الخارق هو الأفضل بالطبع، لكن مجرّد تصرّفك بشكل بشري سيجعلك في المقدّمة حتما، حتى لو اكتفيت بالرد على رسائل البريد الإلكتروني دون استخدام مجيب تلقائي ستحرز تقدمًا بشكل ملحوظ. لماذا نفوّت فرصة سهلة كهذه في إدهاش العملاء؟ أليستْ "مفاجأة سارة" ونادرة في مجال العمل التجاري؟ ألستَ مهتما بأن تصبح شركتك معروفة كما الآخرين؟ الطريقة الأسهل لتخرج من مقر الشركة، بينما لا تزال في الداخلتضج الإنترنت بمقولة ستيف بلانك -صاحب منهجية تنمية العميل- والتي يتحدث فيها أن كل ما تحتاج معرفته عن عملائك موجود خارج مقر الشركة، ما يعني أن تنمية العميل الفعلية لا تتحقق دون الحديث المباشر مع الناس، التعرف على مشاكلهم عن قرب، مراقبة انفعالات وجوههم أثناء تقديم عروضك وأعمالك. في الحقيقة أجزم أن تنمية العميل ليست ما نمارسه في جلسات العصف الذهني على لوح أبيض في قاعة الاجتماعات، أو إضاعة الوقت حول حجم الخط المناسب في العروض التقديمية. على الرغم من ذلك، فإنه من الصعوبة بمكان تخصيص ميزانية عالية للتنقل لا سيما بالنسبة لمن لا يزالون في البدايات محاولين بناء عملهم الخاص، أو لأولئك الذين يعتمدون في عملهم على الإنترنت، بالتأكيد عليك أن تحاول بكل جهدك لأن الأمر يستحق، لكن ماذا عن الـ 94% المتبقية من وقتك، وهو الوقت الذي تمضيه في شركتك، خلف مكتبك؟ ثمّة أمور لا ينبغي أن نفرط بها، أعط الدعم الفني الأولوية الثانية هنا، الدعم الفني يوجد حيث يشتكي الناس أمورًا لا تعمل في المنتج، ميزات مفقودة رغم أنهم يحتاجونها، حيرتهم وارتباكهم تجاه أمر ما، إن كتابة دليل الاستخدام وتبويب المشكلات لن يكون كافياً معظم الوقت. البصيرة تكمن في ما وراء الأسئلة. لنقل أن أحدهم اتصل بالدعم الفني مُرتبكًا حيال أمرٍ ما، المهمة الأولى لديك هي تهدئته بالطبع، لكن انتبه إلى أنك أمام فرصة هامة لتطوير منتجك، يمكنك أن تطرح الأسئلة التالية على نفسك في محاولة لتحسين المنتج: ما الذي سبب ارتباك الزبون في المقام الأول؟هل تبدو وجهة نظر العملاء مختلفة عن وجهة نظري؟هل تتناسب مصطلحاتنا مع الزبائن؟هل نستخدم تشابيه لغوية لا توصل المطلوب؟هل أحتاج لتركيز اهتمامي على تجربة المستخدم المبتدئ عوضًا عن المتقدم؟هذه الأسئلة تكتيكية نابعة من المشكلة الحالية التي نقف أمامها، ورغم أهميتها لكنها لا يجب أن تشغلنا عن أسئلة أكثر استراتيجية وأهمية: هل أوجدت هذه المشكلة صعوبة ما لدى الزبون لم أستطع معرفتها رغم قدرتي على حلها؟هل كان هناك سوء فهم أو لبس ما لدى العميل كان يتوجب عليّ أن أوليه اهتمامًا أكبر؟ هل توجد فكرة لإبداع منتج جديد في هذه المشكلة؟إذا كان العملاء يحاولون الحصول على ميزات غير موجودة في المنتج، هل كنت أستطيع أن أؤمن لهم ما يحتاجونه من البداية؟السؤال الأخير تحديدا هو ما جعل شركة Smart Bear ترى النور، إذا لم أولي اهتماما بما وراء أسئلة الزبائن، لم تكن لتقرأ هذه السطور، نعم، الأمر بهذه الجديّة! عليك الآن أن تعود إلى الوراء، منذ البداية وحتى اليوم لتراجع مئات الرسائل الإلكترونية من العملاء لتحدد كيف كانت تجربة الزبائن ومالذي كانوا يتوقعونه وتجيب عن باقي الأسئلة السابقة، وهذا ما يحتاج إلى تفكير وتحليل معمقين بعيدًا عن التقارير الموجزة والملخصات المؤتمتة. الدعم الفني هو أكثر الفرص القريبة والممكنة لتطوير منتجاتك، وأقربها نتيجةً من ضغط "المبيعات". هنا حيث يكتشف المستخدمون منتجك ويقدمون تقاريرهم عنه. هل ستسمع النصيحة، أم ستلقيها جانبا؟ ماذا بعد؟ما الذي يمكن أن يفعله الدعم الفني أيضًا فيما لو أوليته الاهتمام وأعطيته الصلاحيات التي يستحق؟ أم أنك تعتقد بأنني مخطئ فيما قلت، وتفضّل أن تولي الدعم الفني لموظفي دولار واحد لكل ساعة ليبعدوا عنك العملاء المزعجين؟ ترجمة -وبتصرّف- للمقال Tech Support *is* sales لصاحبه Jason Cohen.
×
×
  • أضف...