طريف

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

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

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

  • Days Won

    3

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

  1. انتشر صيت نظام التشغيل غنو لينكس Gnu Linux (المعروف اختصارًا بلينكس) في السنوات الأخيرة، بعد استيلاء منصة الهواتف الذكية أندرويد على أكثر من 85% من السوق، وكثرة الحديث عن كون هذه المنصة مبنية على نواة لينكس القوية، والمشهود لها بالاستقرار، سرعة التطوير والأمان، وخلافًا لما كان الحال عليه من قبل فقد لوحظ تنامي الرغبة لتجريب لينكس على أجهزة سطح المكتب، تارةً بدافع حب الفضول والاستكشاف، وتارةً بغرض التعلم واكتساب الخبرة، وأحيانًا أخرى لاستخدامه في محاولات الاختراق وتجاوز الحماية. إلا أن أول ما يصطدم به الراغب في خوض غمار التجربة الجديدة عدم وجود نظامٍ باسم لينكس يمكن تنزيله من موقع رسمي واستخدامه على الفور! إذ يمكن لمستخدمي Microsoft Windows الحصول على أقراص ليزرية من السوق تتضمن نسخ Windows المختلفة أو تحميلها من الشبكة، بينما تأتي أجهزة Apple محملةً أصلا بنظام التشغيل OS X، أما كتابة Download linux في محرّك البحث فسيفضي لنتائج بأسماء مختلفة، ولن يطول الوقت حتى يتعرف القادم إلى هنا على مفهوم «التوزيعة» وهي أقرب ما تكون بالمعنى إلى كونها «تجميعة»، فلينكس ما هو إلا النواة، بينما نحتاج إلى أدوات أخرى كالمترجمات Compilers والواجهات المرئية ومدراء النوافذ إضافة إلى تطبيقات المستخدم النهائي كمتصفح الإنترنت ومشغل الموسيقى إلخ، كلّ هذا حتى يصبح لدينا أخيرًا نظام تشغيل متكامل، ولتوفير مثل هذه الخطوات على المستخدمين تقوم فرق برمجية متطوعة أو تابعة لمؤسسات تجارية بالعمل المطلوب، كلّ وفق أفكاره وميوله، طارحين تجميعاتهم تلك على شكل حزمة واحدة جاهزة للاستخدام تسمى بالتوزيعة Distribution. ومع عدم وجود أية قيود على العملية السابقة فقد فاق عدد التوزيعات المتاحة للتحميل والإستخدام المجاني ال 300 توزيعة، ليقف المستخدم المبتدئ أمامها في حيرة من أمره؛ ماذا يستخدم؟ ما التوزيعة الأنسب له؟ أو على الأقل بماذا يبدأ ومن أين ينطلق؟ ولا تشكل الحيرة السابقة مشكلة بحدّ ذاتها، إلا أن المشكلة تنجم عن الكيفية التي يُتعامل بها مع هذا السؤال، حيث إن التعاطي مع التوزيعات والفرق المجمّعة لها بات أشبه بالتحزب السياسي، بمعنى أن كلّ فريق يرى في خياره الصواب الأنسب، والأداء الأفضل، منوهًا إلى مثالب التوزيعات الأخرى ونقاط الضعف التي تعاني منها، لتدور أحيانًا حربٌ طاحنة، لا يكون الخاسر الأكبر فيها سوى المبتدئ، الذي تزداد حيرته أمام مقارنات لا يفقه منها شيء غالبًا. خلال سبع سنوات من إستخدامي لـغنو لينكس كنظام تشغيل وحيد على مختلف الحواسيب، تعاملت مع التوزيعات العشرة الرئيسية، مثل Mint, Ubuntu, Debian, OpenSUSE, Fedora, Arch, Puppy وغيرها، والتي تتفرع منها وتبنى عليها باقي التنويعات المختلفة، وكمهووس بلينكس استغرق ذلك منيّ وقتًا طويلًا للغاية، كان سببًا في بعض الأحيان لتعطّل مهامي أو ضياع ملفاتي، إلا أنني راكمت أيضًا خبرة أودّ مشاركتها هنا. لنتعرّف بدايةً على التوزيعات الرئيسيّة في عالم غنو لينكس: دِبيان Debianأثناء دراسته في جامعة بوردو فرع علوم الحاسوب، كتب إيان موردك مع صديقته ديبرا (والتي ستصبح زوجته فيما بعد) «عقد دبيان» ويقصد به الفلسفة التي سيبنى عليها نظام التشغيل دبيان (منحوتًا من اسميهما ديب يان) والذي أطلق اصداره الأول عام 1993م مستمرًا حتى يومنا هذا، ليكون واحدًا من أعرق المشاريع المتعلقة بلينكس وأكثرها شعبية. قاد إيان فريقًا كبيرًا مكونًا من المبرمجين المتطوعين من مختلف دول العالم لبناء دبيان (يبلغ عددهم اليوم ألف مطوّر). دبيان في نقاط- مشروع دبيان هو مؤسسة مجتمعية لا مركزية يطوره متطوعون حول العالم ويقوده قائد يجري انتخابه من قبل المجتمع بشكل دوري، إضافة إلى وجود نظام داخلي ودستور وقواعد تنظم عمل المشروع وتعطي الأولوية دومًا لرأي المطورين، نادرًا ما يوجد مثل هذا التنظيم لدى باقي الفرق. - طَوّر مشروع دبيان نظام تحزيم يسمى Deb يهدف إلى إنشاء برامج جاهزة للتثبيت بدون تدخل برمجي من قبل المستخدم، حيث كانت برامج لينكس متوفرة أولًا بشكلها المصدري src (أي على شكل أكواد) وهي تتطلب من المستخدم أن يقوم بعمل Compile لها، وهذا ما يتطلب معرفة برمجية واسعة، وحل عدّة مشاكل أثناء ذلك (كالاعتماديات، وتضارب النسخ وغيرها). عام 1995 بدأ مشروع دبيان بتحزيم البرامج على شكل ملفات.deb جاهزة للتثبيت باستخدام الأداة Apt (ولاحقًا تم تسهيل ذلك من خلال أدوات أخرى مثل aptitude، apt-get من على سطر الأوامر، أو Synaptic على الواجهة الرسومية)، فبات كل ما يحتاجه المستخدم النهائي لتركيب أو تحديث أو إزالة البرامج هي بضع نقرات لا غير، متفوقًا بذلك على نظيره ويندوز. يضم اليوم مستودع دبيان الرئيسي 43000 حزمة، بالإضافة إلى مستودعات أخرى تجعل من تثبيت الحزم وإداراتها أمرًا في غاية السهولة. - يعتمد مشروع دبيان معايير صارمة في التحزيم وبناء النسخ الجديدة، لذا توصف التوزيعة عادةً بانها ثابتة كالصخر، ما دفع قرابة نصف توزيعات لينكس الأخرى على بناء نسخهم الخاصة إنطلاقًا منها. - تعتبر دبيان من أكثر التوزيعات إلتزامًا بفلسفة غنو، حيث لا تضم مستودعاتها الرسمية سوى برمجيات مفتوحة المصدر. - خلافًا لمعظم توزيعات غنو لينكس لا تتبع دبيان خططًا زمنية في إصداراتها، بل تتبع سياسة مفادها تصدر دبيان عندما تجهز! - تأتي دبيان إفتراضيًا مع واجهة رسومية، ومثبت رسومي، وبالتكامل مع مدير الحزم فإن مشروع دبيان سهّل للمستخدم العادي استخدام وتثبيت لينكس. Ubuntuعندما أطلقت شركة Canonical في أكتوبر 2004 نسختها المعدلة من نظام التشغيل دبيان لم تدرِ أنها ستفتتح بذلك صفحة واحدة من أكثر توزيعات لينكس شعبية على الإطلاق، ويعود ذلك بفضل تركيز فريق العمل الخاص بالتوزيعة على تحقيق المزيد من سهولة تثبيت وإدارة توزيعة لينكس، مع الأخذ بعين الاعتبار عدم تضمينها أية برمجيات محتكرة. تأتي Ubuntu مع مثبّت رسومي أكثر بساطة، إضافة إلى حزم أوسع من البرامج المثبتة مسبقًا، إضافة إلى أداة رسومية لإدارة تعاريف العتاد الصلب، وإدارة المحليات (لغة الواجهة)، علاوةً على مركز البرمجيات الخاص بهم والذي يجعل من تثبيت وحذف البرامج ممكنًا بنقرة واحدة. منذ اصدار أكتوبر 2012 اعتمد فريق أوبونتو على الواجهة الرسومية Unity الخاصة بهم. تعقد Canonical المالكة لـ Ubuntu صفقات تجارية مع شركات مثل أمازون، مما يسبب لها انتقادات واسعة في مجتمع البرمجيات الحرّة والذي يرفض إرسالها بعض بيانات المستخدمين للشركات المعلنة بهدف تحقيق الربح، رغم إمكانية تعطيل ذلك. Mintخلال أقل من شهر على إنطلاق أوبونتو في 2006 قام فريق من المتطوعين بإنشاء نسختهم الخاصة بناء عليها، بهدف تقديم توزيعة أكثر أناقة وسهولة في الإستخدام، وأكثر استقرارًا في نفس الوقت، وإن جاء ذلك على حساب تضمين التوزيعة برمجيات محتكرة بشكل افتراضي مثل مشغلات الصوت والفيديو وخطوط مايكروسوفت. (يقول مطورو Mint بأن مستخدمي سائر التوزيعات يستخدمون هذه الأجزاء، فلمَ لا نجهزها لهم). تأتي مِنت كذلك مع كم أكبر من البرامج بحيث تغني المستخدم عن تثبيت أي شيء إضافي تقريبًا، وتعتمد على مستودعات Ubuntu. لاحقًا عمل فريق التطوير على إعادة كتابة عدد من الأدوات الموجودة في Ubuntu مثل مدير البرمجيات، مدير التحديثات، أداة النسخ الاحتياطي، أداة الرفع Upload وغيرها. إضافة إلى عملهم على تطوير واجهتين مشتقتين من غنوم Gnome وهما Cinnamon و Mate. فيدورا Fedoraفي 2003 رعت شركة RedHat إندماج مشروعين أحدهما نسخة المستخدم العادي الذي كانت RedHat نفسها تعمل على إصدارها، والثاني مشروع نظام فيدورا، لينتج مشروع فيدورا، وهو نسخة من نظام التشغيل غنو لينكس، تستخدم تحزيم .rpm للحزم والبرامج، وتحظى بدعم غير رسمي من شركة RedHat حيث25% من موظفي مشروع فيدورا هم من موظفي RedHat. تلتزم فيدروا بفلسفة غنو لينكس حيث لا تضمن برمجيات مغلقة بشكل مسبق معها، وإن كانت مضمنة في مستودعاتها والتي تحتوي على برمجيات أقل عددًا من تلك الموجودة في دبيان وبناتها. OpenSUSEفي عام 2004 قررت شركة Novell الألمانية إيقاف مشروع SUSE Linux مغلق المصدر وتحويله إلى توزيعة OpenSUSE مفتوحة المصدر، لتطلق إصدارتها الأولى في تشرين الأول 2005. يستخدم المشروع نظام RedHat في توزيع الحزم RPM، ويهتم بتسهيل تجربة المستخدم النهائي في إدارة نظام لينكس، لا سيما من خلال مركز تحكم YaST الذي يقدم مجموعة كبيرة من الأدوات لإنجاز مختلف العمليات الإدارية في لينكس في مكانٍ واحد ومن خلال الواجهة الرسومية. Archlinuxتهدف Arch إلى تقديم توزيعة مرنة كفاية ليتمكن المستخدمون من تشكيلها بالأسلوب الذي يناسب إحتياجاتهم ومتطلباتهم المختلفة، إضافةً للمرونة تركّز Arch على مفاهيم أخرى (لا تهتم بها معظم توزيعات لينكس) مثل الخفة، حيث التركيب المبدئي لا يشمل سوى الحزم الأساسية جدًا، وبدون أية واجهة مرئية، الإختزالية والتي تعني أقل حد ممكن من متطلبات العتاد الصلب والاعتماديات البرمجية، إضافة لأناقة الكود. تركيب Arch يتم من خلال سطر الأوامر، وإعدادها يكون بتحرير ملفات نصيّة وتعديل بعض القيم فيها، يمكن متابعة استخدامها على هذا المنوال، أو تركيب واجهة رسومية. تعتبر Arch توزيعة متدحرجة، بمعنى أنها لا تقوم بإصدار نسخ جديدة منها خلافًا لباقي التوزيعات، بل يعمل المستخدم على تركيبها ومن ثم دحرجتها، أي تحديثها باستمرار من خلال مدير الحزم. تستخدم Arch أسلوب تحزيم tgz وهو أكثر الأساليب بساطة، ويدار باستخدام مدير pacman، كما يعتمد مستخدموها على بناء الحزم من المصدر (src) من خلال مستودع المجتمع aur، بهدف الحصول على البرمجيات غير الموجودة في المستودعات الرسمية. إلى جانب التعدد الكبير في تجميعات غنو لينكس، هناك تعدد أقل عددًا وأكثر أهمية يواجه القادم الجديد وهو اختيار بيئة العمل Desktop Environment والذي يقصد به الحزم البرمجية التي تقدم واجهة رسومية في التعامل مع لينكس بدلًا من سطر الأوامر، وخلافًا لما هو الحال عليه من وجود بيئة عمل واحدة لكل من نظامي Windows و OS X، فلدى لينكس ما يزيد عن عشرين واجهة، يعدّ اختيار واحدة منها أمرًا أكثر أهمية وأولوية من اختيار التوزيعة، وهو ما سأوضحه تفصيلًا بعد عرضي ﻷشهر الواجهات: XFCE في عام 1996 أطلق أوليفر فوردان مشروع XFCE (بالاعتماد على مكتبات GTK+) ليكون أقدم مشروع يهدف إلى تزويد المستخدم النهائي ببيئة عمل رسومية متكاملة مضمنة سطح مكتب ومجموعة من التطبيقات الأساسية، تركز Xfce على الخفة والاستقرار إضافةً لإمكانية تخصيصها بسهولة، وهذا ما يجعلها خيارًا ممتازًا للباحثين عن البساطة، المبتدئين، أو لمستخدمي الأجهزة القديمة. KDE في وقت آخر من عام 1996 كان فريق KDE مشغولًا بكتابة وتصميم بيئة العمل الخاصة بهم والتي صدرت بعد ذلك بعامين لتشمل سطح المكتب وباقة كاملة من التطبيقات، بالاعتماد على مكتبات Qt البرمجية، تركز البيئة على تقديم بصمة بصرية جذابة وتأثيرات أنيقة للغاية، وتهتم بتقديم إمكانية تعديل حتى أدق تفاصيل مظهرها وسلوكها لتناسب أذواق المستخدمين، وهي بذلك موجهة لهذه الشريحة التي تهتم بالمظهر والتخصيص. Gnome هي بيئة سطح المكتب التي عمل فريق غنوGNU على تصميمها أثناء عملهم في كتابة أدوات النظام، وذلك باعتبار مكتبات Qt المستخدمة في مشروع كدي لم تكن مرخصة بشكل حرّ آنذاك، مما أقلق فريق عمل غنو، فباشروا عملهم بكتابة مكتبات GTK+ وبناء Gnome عليها، ورغم أن مكتبات Qt رُخصت لاحقًا بشكل حرّ (في عام 2000) إلا أن المشروع بقي مستمرًا ومحققا لنجاح كبير. تركز Gnome على كونها أكثر بساطة وسهولة في السلوك والإعداد. في عام 2011 تم إعادة تصميم الواجهة بالكامل مع إطلاق إصدارها الثالث، وهدف التصميم الجديد لإلغاء الطبقات التقليدية (شريط مع قائمة) والتركيز أكثر على تجربة الاستخدام من خلال شاشات اللمس، الأمر الذي لم يلقَ ترحيبًا كبيرًا، مما أدى لظهور مشروعين مشتقين من Gnome: Mate وهو عبارة عن استمرار لواجهة Gnome 2 التقليدية، للعمل على تزوديها بترقيعات الأمان وإضافة ميزات جديدة. Cinnamon وهي استثمار في Gnome 3 والاستفادة من امكانياتها الجديدة لكن مع المحافظة على الأسلوب التقليدي في تصميم سطح المكتب، وهي تجمع بين الخفّة والمظهر الجذاب. Unity رغم حداثة عمرها (4 سنوات) إلا أن Unity حققت إنتشارًا واسعًا، وهي ليست بيئة عمل بمعنى الكلمة وإنما سطح مكتب لبيئة Gnome يهدف إلى استغلال المساحة بشكل أفضل للشاشات الصغيرة كدمج شريط القوائم بالشريط العلوي، وتتيح Unity إمكانية أفضل لمحبي استخدام لوحة المفاتيح، كمطلق Dash والذي يسهل الوصول إلى البرامج والملفات من خلال كتابة الأحرف الأولى منها، وكذلك ميزة HUD والتي تتيح البحث في قوائم البرامج لتنفيذ الأوامر المختلفة بدون الحاجة لاستخدام الفأرة. وخلافًا لباقي واجهات غنو لينكس فلا يمكن استخدام Unity سوى مع Ubuntu، بعض محاولات تشغيلها على توزيعات أخرى لا يمكن اعتبارها ناجحة بعد. لدينا كذلك مشروع LXDE المكتوب وفق GTK وهو يقدم واجهة بالحدّ الأدنى من الاعتماديات مما يجعلها أكثر بيئات سطح المكتب خفّة. وهناك مشروع Pantheon الوليد والذي يعمل فريق توزيعة elementaryOS على تطويره كسطح مكتب بديل لبيئة عمل Gnome 3. حسنًا، ماذا بعد؟ بعد سنوات من تجريبي للتوزيعات المذكورة وغيرها وفق معظم بيئات سطح العمل، وصلتُ أخيرًا إلى ما يمكن تسميته بالقاعدة الذهبية، ورغم بساطتها فهي "تعمل" ويمكنني القول بأنه يمكن للمبتدى أن يثق بها وأنها يضعها موضع التجريب والاختبار؛ باختصار لا تهتم باسم التوزيعة التي تستخدمها، انسَ موضوع الإسم والميزات وتابعني قليلًا: عشرة نقاط، ونقطة1 - باستثناء ما إذا كان لديك غرضٌ خاص، فلا تستخدم سوى التوزيعات عامة الأغراض، على سبيل المثال تعتبر Kali Linux توزيعة موجهة ﻷغراض الحماية والإختراق وليس للمستخدم العادي أو المبتدئ، كذلك الأمر مع التوزيعات الموجهة لأغراض الميديا أو سواها. 2 - لا تستخدم توزيعة لم تعدّ تطوّر أو توزيعة بُدئ تطويرها للتوّ، فتلك التي لم تعد تطوّر قد تحتوي على مشاكل أمنية أو علل برمجية غير محلولة، وأما التوزيعات التي بدُئ تطويرها للتوّ (بمعنى أن عمرها لم يتجاوز عامين أو ثلاثة) فهي لا تزال تفتقر للدعم الكبير ومن الصعوبة أن تجد من يساعدك في حلّ مشاكلها، إضافةً لعدم ضمان توقف تطويرها خلال وقتٍ قصير بعد أن تكون صرفت عليها وقتًا طويلًا في التثبيت والتعلم. 3 - استخدم واحدة من التوزيعات الكبيرة، تعلمها وابق معها، هذا هو سرّ نجاح تجربتك مع غنو لينكس وتمكنك من الانتقال النهائي إليه. لقد بقيتُ أستخدم Ubuntu لأربع سنوات متتالية قبل أن أنتقل لتجريب باقي التوزيعات والواجهات، وهذا ما أتاح لي الوقت لفهم لينكس ووفر عليّ الكثير من التشتت الذي لا يناسب المبتدئ. 4 - أقصد بالتوزيعات الكبيرة مثل التي سبق ذكرها إضافة لتوزيعات تجاوزت العشر سنوات مثل CentOS PCLinuxOS، Slackware وغيرها. 5 - توزيعات لينكس إما مبنية على تقنيات معينة أو لتحقيق أهداف وقيم ما، فالسهولة التي تريح فيها Mint المستخدم النهائي عن إعداد نظامه تكون على حساب الخفّة أحيانًا، والخفة والمرونة التي تقدمها Arch تكون على حساب السهولة، وهكذا. 6 - ورغم اختلاف الأهداف إلا أن الأمر ليس على إطلاقه إذ نتحدث هنا عن مجتمع حرّ فأية فكرة تصدر من أي فريق تعمم على الباقي، في معظم نقاشات «أيها أفضل» ستجد من يتغنى بأمجاد دبيان، أو من يذكر أن فريق فيدورا من أكثر الفرق البرمجية مساهمة في تطوير المشاريع مفتوحة المصدر، إلا أن ذلك لا يغيّر شيئًا في تجربة المستخدم النهائي، فكل ما بذله فريق دبيان (مثلا) لتسهيل عملية تركيب لينكس وإدارة الحزم بات موجودًا على جميع التوزيعات، والمساهمات التي يقدمها فريق فيدورا للبرمجيات الحرّة توزّع على باقي التنويعات أيضًا، لذا انتبه من مثل هذه الأفكار التي يُستشهد بها في نقاشات «أيها أفضل» فهي لن تغيّر شيئًا من تجربتك كمستخدم سطح مكتب. 7 - القاعدة الذهبية: الواجهة المرئية مع مدير الحزم هما ما يشكل أكثر من 80% من تجربة المستخدم النهائي، والباقي تفاصيل قد لا تفضّل أن تصدّع رأسك بها، حسب هذه النظرية فإن Fedora KDE أو OpenSUSE KDE يعني مقارنات لا طائل منها. Mint Xfce أو Xubuntu يعني اختلافات لا تكاد تذكر. تجربة المستخدم النهائي تتعلق بالواجهة المرئية أولًا، ونوع مدير الحزم ثانيًا، وعلى هذا يجب أن يدور الحديث. 8 - مدير الحزم يرتبط بالأسلوب والمعايير التي تتبعها كل توزيعة في تحزيم برامجها مما ينعكس على استقرار البرامج، حجمها، وسرعة وصول التحديثات، وكم الحزم المتوفرة لها، على سبيل المثال تفوق عدد الحزم المتوفرة في مستودعات دبيان deb تلك الموجودة في مستودعات فيدورا، بينما يتفوق مدير حزم Arch بسرعة وصول تحديثات البرامج إليه أولًا بأول. رغم ذلك فلا يجب أن تهتم كثيرًا بهذه النقطة، فالحزم غير المتوفرة على هيئة rpm لن تكون شائعة الاستخدام بالتأكيد. 9 - اختر الواجهة المرئية التي ترجّح أنها تناسبك، ثم أعطها وقتها في التجريب وطالما كانت مناسبة فلا تفكّر بتجريب غيرها قبل عدة أشهر. 10 - المشاكل، الانهيارات والعلل، موجودة أينما ذهبت في أي نظام تشغيل، وتحت أي توزيعة، وباستخدام أية واجهة، في الحقيقة ونظرًا لخبرتي فإن معظم ما نصفه بالمشاكل تأتي من قلة المعرفة والخبرة في إدارة النظام. 11 - عندما تفكّر بالانتقال إلى لينكس اعلم أنك تحتاج إلى القراءة الطويلة والمعمقة لمعرفة استخدامه، هذا النوع من القراءة قد يكلفك شهرًا أو اثنين تبعًا لوقت فراغك، لكنه سيريحك تمامًا على المدى البعيد، بينما سيسبب الاكتفاء بمواضيع المنتديات والتدوينات السطحية ونصائح من هنا وهناك ارهاقًا ومشاكل كثيرة على المدى الطويل. الواجهات في كلمات: KDE: تصميم بصري جذاب، قدرة هائلة على التخصيص، أكثر الواجهات تطلبًا للموارد.Gnome: تصميم غير تقليدي، تجربة أفضل لشاشات اللمس، بساطة في الإعدادات.XFCE: تصميم تقليدي، واجهة خفيفة للأجهزة القديمة، لكنها لا تزال تدعم التأثيرات البصرية والتخصيص العالي.LXDE: تصميم تقليدي، أخف واجهة يمكن استخدامها للأجهزة الأكثر قدمًا، امكانية تخصيص متوسطة.Unity: تصميم غير تقليدي، قدرة تخصيص متوسطة، ملاحظات على الأداء ومراعاة الخصوصية من قبل المجتمع، لا يمكن استخدامها سوى مع Ubuntu.تذكّر أخيرًا، أن ما يهمك كمستخدم سطح مكتب هو سطح المكتب ببساطة! أشياء مثل اسم التوزيعة، تاريخها، أمجادها، البرامج المبدئية، وسواها هي أشياء تصلح للنقاش في عطلة نهاية الأسبوع لا أكثر.
  2. مرحبا أخي وأهلا بك في أكاديمية حسوب، بالنسبة لسؤالك فقد طُرح سابقًا هنا: ما هي أهم أساسيات تصميم شعار ناجح؟ وحصل على إجابات جيدة، يمكنك مرجعة هذه المشاركة. وشكرًا لك.
  3. landing page أو صفحة الهبوط هي تلك الصفحة التي "يهبط" عليها الزائر، وصفحة الهبوط تكون منفصلة تماما عن الموقع الرئيسي وتكون مصممة لهدف واحد وهو أن يتحول الزائر إلى زبون أو عميل. تعرّف على صفحات الهبوط (Landing Pages) ومكوّناتها لكني لم أعرف قصدك بـ OTO، هلّا أخبرتنا إلى ماذا يرمز هذا الاختصار؟
  4. طالما أنكّ في أكاديمية حسوب فأنت في المكان الصحيح لتعلّم مجموعة من أهم المهارات التي يمكنك الكسب من ورائها. على الرابط أدناه تجد سلسلة دروس تعليمية حول أشهر البرامج المكتبية اللازمة في مهمتك: http://academy.hsoub.com/apps/productivity/office/
  5. مرحبًا بك في أكاديمية حسوب يقوم المسؤولون على النشر في الأكاديمية بالردّ على الرسائل فقط عندما يرون أنها قابلة للنشر، حيث تصلنا مئات (وأحيانًا آلاف الرسائل) ولا يمكننا الرد على جميع الرسائل. عليك الانتظار حتى أسبوع أحيانًا قبل أن يأتيك الردّ (في حال قبول المقال) تحياتي
  6. أهلا بك تصلنا أحيانا مئات (وفي بعض الأحيان آلاف!) الرسائل شهريًا لاقتراحات نشر مقالات، نحاول التعامل مع هذا الكمّ الهائل باستمرار، لكن الكثير من هذه الرسائل تكون غير جديّة (نسخ ولصق مع بعض التعديل أو ترجمة سيئة للغاية) لذلك نفلتر هذه الرسائل بدون ردّ أتمنى الانتظار قليلًا، وفي حال كان مقالك موافقا للمعايير سيتم الردّ عليه بواسطة البريد الإلكتروني الخاص بك.
  7. أجل بالتأكيد، ضمن نقاش الصفقة يمكنك إرسال جميع أنواع الملفات للعميل بما في ذلك المسودات، أما تسليم المشروع فهذا يكون من طرف العميل حصرًا.
  8. يُعتبر 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.
  9. ما إن تقضي وقتًا أطول مع لينكس حتى تألف العمل مع سطر الأوامر command line والمعروف أيضًا بالطرفيّة Terminal، وشيئًا فشيئًا ستجد أن الأوامر التي تستخدمها تتكرر ذاتها في كلّ يوم، وأن استعمالاتك لا تخرج عن دائرة صغيرة جدًا من الأوامر والتعليمات المتاحة بالفعل. وقد اجتهد مبرمجو معظم الأوامر والأدوات المستخدمة في الطرفية باختصار طرق استدعائها والعمل من خلالها (تخيّل كم توفّر من نقرات لوحة المفاتيح بكتابة "cd" بدلًا من "change-directory"، أو "ls" بدلًا من "list")، إلا أنّ هذا ليس كل شيء بالطبع، فمعظمنا يستخدم الأوامر مع مجموعة من خياراته المفضّلة. لحسن الحظّ فإن حلًا رائعًا لا يزال بانتظارك؛ حيث تسمح لك الطرفيّة بإنشاء اختصاراتك الخاصّة وحفظ وقتك من خلال ما يسمى بالأسماء المستعارة Aliases والدوال Functions. نناقش في هذا الدرس كيفيّة إنشاء هذه الاختصارات وحفظها بشكل دائم، مع بعض الأمثلة المفيدة التي ستيسر لك عملك بالتأكيد. الإعلان عن اسم مستعار Aliasإنشاء الأسماء المستعارة في الطرفيّة أمرٌ في غاية السهولة، لدرجة أنه يمكنك تجريبه على الفور، يتمّ ذلك باستخدام الأداة alias متبوعة بالاختصار الذي ترغب به، والتي تعرّف اسمًا مستعارًا فعّالا ضمن نافذة الطرفيّة المستخدمة فقط: alias alias_name="command_to_run"انتبه إلى أن أسلوب الكتابة السابق لا يتضمن مسافات فارغة قبل وبعد إشارة المساواة (=)، وهذا ليس أمرًا اختياريًا وإلا فإن الاختصار لن يعمل. لننشئ الآن اسمًا مستعارًا كتجربة، حيث سنأخذ واحدًا من أكثر الأوامر استخدامًا على لينكس وليكن الأمر lsمع الخيار -lha أو -lhA (يهمل الثاني عرض المجلد الحالي ومجلده الأب ضمن الخرج، خلاف الخيار الأوّل)، سنختار له اسمًا مستعارًا وليكن ll: alias ll="ls -lhA"يمكننا الآن كتابة ll للحصول على قائمة بمحتويات المجلد الحالي ضمن قائمة طويلة تتضمن المجلدات المخفيّة: ll -rw-r--r-- 1 root root 3.0K Mar 20 18:03 .bash_history -rw-r--r-- 1 root root 3.1K Apr 19 2012 .bashrc drwx------ 2 root root 4.0K Oct 24 14:45 .cache drwx------ 2 root root 4.0K Mar 20 18:00 .gnupg -rw-r--r-- 1 root root 0 Oct 24 17:03 .mysql_history -rw-r--r-- 1 root root 140 Apr 19 2012 .profile drwx------ 2 root root 4.0K Oct 24 14:21 .ssh -rw------- 1 root root 3.5K Mar 20 17:24 .viminfoوفي حال رغبت بالتوقف عن استخدام الاختصار يمكنك تطبيق الأمر التالي: unalias llوهكذا تُحذف قاعدة الاختصار التي أنشأتها للتوّ. بينما يمكنك الهروب من قاعدة ما بشكل مؤقت عن طريق كتابة رمز الهروب "\" قبل الأمر، فلو قمت بإنشاء قاعدة تحيل الأمر ls إلى الأمر ls -a، وترغب الآن بتطبيق الأمر ls دون استدعاء قاعدة الاختصار، فيمكنك كتابة: \lsيمكنك استعراض جميع القواعد المنشأة في أي وقت من خلال الأمر: aliasلكن كما ذكرنا سابقًا فإن الأسماء المستعارة التي يتم إنشاؤها عن طريق الأداة alias لن تعمل سوى في نافذة الطرفيّة المستخدمة، وهذا يعني أنك لو فتحت نافذة أخرى واستدعيت قاعدة ما فلن تحصل على المطلوب. ولجعل هذه التغييرات دائمة، نحن بحاجة إلى وضعها ضمن أحد الملفات التي تقرأها الطرفية في بداية كل تشغيل لها، الخيارات الشائعة لذلك هي استخدام الملف ~/.bashrc أو ~/.bash_profile، وكل ما علينا فعله هو تحرير أحد هذه الملفات وتعريف قواعد اختصارنا هناك: nano ~/.bashrcالآن أضف الأسماء المستعارة التي كنا قد كتبناها في الطرفيّة بذات الصياغة، يمكنك إضافتها في أسفل الملف، أو في أي مكان آخر، كما يمكنك استخدام التعليقات (بالعلامة #) لتوضيح ما قمتُ بإضافته: ######### # Aliases ######### alias ll="ls -lhA"قد تلاحظ وجود بعض الأسماء المستعارة بالفعل ضمن الملف السابق، حيث تأتي العديد من التوزيعات مع بعض الاختصارات التي تجعل من استخدام الطرفية أمرًا أكثر فاعليّة وسهولة. بعد حفظ الملف تصبح التعديلات المُدخلة جاهزة للاستخدام عند فتح نافذة طرفية جديدة، أما لو رغبت باستعمال قواعد الاختصار الجديدة ضمن نافذة الطرفية الحاليّة فيمكنك كتابة الأمر التالي لإعادة قراءة الملف .bashrc: source ~/.bashrc أمثلة أخرىلنمضي الآن في تعلّم بعض الأمثلة الأخرى عن إنشاء اختصارات تسهّل تعاملك مع الطرفيّة وتجعله أكثر فاعلية، تذكّر دومًا أنه يمكنك البحث في الإنترنت عن استخدامات أخرى نافعة للاختصارات، وإلقاء نظرة على تلك التي قد تكون مُعدّة بشكل افتراضي ضمن إعدادات توزيعتك. التنقل والاستعراضيمكن بإضافة بعض الخيارات على أوامر لينكس البسيطة والشائعة الحصول على نتائج أفضل وأكثر تخصيصًا، رأينا ذلك سابقًا مع الأمر ls، لكن هناك بالتأكيد ما هو أبعد من ذلك. فمثلًا يتيح لنا الاختصار التالي استخدام الخيار -CF مع الأمر ls بشكل افتراضي، والذي يفرّق أثناء العرض بين الملفات والمجلدات، بإضافة الرمز "/" في نهاية اسم كلّ مجلد: alias ls="ls -CF"كما يمكننا الالتفاف حول بعض الأخطاء الكتابيّة الشائعة بالنسبة لنا لجعلها تعمل أيضًا: alias sl="ls"يُنشئ الأمر التالي قاعدة اختصار تُمرّر مخرجات الأمر ls إلى الأداة less لاستعراض محتويات المجلدات الكبيرة بأسلوب مريح: alias lsl="ls -lhFA | less"واحدة من الأخطاء المطبعيّة الشائعة نسيان المسافة بين الأمر cd والنقطتين ..، هذه قاعدة تخرجنا من ذلك المأزق: alias cd..="cd .."أو يمكننا اختصار الأمر بالشكل التالي: alias ..="cd .."وهذه قاعدة أخرى لإنشاء اسم مستعار يسهّل عملية البحث عن الملفات: alias fhere="find . -name "إدارة النظاميحتاج مديرو الأنظمة العاملة بلينكس إلى استخدام الكثير من الأوامر مع تفضيلاتهم الخاصة باستمرار، وهذه فرصة جديدة لتعلّم وإنشاء بعض الاختصارات. تتيح القاعدة التالية إنشاء اسم مستعار يسهّل عرض أقسام واستخدامات القرص الصلب لديك ومعلومات أخرى عنه بطريقة مرتبة باستخدام الأمر df: alias df="df -Tha --total"ويمكن تطبيق نفس القاعدة مع كل من الأمر du والأمر free: alias du="du -ach | sort -h" alias free="free -mt"يستخدم الأمر ps لعرض العمليات والبرامج التي يقوم لينكس بتشغيلها مع معلومات تفصيلية عن كل برنامج، يمكن تسهيل قراءة الخرج من خلال الاختصار التالي: alias ps="ps auxf"كما يمكن إنشاء قاعدة تتيح لنا البحث ضمن جدول الخرج عن عملية محدّدة للاكتفاء بعرضها فقط مما يوفر لنا الوقت: alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"فمثلًا للحصول على معلومات العملية bash فقط يمكن كتابة الأمر التالي: psg bash USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 1001 5227 0.0 0.0 26320 3376 pts/0 Ss 16:29 0:00 bashأمثلة إضافيّةيعمل الأمر mkdir على إنشاء مجلّد جديد، لكن عند اختيار اسم لمجلد موجود بالفعل يعيد لنا رسالة خطأ، يمكن استخدام الخيار -p مع الأمر السابق لإهمال تلك الرسالة (ودون إنشاء المجلد)، كما يمكن عن طريق قاعدة الاختصار التالية جعل هذا الخيار افتراضيًا: alias mkdir="mkdir -p"أيضًا بإضافة الخيار v إلى الأمر السابق نحصل على المزيد من التنسيق، ففي حال وجود مجلد بذات الاسم يتم تجاهل الأمر وعدم عرض رسالة خطأ، أما لو كان الاسم غير مُستخدم فيعيد الأمر السابق خرجًا على الشاشة يؤكّد عملية إنشاء المجلد بنجاح: alias mkdir="mkdir -pv"في معظم الحالات التي نستخدم بها الأمر wget لتحميل ملف ما من الويب فإننا غالبا ما نمرّر له الخيار -c لدعم استكمال التنزيل في حال حدوث خطأ بالاتصال، لجعل ذلك افتراضيًا ننشئ القاعدة التالية: alias wget="wget -c"يعتبر الأمر history واحدًا من الأدوات الفعّالة، حيث يتيح لك البحث ضمن الأوامر التي سبق واستخدمتها، ويطبع لك النتائج المطابقة على الشاشة مرفقة بأرقامها التسلسليّة (حسب التنفيذ)، حيث يمكن استدعاء الأمر مجددًا من رقمه مسبوقًا بإشارة (!): alias histg="history | grep"كما هو معروف، تتوفر بعض أدوات الطرفية بنسختين، تكون الأولى أكثر بساطة، فيما تقدّم الأخرى ميزات وخدمات أكثر، ومن خلال إنشاء الاختصارات سيكون بإمكانك تشغيل النسخة المحسّنة بنفس أمر تشغيل النسخة الأولى. فالأمر top على سبيل المثال يملك نسخة محسنة وملونة بالاسم htop (إذا لم تكن لديك ركبّها من مدير الحزم في توزيعتك أولًا)، وبإنشاء قاعدة الاختصار التالي نعمّم استخدام النسخة المحسنة في كل التطبيقات الأخرى التي تستعملها: alias top="htop"تقدّم الأداة ncdu عرضًا تحليليًا لاستخدام مساحة القرص، الملفات والمجلدات في لينكس بأسلوب تفاعليّ وخيارات متنوّعة: alias du="ncdu"يستبدل الأمر السابق الأداة du بالأداة ncdu، كما يمكن استبدال الأداة df بـ pydf المحسّنة من خلال: alias df="pydf"هل ترغب في معرفة رقم الـ IP الخاص بجهازك؟ أنشئ القاعدة التالية: alias myip="curl http://ipecho.net/plain; echo"فكّر دومًا كيف يمكنك الاستفادة من القوّة الرهيبة للأسماء المستعارة، على سبيل المثال إذا كنتَ تدير موقعًا على الإنترنت بينما يلزمك باستمرار إعادة تحجيم الصور التي ترغب برفعها إلى الموقع لتناسب مقاسًا مخصصًا، يمكنك تركيب الأداة imagemagick من مدير الحزم في توزيعتك، وإنشاء قاعدة تسهل عليك العمل: alias webify="mogrify -resize 690\> *.png"حالما تطبّق الأمر الجديد webify سيتم إعادة تحجيم جميع الصور الموجودة ضمن المجلّد النشط عندما يكون عرضها أصغر من 690px. وبذات الطريقة يمكنك تسهيل رفعها إلى الخادوم الخاص بك: alias upload="sftp username@server.com:/path/to/upload/directoryالدوالكما رأينا فإن ميزة الأسماء المستعارة توفّر أسلوبًا رائعًا في اختصار تنفيذ الأوامر وتسهيل مراكبتها، إلا أنها في النهاية محدودة القدرة، إذا لا يمكننا على سبيل المثال تطبيق سلسلة طويلة من الأوامر معًا في اختصارٍ واحد. لحسن الحظ فهناك ما يساعدنا لتلبية هذه المتطلبات، تُقدّم الدوال functions أسلوبًا بسيطًا في اختصار تنفيذ قطعة من الأوامر دفعة واحدة، وهي أسلوب يقع بين ميزة الأسماء المستعارة وبين كتابة النصوص التنفيذيّة shell scripts، وتعمل بذات طريقة الأسماء المستعارة، كما يمكنها استقبال الدخل من المستخدم لمعالجته. سنتحدث في هذه الفقرة عن الاستخدامات الأساسية لميزة كتابة الدوال، مع بعض الأمثلة التوضيحيّة، متجنبين التفاصيل الواسعة لها، والتي يمكن من خلالها برمجة نصوص تنفيذيّة متقدّمة. لتعريف دالّة لدينا أسلوبين أساسيين، يستخدم الأوّل الأمر function ويأخذ الشكل العام كالتالي: function function_name { command1 command2 } بينا يشبه الأسلوب الآخر نمط الأقواس في لغة C: function_name () { command1 command2 }يمكن ضغط مساحة الأسلوب السابق ليُكتب في سطر واحد باستخدام الفاصلة المنقوطة بين الأوامر، انتبه إلى أن الفاصلة المنقوطة يجب أن تلتصق بالأمر الذي يسبقها: function_name () { command1; command2; }لنبدأ مع مثال بسيط، عادةً عندما نقوم بإنشاء مجلد جديد ضمن الطرفية فإن الخطوة التالية مباشرة هي الدخول إليه، سنكتب دالة لذلك؛ تنشئ مجلد جديد ثم تنتقل إليه: mcd () { mkdir -p $1 cd $1 }الآن يمكن استخدام الدالة mcd بدلًا من mkdir ثم cd: mcd test pwd /home/demouser/testالدالة التالية تعرض مثالًا متقدمًا على ما يمكن كتابته وتنفيذه عن طريق الطرفية، وهي تعمل على فكّ ضغط أنواع كثيرة من تنسيقات الملفات المضغوطة: function extract { if [ -z "$1" ]; then # display usage if no parameters given echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>" else if [ -f $1 ] ; then # NAME=${1%.*} # mkdir $NAME && cd $NAME case $1 in *.tar.bz2) tar xvjf ../$1 ;; *.tar.gz) tar xvzf ../$1 ;; *.tar.xz) tar xvJf ../$1 ;; *.lzma) unlzma ../$1 ;; *.bz2) bunzip2 ../$1 ;; *.rar) unrar x -ad ../$1 ;; *.gz) gunzip ../$1 ;; *.tar) tar xvf ../$1 ;; *.tbz2) tar xvjf ../$1 ;; *.tgz) tar xvzf ../$1 ;; *.zip) unzip ../$1 ;; *.Z) uncompress ../$1 ;; *.7z) 7z x ../$1 ;; *.xz) unxz ../$1 ;; *.exe) cabextract ../$1 ;; *) echo "extract: '$1' - unknown archive method" ;; esac else echo "$1 - file does not exist" fi fi }تعمل الدالة على تحديد تنسيق الملف واختيار الأمر المناسب له للتنفيذ. خاتمةنأمل أن يكون هذا الدرس قد أعطاك بعض الإلهام لكتابة قواعد الاختصار والدوال التي تناسبك، مما يسهّل عليك أداء مهامك الروتينيّة وإضافة بعض المتعة على سطر الأوامر. تذكّر أن تبقى حذرًا من إعادة تعريف بعض الأوامر الأساسية بصوّرة قد تسبب مشاكل أو أخطاء قاتلة، كن حذرًا ولا تنشئ اختصارات تؤثّر على ملفات النظام. نقطة البداية الجيدة هي من سجل الأوامر التي كنتَ قد استخدمتها بالفعل في الفترة الماضية، لترى مالذي يتكرّر باستمرار، وتعمل على اختصار العمل من خلال إنشاء أسماء مستعارة جديدة: history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] &quot; &quot; CMD[a]/count*100 &quot;% &quot; a;}' | grep -v &quot;./&quot; | column -c3 -s &quot; &quot; -t | sort -nr | nl | head -n10يعرض السطر السابق خرجًا بالأوامر الأكثر تكرارًا في استخدامك اليوميّ ونسبها المئوية، مما يعطيك الفكرة عن احتياجاتك الحاليّة. نسعد أيضًا بمشاركتكم لنا الاختصارات والدوال التي تستخدمونها عادةً لتبادل الخبرات. ترجمة -وبتصرّف- للمقال An Introduction to Useful Bash Aliases and Functions.
  10. أقسام الأسئلة والأجوبة في الأكاديميّة ليست مُخصصة للنقاش صديقي. يمكنك طرح النقاش في مجتمعات IO
  11. السؤال مكرّر. ألقي نظرة على هذه الأسئلة: ما هي أفضل الكورسات المجانية الأجنبية للربح من الإنترنت؟ ما هي أبسط الأعمال التي يمكنني الربح من خلالها في مواقع الخدمات المُصغّرة؟
  12. أهلا بك سعيد، يمكنك مراجعة الإجابات التالية على هذه الأسئلة - وهي تتقاطع مع سؤالك: ما هي الخطوات التي يجب علي اتباعها للنجاح في العمل الحر؟ هل هناك عمل حرّ بأقل المهارات؟ متى أتوقف عن العمل الحرّ وابدأ مشروعي الخاص؟ أعاني من فقد الحماس، كيف أعالج هذه المشكلة؟ ما هو المجال الأكثر طلبًا في سوق العمل الحرّ ما هي أبرز مشاكل العمل الحرّ؟ وابحث في القسم فهو مليء بالأسئلة التي تخطر على بالك وإجابات لها.
  13. أهلا بك محمد، يمكنك مراجعة الإجابات على هذه الأسئلة - وهي تتقاطع مع سؤالك: ما هي الخطوات التي يجب علي اتباعها للنجاح في العمل الحر؟ هل هناك عمل حرّ بأقل المهارات؟ متى أتوقف عن العمل الحرّ وابدأ مشروعي الخاص؟ أعاني من فقد الحماس، كيف أعالج هذه المشكلة؟ ما هو المجال الأكثر طلبًا في سوق العمل الحرّ ما هي أبرز مشاكل العمل الحرّ؟
  14. يُعتبر مدير الحزم الثنائية لـ 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.
  15. 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.
  16. تُعتبر كلمات المرور والمصادقة من المفاهيم الأساسية التي يتعامل معها كل مستخدم لبيئة غنو لينكس، إذ تتسع هذه المواضيع لعدد من أدوات وملفات الضبط المختلفة. نستكشف في هذا الدرس بعض هذه الملفات الأساسية مثل 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.
  17. 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.
  18. تحدثنا في الدرس السابق عن الآلية التي تعمل وفقها خدمة 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.
  19. تتعرّض جميع الخدمات التي يتم تقديمها عبر الإنترنت لمختلف أنواع الهجمات من قبل أطرافٍ مُسيئة. فإذا كانت الخدمة تتطلب تسجيل دخول (أو ما يُعرف بالتوثيق أو المُصادقة)؛ فسيحاول بعض المستخدمين غير الشرعيين أو برمجيات 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.
  20. غالبا ما ينظر الناس إلى موظفي "الدعم الفني" بشكل يشبه نظرتهم للكائنات أسفل السلّم الغذائي، سيل من المشكلات والمتاعب لا أكثر، من تلك النظرات على سبيل المثال: مهمّة الدعم الفني التعامل مع العملاء الحمقى.على موظفي الدعم الفني الردّ على المكالمات؛ إنها وظيفة لا يقبل بها حتى مندوبي المبيعات.موظفو الدعم الفنّي يتعاملون بهدوء مع غضب العملاء، في حين أنهم لا يملكون حلًا حقيقيًا لمشاكلهم. يبدو هذا محبطًا للغاية، إذ كيف يمكنك التعامل في موقف يضعك أمام عميل محتقن غضبًا، ورغم قدرتك على مساعدته وحل مشكلته إلا أن صلاحياتك الإدارية لا تسمح لك بذلك؟ البعض قد يرى أنها وظيفة سيئة لشخص عاطل عن العمل لم تُعرض عليه فرصٌ لأعمالٍ أفضل، هل توافق ذلك؟ إذا كانت هذه هي رؤيتك وتصوّرك عن وظيفة الدعم الفني، فهو تصوّر سلبيّ للأسف، مما يعني أنك تفوّت على نفسك أسلوبًا مهمًا في التسويق، تطوير المنتجات، وزيادة المبيعات. الوجه غير المُتوقّع لشركتكهل سبق وتعرضت لموقف ما شعرت فيه بالتناقض وعدم الانسجام ما بين صوت أحدهم وصورته، كما لو أنك كنت تتوقع صوتًا آخر له، أو صورة تناسب الصوت أكثر؟ ديفيد بيكهام لاعب الكرة الإنكليزي مثال واضح على هذا؛ القائد السابق لمنتخب إنكلترا، وزوج المغنية ومصممة الأزياء فيكتوريا بيكهام، كل هذه الكاريزما ستتلاشى عندما يفتح فمه ويبدأ بالكلام، فصوته غير متوقع على الإطلاق، إنها صدمة ستبقى مطبوعة في ذاكرتك! موقع شركتك على الإنترنت يعكس الصورة الأنيقة لك، لكن ما الذي سيحدث عندما يصدر عن الشركة ما يتناقض وصورتها الجميلة تلك؟ ماذا يحدث عندما يتصل أحدهم بمندوبي الدعم الفني؟ بالنسبة لمعظم زبائنك، فموظف الدعم الفني هو الواجهة البشرية الوحيدة التي سيتعاملون معها، وهو من سيؤكّد الصورة البرّاقة للشركة أو سينفيها، فهل ستوظف لهذه المهمة الحساسة الأشخاص الأقل كفاءةً، والأسوأ خُلقًا، بأقل الأجور الممكنة؟ الدعم الفني سرّ المبيعات العاليةلقد حققنا ملايين الدولارات في شركة Smart Bear من خلال المبيعات للأفراد والشركات ومن دون القيام بـ "مبيعات" فعلًا، على الأقل لو ابتعدنا عن المفهوم التقليدي لكلمة مبيعات، والذي يعرف عادةً على أنه "مجموعة من العمليات والأشخاص والمدراء، تركز جميعها على زيادة الإيرادات في جداول زمنية ربع سنوية". لو سألني أحدهم؛ كيف حصلنا على صفقات تزيد على المئة ألف دولار دون بذل الكثير من الجهد أو الدخول في مراهنات متهورة؟ ببساطة: موظفو الدعم الفني لدينا كانوا البائعين! يمكنك القول بأنّ مهام موظفي الدعم الفني تقتصر بالرد على المكالمات والإجابة عن الأسئلة علاوةً على تهدئة الزبائن الغاضبين، لكن ذلك لن يحقق لك تغييرًا كبيرًا، في المقابل فإنني أرى أن مهمّة الدعم الفني الأساسيّة هي جعل الزبائن مبهورين بأداء موظفيك الرائع، الأمر الذي سيعود بالفائدة على منتجك ومبيعاتك بالتأكيد. (اقتبست هذه الفكرة من كاثي سيرا، حيث أراها تنطبق على الدعم الفني إضافةً لمطوري المنتجات). وهذا يعني ألّا تقتصر على مساعدة الزبائن في إيجاد أمر ما ضمن القوائم، بل اسألهم عما يحاولون القيام به لمساعدتهم في إنجاز المطلوب. لا تكتفي أيضًا بشرح خصائص المنتج بل ساعد العملاء للحصول على النتيجة. لا تتوقف عند الاعتذار لعدم وجود الميزة التي يرغبون بها بل ساعدهم بالالتفاف حول ذلك و إتمام المطلوب بدونها. أنت تعلم منتجك جيدًا وتعرف نوع المشكلات التي فيه بشكل يفوق الزبائن، لذا لن يكون من الصعب أن تجعل تجربتهم مع المنتج أكثر نجاحًا عقب اتصالهم وتعطي تلك المكالمة قيمة مضافة. ما تقوم به من تلبية زبائنك وتمكينهم من حل المشكلات وإنجاز المطلوب ليس مهمًا لمنتجك فحسب، إنه يشمل شركتك أيضًا. أعط زبونك تجربة مذهلة مع المنتج، وهو سيبذل المال بحيث يبقى مستمرا مع هذه التجربة الرائعة. هكذا تضاعف مبيعاتك. مفاجأة سارّةللأسف فإن الصورة النمطية التي يمتلكها معظمنا عن موظفيّ الدعم الفني سلبية، هذه بعض من تجارب الناس معهم: اسأل الدعم الفني عن طريقة تغيير الخط، وسيطلبون منك إعادة إقلاع حاسوبك الشخصي.التمس من الدعم الفني تغيير العنوان الخاص بفواتيرك، وسيعرضون عليك ثلاث خدمات لا تحتاج أيًا منها.الاتصال بالدعم الفنّي يحتاج خريطة مع نظام تحديد مواقع لتستطيع التنقل في متاهات الخيارات والقوائم، المكالمات قيد الانتظار، وكتابة رقم حسابك ثلاث مرات "لأغراض أمنية"، وكأن من سيسرق رقم حسابك عاجز عن كتابته لثلاث مرات.دعنا نستفد من هذه الصورة السلبية لموظفي الدعم الفني، فعندما يتوقّع عملاؤك خدمات ذات مستوى متدنّ، ويحصلون على خدمة عالية الجودة، فستحصد نقاط قوّة نوعية، كأن يقوم المستخدمون بكتابة تغريدات حول خدماتك، أو يجرّب آخرون طلبها للمرة الأولى، وذلك بسبب الدعم الفني المتميز الذي تقدمه، كما أن الزبائن لا يكتفون بمتابعة تغريداتك أحيانًا وإنما يشجّعون متابعيهم على فعل ذلك أيضًا. مهلًا، هل لاحظت ذلك؟ هكذا يصبح الدعم الفنّي أفضل حملة إعلانية عبر وسائل التواصل الاجتماعي، بل قد يكون برنامجًا دعائيًا أكثر فاعلية من تشغيل موظفين مناوبين لنشر إعلانات لك هنا وهناك. هل يدهشك هذا؟ يقال "قدّم وعودا أقل من استطاعتك، وأعط خدمات أكثر من المتوقع"، الدعم الفني الخارق هو الأفضل بالطبع، لكن مجرّد تصرّفك بشكل بشري سيجعلك في المقدّمة حتما، حتى لو اكتفيت بالرد على رسائل البريد الإلكتروني دون استخدام مجيب تلقائي ستحرز تقدمًا بشكل ملحوظ. لماذا نفوّت فرصة سهلة كهذه في إدهاش العملاء؟ أليستْ "مفاجأة سارة" ونادرة في مجال العمل التجاري؟ ألستَ مهتما بأن تصبح شركتك معروفة كما الآخرين؟ الطريقة الأسهل لتخرج من مقر الشركة، بينما لا تزال في الداخلتضج الإنترنت بمقولة ستيف بلانك -صاحب منهجية تنمية العميل- والتي يتحدث فيها أن كل ما تحتاج معرفته عن عملائك موجود خارج مقر الشركة، ما يعني أن تنمية العميل الفعلية لا تتحقق دون الحديث المباشر مع الناس، التعرف على مشاكلهم عن قرب، مراقبة انفعالات وجوههم أثناء تقديم عروضك وأعمالك. في الحقيقة أجزم أن تنمية العميل ليست ما نمارسه في جلسات العصف الذهني على لوح أبيض في قاعة الاجتماعات، أو إضاعة الوقت حول حجم الخط المناسب في العروض التقديمية. على الرغم من ذلك، فإنه من الصعوبة بمكان تخصيص ميزانية عالية للتنقل لا سيما بالنسبة لمن لا يزالون في البدايات محاولين بناء عملهم الخاص، أو لأولئك الذين يعتمدون في عملهم على الإنترنت، بالتأكيد عليك أن تحاول بكل جهدك لأن الأمر يستحق، لكن ماذا عن الـ 94% المتبقية من وقتك، وهو الوقت الذي تمضيه في شركتك، خلف مكتبك؟ ثمّة أمور لا ينبغي أن نفرط بها، أعط الدعم الفني الأولوية الثانية هنا، الدعم الفني يوجد حيث يشتكي الناس أمورًا لا تعمل في المنتج، ميزات مفقودة رغم أنهم يحتاجونها، حيرتهم وارتباكهم تجاه أمر ما، إن كتابة دليل الاستخدام وتبويب المشكلات لن يكون كافياً معظم الوقت. البصيرة تكمن في ما وراء الأسئلة. لنقل أن أحدهم اتصل بالدعم الفني مُرتبكًا حيال أمرٍ ما، المهمة الأولى لديك هي تهدئته بالطبع، لكن انتبه إلى أنك أمام فرصة هامة لتطوير منتجك، يمكنك أن تطرح الأسئلة التالية على نفسك في محاولة لتحسين المنتج: ما الذي سبب ارتباك الزبون في المقام الأول؟هل تبدو وجهة نظر العملاء مختلفة عن وجهة نظري؟هل تتناسب مصطلحاتنا مع الزبائن؟هل نستخدم تشابيه لغوية لا توصل المطلوب؟هل أحتاج لتركيز اهتمامي على تجربة المستخدم المبتدئ عوضًا عن المتقدم؟هذه الأسئلة تكتيكية نابعة من المشكلة الحالية التي نقف أمامها، ورغم أهميتها لكنها لا يجب أن تشغلنا عن أسئلة أكثر استراتيجية وأهمية: هل أوجدت هذه المشكلة صعوبة ما لدى الزبون لم أستطع معرفتها رغم قدرتي على حلها؟هل كان هناك سوء فهم أو لبس ما لدى العميل كان يتوجب عليّ أن أوليه اهتمامًا أكبر؟ هل توجد فكرة لإبداع منتج جديد في هذه المشكلة؟إذا كان العملاء يحاولون الحصول على ميزات غير موجودة في المنتج، هل كنت أستطيع أن أؤمن لهم ما يحتاجونه من البداية؟السؤال الأخير تحديدا هو ما جعل شركة Smart Bear ترى النور، إذا لم أولي اهتماما بما وراء أسئلة الزبائن، لم تكن لتقرأ هذه السطور، نعم، الأمر بهذه الجديّة! عليك الآن أن تعود إلى الوراء، منذ البداية وحتى اليوم لتراجع مئات الرسائل الإلكترونية من العملاء لتحدد كيف كانت تجربة الزبائن ومالذي كانوا يتوقعونه وتجيب عن باقي الأسئلة السابقة، وهذا ما يحتاج إلى تفكير وتحليل معمقين بعيدًا عن التقارير الموجزة والملخصات المؤتمتة. الدعم الفني هو أكثر الفرص القريبة والممكنة لتطوير منتجاتك، وأقربها نتيجةً من ضغط "المبيعات". هنا حيث يكتشف المستخدمون منتجك ويقدمون تقاريرهم عنه. هل ستسمع النصيحة، أم ستلقيها جانبا؟ ماذا بعد؟ما الذي يمكن أن يفعله الدعم الفني أيضًا فيما لو أوليته الاهتمام وأعطيته الصلاحيات التي يستحق؟ أم أنك تعتقد بأنني مخطئ فيما قلت، وتفضّل أن تولي الدعم الفني لموظفي دولار واحد لكل ساعة ليبعدوا عنك العملاء المزعجين؟ ترجمة -وبتصرّف- للمقال Tech Support *is* sales لصاحبه Jason Cohen.
  21. 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.
  22. 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.
  23. 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.
  24. تُعتبر الشبكات موضوعًا واسع التفاصيل مليئًا بالتشعبات بالنسبة للعديد من مديري الأنظمة المبتدئين، فهناك الكثير من الأدوات والخدمات التي يجب الإلمام بها لفهم هذه المواضيع بشكل جيّد، كالطبقات 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 ليكون مرجعًا أو نموذجًا يشرح كيف يجب أن تُصمم البروتوكولات بطريقة معياريّة.
  25. ما هو 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 من أفضل أدوات أتمتة تنفيذ المهام الروتينية، لذا من المهم استيعاب كيفية الاستفادة من نقاط القوّة في كلّ منهما وتجنب نقاط ضعفهما مما يعطيك أقصى قدر من الفائدة والفعالية. ورغم أنه قد يبدو أمر إعدادهم للمرة الأولى مربكًا بعض الشيء، إلا أن ذلك سيوفّر عليك الكثير من الوقت على المدى الطويل في تكرار العمليات مرّةً بعد أخرى دون أن تحتاج غالبًا لتعديلات تذكر على ملفات الإعداد لاحقًا.