Home Previous Up Next5.3 تشغيل الخادمات
حول
المحتويات
مشاريع
ثواب
مقالات
تنزيل
English

5.3 تشغيل الخادمات

محتويات هذا الفصل:

5.3.1 الطريقة العامة

بشكل عام تشغيل أي خادم هو مجرد تشغيل المراقب daemon الخاص به وهو البرنامج الذي يستمع بانتظار طلبات المخدومين، قد يتطلب تشغيله بعض المعاملات(أين يجد ملفات الإعداد وباسم من يعمل) ولأن الخادم يفترض أن يعمل بمجرد تشغيل النظام لهذا تقوم كل توزيعة بوضع الخادمات على شكل خدمات services تنفذها نصوص الإقلاع boot scripts بالمعاملات المناسبة، كما ذكرنا في فصل 4.3 نظرة داخلية ، هذه النصوص تقبل معاملات مثل start و stop و restart و status فإذا كان لدينا خدمة اسمها foo فإن تشغيلها في أي لحظة يكون بالأمر /etc/init.d/foo start

عند تغيير ملفات الإعداد يفترض بك في الغالب إعادة تشغيل الخادم /etc/init.d/foo restart وإذا كان هناك خادمان يتضارب عملهما فإن عليك إيقاف أحدهما /etc/init.d/foo stop قبل تشغيل الآخر. ولتعلم أن خادم ما يعمل أم لا /etc/init.d/foo status إذا كان خادم معين غير موجود بشكل تلقائي في أحد مستويات التشغيل وتريد أن يعمل تلقائياً بمجرد دخول ذلك المستوى (مثلاً عند تشغيل الجهاز) ، كل ما عليك تغيير اسم النص في مجلد مستوى التشغيل ليبدأ ب S بدلاً من K
cd /etc/rc.d/rc5.d && mv K75foo S75foo
وفي الغالب توفر التوزيعة أداة رسومية لذلك قد تكون في قائمة settings -> services. وهناك برنامج ntsysv يقوم بذلك أيضاً من خلال قوائم نصية.

لمعرفة ملف الإعدادات الخاص بخادم معين مثلاً apache httpd فإن أول ما تفكر به هو الكتيبات manual pages ولكن هذا في الغالب لن ينفعك لأن بعض التوزيعات تغيّر مكانها عن المكان القياسي! بكل بساطة اسأل مدير الحزم انظر فصل إدارة الحزم مثلاً في ريدهات وفيدورا:

bash# rpm -qc httpd2
أما ماذا تكتب في هذه الملفات عندها قد تكون الكتيبات مكاناً جيداً، ولكن معظم الخادمات لها قوالب جاهزة تكون في الغالب في دليل /usr/share/docs قد تظهر عند سؤال مدير الحزم عن الوثائق
bash# rpm -qd httpd2
هذه القوالب عبارة عن ملف إعداد متكامل به معظم الخيارات وبه الكثير من التعليقات وتوضح الخيارات غير الشائعة على شكل تعليق مع ملاحظة تشبه "أزل علامة التعليق ‘#‘ من بداية السطر التالي في الحالات التالية" كل ما عليك هو نسخ ولصق هذا الملف في المكان الذي تريد بعد قراءة التعليق.

إذا جربت كل الطرق ولم تنجح قد يكون ذلك بسبب جدار النار حاول إغلاقه ثم جرب مرة أخرى ثم غيّر قواعده. قد يكون السبب هو الإعتماد على خدمة أعلى/سوبر super service مثل xinetd (طريقة لتأمين الخادمات) و portmap (وهذا الأخير تستعمله كل الخادمات الخاصة ب RPC أي Remote procedure call مثل NIS و NFS وغيرهما) تأكد من أن الخدمة السوبر تعمل انظر البند 5.3.8. أو بسبب عوامل أخرى للحماية مثل ملفي hosts.allow و hosts.deny وغيرها.

5.3.2 خدمة ويب وبروتوكول http

أباتشي apache هو خادم ويب الأشهر فإذا كنت تريد نشر/عمل موقع إنترنت دون شراء استضافة hosting بإمكانك تحويل جهازك لخادم لموقعك بعد دفع ثمن حجز اسم فقط أو حتى دون ذلك (عنوانك هو عنوان الIP من مزود خدمة الإنترنت ISP) ولكن بعد التأكد من أن العقد يسمح لك بذلك. أكبر المواقع في العالم تعتمد عليه. فهو يصلح للكثير من الأنظمة المعروفة ، إذا كنت تريد تحويل جهاز ليخدم موقع إنترنت ثابت (مجرد ملفات html و صور وفلاشات) في هذه الحالة يمكن لجهاز pentuim I متخلف أن يفي بالغرض ويقدم سرعة عالية ، أو يقدم موقع ديناميكي متجدد باستعمال php و CGI و perl و python ... الخ لكن بجهاز أحدث قليلاً. لهذا تعتمده أضخم مواقع الإنترنت مثل www.Amazon.com و lycos و www.google.com وهو الخادم رقم واحد في العالم وأهم ميزاته أنه يحتاج منفذ واحد مفتوح (غالباً 80 أو 8080 أو 8088) ولايحتاج غيره على عكس IIS من مايكروسوفت الذي يحتاج أن تكون حفنة من المنافذ مفتوحة مما يسهل على المخترقين المهمة إضافة إلى ثقله على الجهاز. في هذا الموقع مقارنة قامت بها مختبرات زيف ديفيز Ziff-Davis بين apache وغيره www5.zdnet.com/products/content/pcmg/1709/305867.html. كما يمكنك ملاحظة قصص النجاح في www.linuxtoday.com/stories/18780.html ولأخبار أسبوعية انظر www.apacheweek.com. أغلب التوزيعات تحتوي على هذا الخادم بشكل حزم جاهزة كما يمكنك الحصول عليه من موقع www.apache.org على شكل حزمة مصدرية أو حتى ملف برنامج التركيب installer على نظام ويندوز.

بعد تركيب حزمة apache (التي قد يكون اسمه مختلفاً مثلاً httpd2) وتفعيله مثلاً ب service httpd start وهي تكافئ /etc/init.d/httpd start ووضعه في مستويات التشغيل chkconfig --levels 345 httpd2 on ثم ستجد الدليل /var/http/www/html ضع ملفات html هناك. وجه متصفح الإنترنت على العنوان http://127.0.0.1/ أو http://localhost/ (طبعاً أو العنوان الخاص بجهازك عبر عقدة آخرى استعمل ifconfig) وستجد الصفحات التي وضعتها هناك. يمكنك الوصول للوثائق الخاصة ب apache بكتابة العنوان http://localhost/manual/index.html التي قد تكون موجودة على حزمة أخرى في توزيعتك.

ملف إعداد apache هو /etc/httpd2.conf أو /etc/httpd/conf/httpd2.conf كما يمكن إعداد apache بسهولة من خلال خادم webmin فبعد أن تفعّله في xinetd بطريقة مشابهة لما فعلناه مع CUPS و swat من إعداده بطريقة رسومية من خلال أي متصفح وذلك بوضع العنوان ورقم المنفذ 'http://localhost:10000/'.

 تلميح

الحديث هنا عن apache 2 إذا كنت تريد 1 فإن الملف هو httpd.conf

يحدد هذا الملف المنفذ الذي سيستمع له apache وذلك بالتعليمة Listen
Listen 80
بإمكانك تحديد من يسمح له بالوصول إلى أي دليل من خلال
<Directory /var/www/html>
# Order Deny,Allow means Default is allow
	Order Deny,Allow
	Allow from all
</Directory>
<Directory /var/www/html/sercret>
# Order Allow,Deny means Default is deny
	Order Allow,Deny
	Allow from 127.0.0.1
	Allow from mynet.com
# Allow any 192.168.5.X
	Allow from 192.168.5.0/24
# allow any 10.1.X.Y
	Allow from 10.1
</Directory>
في كل دليل تجد ملف باسم .htaccess هذا الملف قد يغيّر خصائص الدليل الحالي عن المحددة في ملف الإعدادات وتسمى هذه العملية override ومحتويات هذا الملف وكأنها جاءت بين <Directory > الخاصة بذلك الدليل. مثلاً لمنع الوصول لدليل معين إلا من مواقع محددة ضع ملف بهذا الاسم فيه ومحتوياته
# this is .htaccess
	Order Deny,Allow
	Deny from all
	Allow from 127.0.0.1
	# add "Allow from MY_IP" here

يمكن عمل تقارير عن apache بواسطة webalizer فبعد تنفيذه يتم عمل التقرير في مجلد usage يمكنك الوصول إليه عبر http://localhost/usage أو تفتحها الملف /var/www/usage/index.html من مدير الملفات، هناك برنامج آخر اسمه analog يقوم بفس العمل الذي يمكن أن يصبح أجمل وأجمل بواسطة Report Magic (أو rmagic)، من البرامج الأخرى لتحليل وإنتاج التقارير برنامج lire (انظر www.logreport.org)، ويمكن قراءة ملفات log الخام مباشرة أو عبر أدوات التوزيعة أو أو عبر برنامج متخصص مثل logwatch.

يمكن تسريع خادم apache بجعله يستمع للمفذ 8080 وتنفيذ خادم tux - RedHat Content Accelerator على منفذ 80 ، خادم tux أسرع بكثير من أي خادم آخر معروف (هنا نحتاج apache ليقوم ب cgi) فقد حطم رقم قياسي في السرعة

Dell's servers running TUX break SPECweb99 records:
  http://www.dell.com/us/en/biz/topics/linux_specweb99.htm
السبب أنه يعمل ضمن النواة (لا يوجد ملفات مؤقتة أو إي إضاعة للذاكرة). وهناك الكثير من البدائل الأخرى مثل خادم thttpd الصغير، والسريع، والآمن والذي يدعم CGI! تذكر أن Apache هو الأشهر والأضخم ولكنه ليس الأفضل بالضرورة لأن الأفضل هو الذي يناسب احتياجاتك التي تختلف عن احتياجات غيرك.

5.3.3 البريد الإلكتروني email

تشغيل خادم بريد إلكتروني لا يحتاج أكثر من تركيب الحزمة دون التدخل في ملفات الإعداد الطلسمية في الغالب (حتى أن بعضها يعود إلى عصر UUCP قبل اختراع الإنترنت). أشهر وأقدم وأضخم خادمات توصيل البريد MTA (وفق بروتوكول SMTP) هو sendmail وهو يتمتع بالكثير من المزايا مثلاً التنكر بأن يكون ahmad@mail.mynet.edu ولكن يكون ahmad هو مستخدم في جهاز آخر support.mynet.edu يتم تمرير الرسائل إليه هناك، ولأنه يدعم خيارات ضخمة (يعود بعضها إلى أيام بروتوكول UUCP قبل أن توجد الإنترنت) فإن ملفات إعداداته معقدة لدرجة أنها لا تعدل مباشرة بل عن طريق معالج m4 macro processor لهذا تتجنبه أغلب التوزيعات (التعقيد يعني عدم الأمان) إلا أنها تضعه على أقراصها دون تركيبه بشكل تلقائي (باستثاء ريدهات التي تأتي مع sendmail و postfix دون تفضيل بينهما وتأتي مع برنامج يحول بينهما). ثم بالدرجة الثانية (من حيث الشيوع) يوجد postfix (المثبت تلقائياً في ماندريك) يوجد الكثير من البدائل مثل smail و courier-mta و qmail وهذا الأخير صمم والهدف منه أن يكون أكثر أمناً لكنه غير شائع ولا يأتي على شكل حزمة في الغالب. بشكل عام هذه الخادمات ذات ملفات إعداد معقدة ولحسن الحظ في الغالب لست بحاجة لتعديلها. وتشكل هذه الخادمات خوفاً كبيراً لذا عند عدم الحاجة لها لا تثبتها. ينصح مرجع ديبيان Debian Reference استعمال exim أو postfix وتجنب sendmail و qmail. في توزيعة ديبيان الخادم المفضل هو exim (في Sarge اسم الحزمة exim4-daemon-heavy ) فهو سهل الإعداد مقارنة بغيره (خصوصاً باستعمال أداة ديبيان exim4-config) ويوفر مزايا عديدة منها دعم postgreSQL و LDAP ويحتوي على مضاد للفيروس و SPAM. لكن تذكر أن أي خادم بريد غير مأمون بالوراثة (لأسباب تاريخية).

أما بالنسبة لخادمات الوصول للبريد عن بعد IMAP و POP فإن مراقب imapd (اسم الحزمة في فيدورا هو cyrus-imapd) يدعم الإثنين معاً. ديبيان يأتي مع خادم Courier Mail Server في حزمة 'courier-base' الذي يدعم مراقبات IMAP و POP3 و ESMTP. خادم Courier Mail Server يمكن إدارته وإعداده عبر واجهة ويب بتركيب حزمة courier-webadmin القادر على تغيير إعدادات مراقبات MTA و IMAP و POP و Webmail و LDAP والجزيئات modules الخاصة بالاسناد عبر قواعد بيانات MySQL و PostgreSQL. يظهر في هذه الواجهة فقط تلك الأجزاء المركبة. ديبيان يحتوي على خادم POP3 يسمى popa3d فهو سريع وصغير وآمن من صمم من أجل OpenWall (المعروفة بالأبحاث على الأمن). يمكنك عمل شهادات certification لدعم SSL من أجل الأمان، مثلاً :

bash# cd /usr/share/ssl/certs && make imapd.pem

كما يمكنك كتابة صفحة ويب لتسمح للمستخدمين للوصول إلى صناديق بريدهم وإرسال البريد عبر أي متصفح ويب (وليس MUA)، يمكن أن تكتب هذه الصفحة بلغة PHP (أو أي لغة CGI) من الصفر، أو أن تستعمل أي من تطبيقات بريد الويب webmail الجاهزة مثل:

  • sqwebmail - واجهة ويب للبريد من Courier Mail Server ويصلح لغيره.
  • squirrelmail - واجهة ويب للبريد كتبت على PHP4 تستمل IMAP و SMTP الصفحات تولد بلغة HTML 4.0 الصرفة (دون Javascript) لأقصى التوافقية عبر مختلف المتصفحات. توفر دعم قوى ل MIME وتوفر دفتر عناوين وإدارة المجلدات.
  • imp3 - نظام بريد ويب كتب على PHP يستند إلى IMAP. يوفر دعم جيد للغات غير الإنجليزية.
  • openwebmail - نظام بريد ويب مكتوب بلغة perl. صمم ليتعامل مع مجلدات كبيرة بطريقة توفر الذاكرة.
  • phpgroupware عدة حزم تنتهي بالمقاطع email و calendar و todo و addressbook و notepad و manual - منظومة كاملة من تطبيقات الويب groupware. تضم عدة تطبيقات مثل البريد و التقويم (الرزنامة) وقائمة المهام ودفتر العناوين ومدير ملفات ودفتر ملاحظات.
  • iLoHaMail - مجموعة خفيفة كاملة متعددة اللغات من تطبيقات الويب تستعمل MAP/POP3 وهي سهلة الاستعمال. توفر عدد كبير من المزايا مثل تقارير النشاطات والحماية من Spam وتدعم MySQL و GPG والمؤثرات Themes والتدقيق الإملائي عبر 'aspell' المجلدات وإدراج الصور و دفتر عناوين وتقويم والبحث في الرسائل.
  • twig (انظر www.informationgateway.org) وهي اختصار للجملة The Web Information Gateway أي بوابة معلومات الويب. منظومة groupware عبر الويب كتبت على PHP. كان الهدف الأساسي هو توفير واجهة بريد الويب عبر IMAP ثم أصبحت الآن تقدم تقويم وقارئ أخبار (منتديات شبكةUSENET) ودفتر عناوين وغيرها. إنها تدعم MySQL و PostgreSQL.
يمكنك أن تستعمل وسائل التحكم في الوصول بناءً على طالبها host-based access control أو جدر النار لتمنع الوصول الخارجي لمنافذ خدمة البريد بحيث لا يصل المستخدمين من الخارج الوصول إلى بريدهم إلى عبر واجهة بريد الويب وهذا ما تفعله شركات تزويد البريد المجاني.

يمكن لبرنامج 'fetchmail' أن ينزل البريد من خادمات IMAP و POP البعيدة. الخادم procmail يقوم بمعالجة البريد والتصنيف والفلترة مثلاً لعمل قوائم بريدية mailing lists. وقد أصبح عمل خادمات Mailing Lists بفضل مدير القوائم البريدية من غنو GNU Mailing List Manager المسمى mailman انظر www.list.org. ويوجد خادم آخر للقوائم البريدية اسمه Ecartis وكلاهما يوفر واجة ويب للاشتراك وتصفح الأرشيف.

5.3.4 بوابة الوصول للإنترنت والخادم الوكيل proxy

إذا كنت في شبكة وتريد لبعض العقد أن تتصل بالإنترنت عبر خط واحد من خلال وصلها مع خادم فإن هناك طريقتين أولاههما عمل بوابة gateway يقوم جدار النار فيها بتمرير الرزم pocket forwarding إلى وصلة الإنترنت (انظر الفصل التالي) وهنا يجب أن تكون هذه البوابة الوجهة التلقائية default route لكل عقد الشبكة الأخرى. والثانية هي الخادم الوكيل proxy web cache.

أما الخادم الوكيل proxy فأشهرها هو squid. يعمل هذا المراقب ليس فقط على تمكين المخدومين من الوصول للإنترنت بل أيضاً ضمان ذلك بسرعة من خلال الاحتفاظ بكمية منها عنده فإذا طلب شخصان نفس الملف لا يطلبها مرتين من الإنترنت. في ملف الإعداد squid.conf تستطيع التحكم في المنفذ الذي يعمل عليه (3128 هو التلقائي) تستطيع تحديد كم الحد الأقصى من الذاكرة أو من القرص يستهلك... إلخ

أما إذا كنت تريد مجرد مشاركة الوصول للإنترنت ولست مهتما بكل تلك المزايا التي يوفرها squid، جرب خادم آخر أقل شهرة مثل tinyproxy فهو خادم وكيل خفيف لا يحتفظ بنسخ caching ويمكنه أن يخفي الهوية anonymizing. إما إذا كنت تريد خادم وكيل للتصفح مجهول/مخفي الهوية anonymously جرب 'anon-proxy' فهو يستخدم مخدوم JAP أي Java Anon Proxy فيعمل على تشفير الطلبات عدة مرات ثم يرسلها إلى سلسلة من الخادمات الوسيطة (انظر http://anon.inf.tu-dresden.de. ويوجد برتوكول آخر للخادمات الوكيلة يسمى Socks proxy الذي يمكنه أن يكون خادماً وكيلاً للويب عبر بوتوكول غير HTTP، ويستخدم كثيراً مع خدمات أخرى مثل الدردشة. أحدها مراقب danted الموجود في حزمة dante-server.

5.3.5 ملفات عن بعد

بالنسبة للنقل عبر FISH و scp انظر ssh في البند التالي وأما للتشارك مع ويندوز انظر samba في البند الذي يليه. ولقد تحدثنا عن http، ولم يبقى سوى NFS و ftp .

إذا كنت تريد تصدير المجلد /misc/export1 من جهازك بحيث تستطيع عقد أخرى الوصول إليه فإن الملف /etc/exports هو الذي يتحكم في ذلك ويمكن للجهاز الخادم أن يحدد السماح بالقراءة والكتابة أم القراءة فقط (وهذا ما يجب أن يكون) بالاعتماد على العنوان (دون كلمات سر) . مثلاً

/misc/export1	somename.mynet.com(rw) othernet.net(rw) (ro)
هنا حددنا أن somename.mynet.com و othernet.net يستطيعون الكتابة وغيرهم لا يستطيع ويجب أن لا يكون هناك مسافة بين اسم الشبكة و الإذن كما أن الإذن التلقائي هو قراءة فقط لهذا لا داع لكتابة (ro) في نهاية السطر. يمكن عمل هذا بواسطة مدير ملفات KDE وذلك بعمل share ثم اختيار nfs على أنه النوع.
 تلميح

توفر التوزيعات أدوات مثل system-config-nfs في فيدورا لهذا الغرض. ولكنه في الغالب يقوم بعمل ملف /etc/exports فقط

حتى يتمكن الطرف الآخر من الوصول عليك تشغيل مراقب daemon الخاص ب nfsd و mountd و portmap و السماح لهم بالمرور عبر جدار النار (المنافذ 2049 و 635 و 111 على الترتيب، شغل rpcinfo -p للحصول على هذه الأرقام) والسماح لهم عبر /etc/hosts.allow انظر البنود الخاصة بهم في هذا الفصل
 تلميح

يوجد خادم nfs مصغّر وسريع وعالي الأداء على شكل module داخل نواة لينكس، يوجد هذا الخادم في حزمة مستقلة في توزيعة ديبيان.

بروتوكول ftp كما قلنا له الكثير من الخادمات ربما أفضلها vsftpd - very secure ftp daemon وربما أكثرها شيوعاً في يونكس هو wu-ftpd (اسم البرنامج in.ftpd وهو عبر xinetd) وتأتي ديبيان مع خادم proftpd (قبل غيره) فهو يوفر الكثير من المزايا مثل virtual-hosting وملف إعدادات شبيه ب Apache (إضافة إلى ملف .ftpaccess بطريقة مشابهة .htaccess)، ولأن ftp غير مشفر ربما تفضل أن لا تسمح إلا بالدخول المجهول anonymous في هذه الحالة قد يكفيك apache و tux. كما أن هناك نوعان من ftp هما الفاعل active FTP والمنفعل passive FTP حسب من يحدد رقم منفذ ftp-data. ففي الأولى active FTP يتفق المخدوم والخادم على أي منفذ على المخدوم يتصلان (عبر حوار مع منفذ ftp-control في الخادم) ويتصل المخدوم إلى منفذ ثابت هو رقم 20 لدى الخادم أما في الثانية passive FTP يتفقان على أي منفذ على الخادم يتصلان.

		{active FTP}
client:X --->[I'm on port X give me that file]---> server:21 (ftp-control)
client:X <-->[connection est]<--> server:20 (ftp-data)
		{passive FTP}
client:X --->[give me that file in passive way]---> server:21 (ftp-control)
client:X <---[call me on port Y]---< server:21 (ftp-control)
client:X <-->[connection est]<--> server:Y (ftp-passive-data)
باختصار إن active FTP تجعل إعدادات الأمان لدى الخادم أسهل فمنفذ ftp-data هو دائماً 20 لدى الخادم ، أما في passive FTP على الخادم أن يفتح عدد كبير وغير معروف من المنافذ! وفي الحالتين منفذ ftp-control هو رقم 21 لدى الخادم.
 تلميح

كانت حماية خادم passive FTP بجدار ناري شبه مستحيلة (لأن المنافذ مجهولة) ، ولكنها أصبحت عملية بسيطة باستعمال iptables netfilters في النواة 2.4 وما بعدها، حيث يمكن معرفة أرقام المنافذ بتتبع ما يجري من حوار على منفذ ftp-control فمنافذ ftp-data المفتوحة تحمل علامة related للإتصالات التي جرت على منفذ ftp-control التي عرف منافذها إنظر الفصل التالي.

الحل البديل للتخلص من كل هذا القلق بسبب ftp (إضافة إلى أنه لا يشفر كلمات السر) هو sftp أي secure ftp client وهو جزء من سلسلة openssh لكنه غير متوافق مع ftp القديم فهو يحتاج خادم ssh فقط. أما كخادم ftp فإن vsftp أي Very Secure FTP يعد الخيار الأول ليس لأنه آمن بل لأنه أيضاً أسرع (هذا الخادم آمن بمعنى الحماية من buffer overflow ولكن هذا لا يغيّر حقيقة أن البرتوكول يتطلب إرسال المعلومات غير مشفرة)

حتى تعمل ftp كما يجب عليك تفقد إعدادات pam و قائمة ftpusers وهي قائمة بمن يسمح/يمنع من الدخول بحسب الخادم و pam.

5.3.6 خادم ssh والشبكات الافتراضية الخاصة VPNs

كل ما عليك و تشغيل sshd وهذا في الغالب تقوم به التوزيعة عنك. تعمل هذه الخدمة عبر منفذ 22 تأكد أن يسمح بها جدار النار وهو في الغالب ما تقوم التوزيعة أيضاً.

حتى تعمل اتصال آمن (أكثر أمناً) بين جهازين عبر ssh يوفر لك ssh طريقة إسناد لا تعتمد على إرسال كلمات سر عبر الشبكة (لا مقروءة ولا مشفرة) لتقليل من خطر تسربها بل يستعمل طريقة إسناد تعتمد على زوجين من المفاتيح (زوجين أي مفتاحين وليس أربع هكذا هي الفصحى) إذ عليك توليد مفتاحين لكل مستخدم الأول خاص/سري لا تعطيه لأحد (الأذونات 600)، والآخر عام تنسخه على كل جهاز تريد بالإتصال به. ويتم الإسناد دون السؤال عن كلمة سر بل عن طريق وجود الملف الخاص فهو إثبات شخصية أما العام يوضع على الطرف الآخر فإذا أردت الدخول على الجهاز البعيد ذي الملف الملف العام فقط يقوم بتشفير رقم عشوائي بواسطة المفتاح العام ثم يرسل الرقم المشفر ويطلب ممن يدعي أنه الشخص أن يفك تشفير الرقم العشوائي بواسطة مفتاح الفك الخاص/السري فإذا كنت من تدعي وتملك الملف تعرف ما هو ذلك الرقم العشوائي المشفر، ولاحظ أن ما تم بثه في الأسلاك هو رقم عشوائي مرة مشفراً ومرة دون تشفير ولم يتم إرسال أي كلمة سر أو ملف سري/خاص.

وهناك نوعان من المفاتيح rsa و dsa سنتحدث عن rsa أما الأخرى فاعمل نفس الخطوات مع إبدال هذه بتلك نفذ وأنت باسم المستخدم الذي تريد

bash$ ssh-keygen -t rsa
ستسأل عن جملة السر pass-phrase وهي جملة-سر! يجب أن تكون طويلة (ويمكن أن تكون فارغة وسيتم التأكد من هويتك من خلال ملف المفتاح السري ولكن عليك حماية هذا الملف لأنه هويتك). يصبح لديك مفتاح سري ~/.ssh/id_rsa والمفتاح العام ~/.ssh/id_rsa.pub هذا الأخير عليك إضافته إلى ~/.ssh/authorized_keys في الأجهزة البعيدة الأخرى (وليس في جهازك) مثلاً الأمر التالي يجمعها عنك ويعرضها على الشاشة
bash$ ssh-keyscan HOST
حيث HOST هو عنوان (رقم/اسم) العقدة الذي تريد أخذ المفاتيح العامة منه لتسمح له بالدخول عندك من خلال مفتاحه الخاص و جملة السر إن وجدت. لإضافتها بشكل مباشر ببساطة
bash$ ssh-keyscan HOST >> ~/.ssh/authorized_keys
يمكنك أن ترسل المفتاح العام لديك إلى الطرف الآخر
bash$ cat ~/.ssh/id_rsa.pub | ssh USER@HOST "cat - >>~/.ssh/authorized_keys"
حيث USER هو معرّف المستخدم على HOST التي هي العقدة التي تريد إرسال المفاتيح العامة لها لتتمكن بعد نجاحك في تنفيذ الأمر (تجيب عن كلمة السر بشكل صحيح) من الدخول إلى حساب USER على HOST عبر مفتاحك الخاص.

قلنا بأن ssh يمكنه عمل قناة آمنة stunnel وهذا أمر بسيط لنقل أنك تريد فحص بريدك (يعمل الخادم على منفذ 110) الآن ادخل إلى ذلك الخادم عبر ssh ولكن بالطريقة التالية ssh -C -f -L 1100:mail.somewhere.com:110 mail.somewhere.com sleep 1000 (الخيار C للضغط و f أي fork in background ليعمل في الخلفية) إذا لم تكن تريد تحديد الفترة شغله بالأمر ssh -C -L 1100:mail.somewhere.com:110 mail.somewhere.com واكتب exit عندما تنتهي. الآن افتح برنامج email مثل kmail وأعده ليستعمل المنفذ 1100. هنا 1100 منفذ على جهازك و 110 منفذ على الخادم. طبعاً لا ننس أن نذكر برنامج stunnel الذي يتم تشغيله على الطرفين بعد توليد شهادات

bash# cd /usr/share/ssl/certs && make stunnel.pem
bash# stunnel -d 993 -r imapd
هنا يبحث عن 'imapd' في '/etc/services' ويعرف الرقم ويضعه مكان الاسم (ليس في هذه الأداة فحسب بل في أكثر الأدوات يمكن استعمال اسم الخدمة مكان رقمها).

الشبكة الافتراضية الخاصة Virtual Private Network (أو VPN للاختصار) تعني ربط شبكتين محليّتين بعدتين (أو عقدة وشبكة) عبر وصلة الإنترنت (مثلة شبكة محلية LAN في طوكيو وأخرى في باريس) في كل منهما نستعمل العناوين الخاصة private المحجوزة للشبكات المحلية والتي لا تكون مرئية لبقية الإنترنت خارج هذه الشبكة ومرئية داخل هذه الشبكة الداخلية الخاصة. هناك عدة طرق لعمل شبكات VPN، أحدها تستعمل مزيجاً من أداتي 'ssh' و 'ppp' لعمل شبكة افتراضية خاصة آمنة ومضغوطة. الفكرة هنا بسيطة يقوم pppd بالإتصال بالإنترنت وتحويل الحزم pockets إلى سيال stream ثم ينفذ ssh ليتصل على العنوان المرئي للإنترنت للشبكة الثانية ويرسل له ذلك السيال مشفراً إلى sshd فيه ويطلب من sshd أن ينفذ ppp ليعيد فصل السيال إلى رزم pockets كما في المخطط. انظر VPN ppp-ssh HOWTO

        ppp           ssh             internet                ppp
(pocket) --> (stream) --> (encrypted) ->-///->- sshd (stream) --> (pocket)
هناك أنواع أخرى من شبكات VPN غالباً ما تتطلب عملاً في فضاء النواة kernel-space إلى جانب الأدوات العاملة في فضاء المستخدم. ولأن عمل قناة VPN tunnle يتطلب تعديلات كبيرة على نصوص الإقلاع booting scripts قد تربك أدوات التوزيعة، ننصح استخدام الحلول التي توفرها توزيعتك. مثلاً توفر ريدهات نظام CIPE أي Crypto IP Encapsulation في أداة إعداد الشبكة redhat-config-network وتضيفها على أنها واجهة شبكة NIC عادية. في حين توفر ديبيان الحزم التالية:
  • 'cipe-source' - ششبكة CIPE VPN عبر UDP، عليك تصنيف نواة جديدة بكتابة'make-kpkg --revision number modules_image' وستحصل على حزمة نواة تدعم CIPE.
  • 'openvpn' - شبكة VPN عبر مفذ UDP تدعم إسناد TLS وتبادل مفاتيح SSL.
  • 'freeswan' - شبكة VPN عبر IPSEC (أي Internet Protocol SECurity) وهو بحاجة إلى عدة رقع للنواة لكن ديبيان جاهز.
  • 'openswan' - شبكة VPN أخرى عبر IPSEC SWAN.
  • 'webmin-freeswan' - إضافة إلى webmin لإدارة FreeSWan IPSEC VPN.
  • 'pptpd' (أو PoPToP daemon) - خادم Point to Point Tunneling Server متوافق مع مخدومات Microsoft VPN وهو بحاجة إلى رقع للنواة اسمها kernel-patch-mppe.
  • 'vpnc' - مخدوم VPN متوافق مع Cisco.
  • 'tinc' - مراقب VPN يعمل شبكة VPN بتشغيل واحد على كل طرف، يستعمل SSL للأمان.
  • 'ike-scan' - يكتشف ويميّز عقد IKE (أي IPsec VPN Servers)

5.3.7 خادم samba وشبكات مايكروسوفت

تختلف تسمية المراقب من توزيعة لأخرى فقد تكون smb أو samba أو sambad ... إلخ. شغّل الخادم كما هو متوقع /etc/init.d/smb start. عليك قبل كل شيء عمل مستخدمين لsamba بواسطة smbpasswd بالخيار a من أجل الإضافة ودونه من أجل التعديل. على الأقل root (يفترض أن لا يكون هناك علاقة بينها وبين كلمة سر الجذر الحقيقية)

bash# smbpasswd -a root
password: ********
re-enter password: ********
bash# smbpasswd -a ali
password: ********
re-enter password: ********
ولكن قبل ذلك تأكد أن ويندوز و samba يتكلمون نفس اللغة! ففي ملف /etc/samba/smb.conf داخل الإعدادات العامة global تأكد من أن كلمات السر تشفر (كما يتوقع ويندوز) وربما تحب أن تحدد الملف الذي تخزن فيه الكلمات، كما يجب عليك أن تحدد مستوى من التوافقية عبر متغيّر os level، كلما كان أكبر كان أفضل، 1 تعني حتى Windows98 و 17 حتى Windows NT Workstation 4.0 و 33 تصل إلى Windows NT Server 4.0 وأعلى قيمة هي 255 لكامل قوى Samba.
[global]
# ...
encrypt passwords=yes
smb passwd file=/etc/smbpasswd
os level = 34
# ...
المقطع الكامل من هذا الملف قد يبدو (الكثير من الخيارات موجودة لعمل خادم حساب المستخدمين Domain controller ولتحديد اسم المجموعة ولتحديث كلمة سر samba مع كلمة سر unix )
[global]
workgroup=MYGROUPNAME
  netbios name = LINUX
  server string = Linux BOX
  encrypt passwords = Yes
  map to guest = Bad Password
  passwd program = /usr/bin/passwd
  unix password sync = Yes
  max log size = 50
  time server = Yes
  socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
  add user script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -M %u
  domain logons = Yes
  os level = 64
  lm announce = True
  preferred master = True
  domain master = True
  dns proxy = No
يمكن إضافة خيار logon script = netlogon.bat لتنفيذ ذلك الملف عند دخول مخدوم ويندوز مثلاً لضم دليل مشترك على أنه drive G:.
 تلميح

توفر التوزيعات أدوات خاصة لإعداد خادم Samba مثلاً في ماندريك عبر مركز تحكم ماندريك أو في ديبيان عبر 'dpkg-reconfigure --priority=low samba'.

أما كيفية إضافة share لمشاركته عبر الشبكة فذلك بسيط لنفرض أنك تريد مشاركة المجلد /home/ali/share في الملف السابق أضف إلى نهايته ما يشبه
# ...
[anyname]
    comment = Shared stuff
    path=/home/ali/share
    public=yes
    writeable=yes
    printable=no
    # writelist= @mygroup
حيث anyname هو أي اسم تريد أن تطلقه على هذا المجلد. printable تكون دائماً no للمجلدات.

يمكن إدارة samba بشكل كامل من خلال swat بسهولة تامة. برنامج swat يقوم بإعداد samba لتشغيله عليك أولاً أن تخصص منفذ له وتشغل samba وذلك في التوزيعات القديمة التي تستعمل inetd بإضافة السطر التالي إلى ملف /etc/services (طبعا تحتاج لأن تكون جذراً)

swat 901/tcp
والسطر التالي إلى /etc/inetd.conf
swat stream tcp nowait.400 root /usr/sbin/swat swat
حيث /usr/sbin/swat و المسار إلى برنامج swat ويمكن أي يكون /usr/local/samba/bin/swat ثم إعادة تشغيل مراقب الشبكة inetd daemon وذلك بكتابة killall -HUP inetd أو /etc/init.d/inetd restart. أو في التوزيعات الحالية من خلال xinetd.d بالتأكد من وضع disable = no في ملف /etc/xinetd.d/swat بحيث يصبح كما يلي
#/etc/xinetd.d/swat
service swat
{
	port		= 901
	socket_type	= stream
	wait 		= no
	only_from 	= 127.0.0.1
	user		= root
	server		= /usr/sbin/swat
	log_on_failure	+= USERID
	disable		= no
}
ثم أعد تشغيل xinetd ب /etc/init.d/xinetd restart

ثم الدخول من أي متصفح (أو مدير ملفات) على موقع http://localhost:901/ وهو ليس موقع إنترنت وإنما خادم swat موجود على جهازك الذي افترضت أنه localhost و 901 هو الرقم التقليدي الذي خصصناه لبرنامج إعداد samba المسمى swat تظهر لك صفحة يمكنك استعمالها للقيام بالإعدادات

لإعداد ويندوز 2000 ليكون عضو في شبكة samba

  • اذهب إلى My Computer
  • اختر Properties
  • انقر على Network Identification notebook tab
  • انقر Properties
  • في خانة Computer Name أعط اسماً للجهاز مثل WIN2KBOX
  • وفي خانة Domain: واكتب الاسم الذي حددته في لينكس ثم انقر OK
  • ستسأل عن المستخدم وكلمة السر الخاصة ب samba التي عرفتها على جهاز اللينكس
  • انقر موافق
  • سيتم اعادة تشغيل ويندوز (كالعادة)

5.3.8 خدمة xinetd

هذه خدمة سوبر super service! ، أي أنها تستعمل من قبل خادمات أخرى وهي بديل عن inetd (أي InterNet Daemon) الذي هو بديل عن تشغيل خادمات خطرة بطريقة مباشرة وحصر استعمالها على عناوين محددة فقط. كما رأينا في برامج الإدارة مثل الخاص بالطباعة CUPS و الخاص بApache المسمى webmin و الخاص ب samba المسمى swat كنا بحاجة لخادم يسمح بالوصول عبر منفذ من 127.0.0.1 أما من خارج هذا العنوان فيكون المنفذ مغلقاً تجنباً للتجسس لأنها لا تشفر وتجنباً لخطر buffer overflow لأن فتح منافذ أقل 1024 بحاجة لإذن الجذر يعمل inet/xinetd الخادم المضمون المصمم والأمن في البال، على فتح المنفذ فقط أمام من تسمح له الإعدادات ثم تشغيل الخادم المطلوب باسم مستخدم دون صلاحيات (حتى إذا اخترق لا يسبب مشاكل) ، كما يعمل على توزيع الحمل وعمل ملفات تقرير log ... إلخ. كذلك الحال مع خادم ftp المسمى in.ftpd حيث نشعر بالمزيد من الأمن.

في inetd كانت الإعدادات تتم عبر ملفين الأول /etc/services ويحدد رقم المنفذ وما يقابله من خدمة كما في swat 901/tcp والثاني /etc/inetd.conf ويحدد خيارات تشغيل هذا الخادم كما رأينا في

swat stream tcp nowait.400 root /usr/sbin/swat swat
أما الخادم الجديد فهو يعمل من خلال ملفات منفصلة تكون في الدليل /etc/xinetd.d مثلاً /etc/xinetd.d/swat مما يسهل على مدير الحزم. صيغة هذا الملف على الشكل التالي
# this is a comment
service foo
{
	# disable = yes mean it's OFF
	disable		= no
	# you may put the port here
	port		= 901
	# hosts or nets that this server is visible like 172.19.0.0/16
	# everywhere is 0.0.0.0/32
	only_from 	= 127.0.0.1
	# the user to run it and the path to it
	user		= root
	server		= /usr/sbin/foo
	server_args	= -f
	# what to log += mean add to default
	log_on_failure	+= USERID
	# 30 new connection per second
	cps		= 30

	socket_type	= stream
	wait 		= no
}
بعد service نضع اسم الخدمة وبين الحاصرتين نتأكد من إزالة التثبيط disable = no ويمكن أن نحدد من أين يقبل الخادم الطلبات عبر only_from. يمكن إضافة خيارات لعمل التقارير وماذا يكتب فيها. يمكن نصب مصيدة زمنية والكثير من الخيارات انظر كتيب هيئة هذا الملف.

5.3.9 السماح والحجب للخدمة حسب طالبها

كما xinetd فإن هناك الكثير من الخادمات تعتمد على مكتبة libwrap أو ما يسمى tcp wrapper للحكم على السماح أو حجب الخدمة بناءً على العقدة host التي تطلبها (لا داع لإعادة كتابة الخادمات القديمة التي لا تدعمها يكفي أن تشغل عبر xinetd) الملفان hosts.allow و hosts.deny يتحكمان في سلوك هذا الخادم في السماح أو منع خدمة معينة لجهاز معين وصيغتهما

daemons... : hosts... : [ spawn shell_command ]
حيث daemons هي الخدمة و hosts هي العقد التي تنطبق عليها. مثلاً كمدير حقيقي يفترض أن تمنع كل شيء إلا بعض الاستثناءات لذا ضع في ملف المنع hosts.deny
ALL : ALL
أو كل شيء عدا الشبكة المحلية (علماً أن الأولى أكثر أمناً)
ALL : ALL EXCEPT 10.0.0.0/8
يمكن أن نستعمل ملف السماح hosts.allow نسمح بكل شيء عدا in.ftpd خادم wu-ftpd من أي مكان
ALL EXCEPT in.ftpd : 192.168.0.
يمكن (في أي من الملفين) أن نضع أكثر من سطر كما يمكن يكون المراقب daemons و hosts أكثر من واحد تفصلهم مسافة، كما يمكن أن يكون أحدهم ALL أو LOCAL أو KNOWN أو UNKNOWN أو PARANOID ويمكن أن نستعمل ‘*‘ و ‘?‘ كما في أسماء الملفات، ويمكن الاستثناء بواسطة EXCEPT. أما بالنسبة ل hosts فإن وضع نقطة في النهاية تعني مع أي لاحقة وفي البداية مع أي سابقة. لمزيد من التفاصيل اكتب man 5 hosts_access لرؤية الكتيب. مثلاً 192.168.0. تعني 192.168.0.*
 تلميح

تعمل الإعدادات بمجرد تخزن التغييرات في الملفين hosts.allow و hosts.deny دون الحاجة لإعادة تشغيل أي خادم ولا حتى xinetd

5.3.10 خادم حساب المستخدمين

في الأماكن التي غالباً ما لا نخصص جهاز لكل شخص بل نريد لكل شخص أن يدخل باسمه من أي جهاز (مثل الجامعات) ، يمكن تحقيق ذلك بعمل نسخة من ملفي passwd و shadow فنجعل الحسابات متطابقة يدوياً على كل الأجهزة ولكن هذا غير مجدي لأن المستخدم إذا غيّر كلمة سره عليه أن يفعل ذلك على كل الأجهزة. ويمكن استعمال برامج التخزين المتزامن rsync التي تجعل دليل/ملف في عدد من الأجهزة متطابق فإذا حدث في مكان يحدث في الآخر؛ هذا أيضاً غير مجدي لأن الحسابات معلومات حساسة يجب أن لا تنقل هكذا عبر الشبكة، كما أن تصميمها العام يحجز جزء كبير من عرض حزمة البث bandwidth. في ويندوز يسمى خادم حساب المشتركين Domain controller أما في عالم يونكس فيسمى Information/Directory server

حل هذه المشكلة يكون بأكثر من طريقة

 تلميح

بعد تثبيت فيدورا وعند أول تشغيل يسألك أي من هذه الطرق إضافة للسجل المحلي تريد أن يكون كمخدوم client.

منها الأقل أمناً NIS التي ليس فقط نضعها خلف جدار النار بل وضمن إعدادات host.allow متحفظة حتى نضمن عدم وصول هذه المعلومات الحساسة لخارج الشبكة. يجب التعامل مع NIS عندما تكون مجبراً على ذلك (مثلاً لديك يونكس قديم على الشبكة لا يدعم الطرق الأحدث) لأنها ليس فقط لا تقوم بالتشفير بل وتعطي كلمات السر-hash- لكل من يطلب. طريقة أخرى هي kerbose وهي طريقة تقوم ببعض التشفير ولكنها غير متوافقة تماماً مع PAM أي أن البرامج بحاجة لإعادة كتابة للتوافق معها. ومن الطرق الأخرى samba الذي تحدثنا عنه فهو يمكن لينكس من أن يكون خادم أو مخدوم كل ما عليك تعديل ملفات PAM. الخيار الأفضل هو ldap (تحديداً openLDAP) فهو متوافق مع PAM أي أنه يعمل بطريقة شفافة مع البرامج التي تعي PAM كل ما عليك تعديل ملف إعداد PAM الخاص بها -ربما يقوم بذلك مدير الحزم-. يتوفر ل ldap عدد من برامج الرسومية سواء client أم server منها ل KDE مثل kldap و kdiradm ومنها لغنوم مثل gq و 'directory-administrator' و diradmin ويوجد برنامج ldap browser/editor يقوم بما يوحي به اسمه. ولمحبي سطر الأوامر لدينا حزمة ldaptor-utils (الاسم من ديبيان) التي توفر أدوات تشبه أدوات يونكس التقليدية مسبوقة بالمقطع 'ldaptor-' مثل 'ldaptor-passwd'، مجموعة أخرى من الأدوات في حزمة migrationtools التي تنتقل من أنظمة المعلومات الأخرى (مثل ملفات يونكس و NIS و NetInfo ... إلخ) إلى LDAP.

LDAP تعني Lightweight Directory Access Protocol وتعني كلمة دليل directory قاعدة بيانات يتم قراءتها بشكل متكرر وتعديلها بشكل نادر (أي أن سرعة القراءة يجب أن تكون عالية) كما أن طبيعة البيانات كتلك في دليل العناوين محددة مسبقاً وغير علائقية. يمكن أن تستعمل لأهداف أخرى غير حسابات المستخدمين. يدعم ldap العناقيد clusters أي أن يكون هناك أكثر من خادم يعملون معاً بتزامن لتجنب تعطل الشبكة كاملة في حال تعطل الخادم. مراقبه هو slapd وملف إعداده هو slapd.conf.

في بعض التوزيعات (ربما ريدهات) يكفي تشغيل برنامج authconfig على الأجهزة المخدومة ليقوم بإعداد الطريقة التي تختار NIS أو LDAP ... إلخ. ويكون ذلك يدوياً بتحرير ملف /etc/nsswitch.conf مثلاً (هذا المثال ل LDAP والتعليقات ل NIS)

#/etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap
# for nis uncomment these
#host: files nis dns
#passwd: files nis
#shadow: files nis
#group: files nis
وعليك تحديد الخادم الذي يتبع له وذلك في LDAP بتعديل /etc/ldap.conf أو /etc/openldap/ldap.conf ثم تعديل ملفات PAM مثلاً ليكون مخدوم samba بإضافة سطر.
auth sufficient pam_smbpass.so nullok use_authtok try_first_pass
بعد auth الخاص ب pam_unix.so وتحويلها إلى sufficient وليس required. أما في ldap يكون السطر المضاف
auth sufficient pam_ldap.so try_first_pass
وبنفس الطريقة ل account و password إلا أن account لا تأخذ try_first_pass وأما password فإنها تأخذ use_first_pass. أما مخدوم NIS فنضع عنوان الخادم في /etc/yp.conf ونضيف إلى /etc/passwd سطراً يحتوي +:::::::

5.3.11 خادم DHCP و DNS

من أقدم طرق إعطاء عناوين IP ديناميكية هي خادم RARP وجداول ARP ويكون ذلك بتشغيل خادم rarpd الذي يقرأ ملف /etc/ethers وهو ملف يحتوي العنوان العتادي MAC وما يقابله من عنوان IP على سطر واحد. يمكن تحديث الجدول أو الإضافة عليه بالأمر arp مثلاً arp -s AB:89:01:23:45:67 192.168.1.90 ويمكن تحميل ملف ethers السابق الذكر يدوياً بواسطة arp -f

خادم DHCP (أي Dynamic host configuration protocol) هو أحدث خادم يعطي العناوين تلقائياً للعقد بمجرد ربطها دون الحاجة لإعدادها بطريقة يدوية. هذا الخادم متوافق مع بروتوكولات BOOTP أي يمكنه التواصل مع مخدومات من هذا النوع.

 تلميح

هناك مخدوم dhcp-client من تصميم ريدهات صغير جداً اسمه pump.

يعمل خادم DHCP على إعطاء العنوان للمخدوم بأن يقوم مخدوم و خادم DHCP بالتواصل عبر منفذ 67 على الخادم و68 على المخدوم عبر بروتوكول udp على عناوين البث (لأنه لا يملك عنوان بعد) ، 0.0.0.0 و 255.255.255.255. ملف الإعداد هو /etc/dhcpd.conf أو /etc/dhcp3/dhcpd.conf وهو يحدد صنف العناوين A أو B أو C ومن أي عنوان إلى أي عنوان يستعمل. وعنوان البوابة gateway/router واسم خادم الأسماء ns وإذا كان هناك أجهزة تريد إعطاءها عنوان محدد بناءً على العنوان العتادي Ethernet MAC/HW address
# dhcpd.conf - long sample many lines are optional.
option domain-name "myfoo.net";
option domain-name-servers ns1.myfoo.net;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "fooserver";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}
host fooclient {
  server-name "fooserver";
  next-server fooserver;
  hardware ethernet AB:89:01:23:45:67;
  fixed-address 192.168.1.90;
}
أما مراقب هذا الخادم فهو طبعاً dhcpd نشغله كم تعودنا /etc/init.d/dhcpd start أو نجعله دائماً يعمل تلقائياً في مستوى تشغيل معين.

خادم DNS هو الذي يعطي اسماً لكل عنوان وبالعكس. يحتفط الخادم بجدولين واحد الاسم وما يقابله من عنوان وآخر للبحث المعكوس أي العنوان وما يقابله من اسم. ما يحدث عند كتابة اسم موقع إنترنت مثل www.google.com في متصفح حيث يذهب طلب تحويل اسم الموقع إلى خادم DNS الخاص بمزود الخدمة ISP ومنه لأنه لن يكون عنده إلى أقرب خادم DNS الخاص بالإنترنت (موجودين في قائمة لدى DNS الخاص ب ISP في جدول يسمى hints)

يتم تشخيص خادم DNS من خلال أمر dig مثلاً dig foo.mynet.com تطلب تحويل foo.mynet.com إلى عنوان مع طباعة كل طلب وكل رد ومن الذي رد والفترة الزمنية. وللقيام بالعكس نستعمل الخيار x مثلاً dig -x 192.168.20.1 ويمكن استعمال dig لتوليد ملف hints الذي يحتوي أسماء خادمات DNS الخاصة بالإنترنت وتحدثنا عنه في الفقرة السابقة. وذلك من خلال أمر مثل dig @a.root-servers.net . ns >root.hints حيث root.hints هو اسم الملف الناتج و a.root-servers.net هو أحد تلك الخادمات، وربما يجوز (لست متأكد) وضع عنوانه dig @198.41.0.4 . ns >root.hints فيتولد ملف يشبه

; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET.
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
;; QUERY SECTION:
;;      ., type = NS, class = IN

;; ANSWER SECTION:
.                     6D IN NS        G.ROOT-SERVERS.NET.
.                     6D IN NS        J.ROOT-SERVERS.NET.
.                     6D IN NS        K.ROOT-SERVERS.NET.
.                     6D IN NS        L.ROOT-SERVERS.NET.
.                     6D IN NS        M.ROOT-SERVERS.NET.
.                     6D IN NS        A.ROOT-SERVERS.NET.
.                     6D IN NS        H.ROOT-SERVERS.NET.
.                     6D IN NS        B.ROOT-SERVERS.NET.
.                     6D IN NS        C.ROOT-SERVERS.NET.
.                     6D IN NS        D.ROOT-SERVERS.NET.
.                     6D IN NS        E.ROOT-SERVERS.NET.
.                     6D IN NS        I.ROOT-SERVERS.NET.
.                     6D IN NS        F.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10
K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241

;; Total query time: 215 msec
;; FROM: foobar.com to SERVER: A.ROOT-SERVERS.NET.  198.41.0.4
;; WHEN: Fri Oct 15 01:22:51 2004
;; MSG SIZE  sent: 17  rcvd: 436
حيث نجد فيه أسماء خادمات DNS الخاصة بالإنترنت، سنستعمل هذا الملف لاحقاً.
 تلميح

أسماء المواقع ليست حساسة لحالة الحروف إن كبيرة أو صغيرة مثلاً A.ROOT-SERVERS.NET هي نفسها A.Root-Servers.NeT ولكن أسماء المجلدات والملفات عند كتابة العنواين هي الحساسة.

خادم DNS في لينكس هو BIND وهو نفسه الخاص بنظام BSD فهو Berkeley Internet Name Domain واسم المراقب هو named هذا الخادم ساهمت فيه أكبر شركات ومنظمات (حسناً هل أقول جيوش) العالم انظر ملف README في دليل /usr/share/doc هناك خادم آخر أقل شهرة اسمه Dents لن نتحدث عنه.

ملف إعداد bind/named هو /etc/named.conf قد يختلف من توزيعة لأخرى. صيغة هذا الملف كما يلي

#/etc/named.conf
options {
	directory "/var/named";
};
controls {
	inet 127.0.0.1 allow { localhost; } keys { rndc_key; };
};
key "rndc_key" {
	algorithm hmac-md5;
        secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
	; generated with:
	; dnssec-keygen -a hmac-md5 -b bitsno -n HOST keyfile
};
zone "." {
	type hint;
	file "root.hints";
};
zone "0.0.127.in-addr.arpa" {
	type master;
	file "zone/127.0.0";
};
zone "mydomain.com" {
	type master;
	file "zone/mydomain.com";
};
zone "0.168.192.in-addr.arpa" {
	type master;
	file "zone/192.168.0";
};
الفقرة options تحدد بعض الخيارات مثل الدليل الذي يفترض أن الملفات به في المثال /var/named أما فقرة controls فتحدد بعض خيارات الحماية. أهم الفقرات تلك التي تحدد الشبكات domains والتي سنسميها المناطق zones كل منطقة يكون لها خادم DNS رئيسي master وقد يكون لها آخر فرعي slave يعمل في حال تأخر أو تعطل الآخر. ويجوز أن يكون خادم DNS واحد لأكثر من منطقة. المنطقة ‘.‘ هي التي تحتوي على جدول hints الخاص بحل عناوين الإنترنت الأخرى وهو الجدول الذي ولّدناه بأمر dig وسميناه root.hints (علينا أن نضه في الدليل الذي حددته options أي يصبح /var/named/root.hints) لهذا لاحظ خيارات هذه المنطقة type hint; file "root.hints"; النوع hints و الملف /var/named/root.hints وهي واضحة.

. لنؤجل ‘0.0.127.in-addr.arpa‘ قليلاً. ماذا لدينا؟ ... المنطقة ‘mydomain.com‘ خياراتها type master; file "zone/mydomain.com"; أي النوع خادم رئيس والملف هو /var/named/zone/mydomain.com في هذا الملف قد نضع

$TTL 3D
@	IN	SOA	mydomain.com. root.mydomain.com. (
		2004101506		; serial, todays date + todays serial #
		8H			; refresh, seconds
		2H			; retry, seconds
		4W			; expire, seconds
		1D )			; minimum, seconds
;		^----- time in H,W,D are hour,week,day
	IN	NS      mydomain.com.
	IN	NS      ns.otherdomain.net.
	IN	MX      10 mydomain.com.	; Primary Mail Exchanger
	IN	TXT     "MyDomain(tm) Inc limited"
localhost IN	A	127.0.0.1
router	IN	A	192.168.0.1
	IN	TXT	"Our proxy and firewall"
mydoeain.com. IN	A	192.168.0.2
ns	IN	A	192.168.0.3
	IN	TXT	"me The DNS"
www	IN	A	192.168.0.4
	IN	TXT	"Our apache server"
ftp	IN	CNAME	mydomain.com.
mail	IN	CNAME	mydomain.com.
news	IN	CNAME	mydomain.com.
funn	IN	A	192.168.0.5
;
;       Workstations
;
lab1pc1	IN	A	192.168.0.101
	IN	MX	10 mydomain.com.	; Primary Mail Host
lab1pc2	IN	A	192.168.0.102
	IN	MX	10 mydomain.com.	; Primary Mail Host
lab2pc1	IN	A	192.168.0.151
	IN	MX	10 mydomain.com.	; Primary Mail Host
معاني بعض المقاطع: SOA - start of authority أي البداية ، A - Address عنوان ، TXT - Text مجرد نص، CNAME - canonical name أي اسم آخر لنفس الجهاز، MX - mail exchange أين يرسل البريد الرقم الأقل أولوية أعلى، NS - name server أي خادم الأسماء DNS، PTR - Pointer مؤشر يستعمل في التعريف المعكوس. لاحظ وجود ‘.‘ في نهاية العناوين ووجودها يعني أنه اسم مطلق فإذا لم توجد هذه النقطة مثلاً في سطر ftp فإن العنوان يصبح نسبي أي يضاف إلى mydomain.com. فيصبح ftp.mydomain.com.mydomain.com. ! لإضافة أجهزة فقط استعمل A كما في آخر سطرين. الذي يعني أن الاسم lab2pc1 lab2pc1.mydomain.com. يعود للعنوان 192.168.0.151

المنطقة التالية 0.168.192.in-addr.arpa و المنطقة التي تركناها 0.0.127.in-addr.arpa هي تعريف المنطقة العكسية انظر فهما عكس 192.168.0.X و 127.0.0.X على الترتيب (ARPA جاءت من Advanced Research Project Agency جدة الإنترنت) الخيارات الخاصة بهما متشابهة مثلاً الأخير file "zone/192.168.0" أي أن الملف /var/named/zone/192.168.0 هو الذي يحدد هذه العملية ونضع فيه قيمة X في العنوان والاسم الذي يقابله كما في المثال

$TTL 3D
@	IN	SOA	mydomain.com. root.mydomain.com. (
			2004101506	; serial
			28800   	; Refresh, seconds
			7200    	; Retry
			604800  	; Expire
			86400)  	; Minimum TTL
;			^----- time in second
	IN	NS      mydomain.com.
	IN	NS      ns.otherdomain.net.
;       Servers
1	IN	PTR	router.mydomain.com.
2	IN	PTR	mydomain.com.
2	IN	PTR	ftp.mydomain.com.
2	IN	PTR	mail.mydomain.com.
2	IN	PTR	news.mydomain.com.
3	IN	PTR	ns.mydomain.com.
4	IN	PTR	www.mydomain.com.
5	IN	PTR	funn.mydomain.com.
;       Workstations
101	IN	PTR	lab1pc1.mydomain.com.
102	IN	PTR	lab1pc2.mydomain.com.
151	IN	PTR	lab2pc1.mydomain.com.
ماذا بقي؟ بقي أن تشغل الخادم /etc/init.d/named start

5.3.12 خادم ppp كما يفعل ISP

سنتعلم في هذا البند كيف تعد جهازك ليتم طلبه بواسطة ppp كأن تكون أنت مزود خدمة إنترنت، فيطلب الطرف الآخر رقم هاتفك ثم يقدم اسم وكلمة سر فتمنحهم عنوان IP ويستخدموا جهازك كموجه router أو بوابة gateway للإنترنت. هذا لا يكون شائعاً إلا في حالات نادرة ولكن قد ترغب بالإتصال بين مكتبك والبيت أو بين مكتبين عبر خطوط الهاتف (إذا كان كلفة الإتصال المحلي أقل كلفة الإتصال مع الإنترنت + إشتراك إنترنت) كما أن إتصال أحدهما بالإنترنت أو بأي شبكة محلية يصبح مرئياً للآخر.

عليك تركيب getty يدعم AutoPPP مثل mgetty وأن تتأكد من أنه هو العامل وليس أي getty مثل mingetty بالنظر في ملف inittab وأنه يعمل على جهاز المودم، وإعداده ليفعّل AutoPPP انظر ملف login.config. تأكد من أن الملف /etc/ppp/option يحتوي auth و lock و حدد خادمي DNS لمستخدمي ويندوز كما يلي

# /etc/ppp/options
# Specify which DNS Servers the incoming Win95 or WinNT Connection should use
# Two Servers can be remotely configured
 ms-dns 192.168.1.1
 ms-dns 192.168.1.2
# ...
ثم قم بإعداد طريقة للإسناد مثل PAP - Password Authentication Protocol وهي طريقة تعتمد على إرسال اسم المستخدم وكلمة السر (غير مشفرة) ، ويتم إعدادها بالملف /etc/ppp/pap-secrets الذي يتكون من اسم المستخدم ثم اسم الخادم(الجهاز نفسه) ثم كلمة السر فإذا لم تحدد فإنها تقرأ من /etc/passwd و /etc/shadow ثم العنوان الذي سيعطاه المخدوم فإذا وضع * أخذ أي عنوان إذا كان أول عمود (الاسم) فإنه يأخذ كل المستخدمين العاديين الموجودين في /etc/passwd. هذا مثال على ملف pap-secrets يسمح لكل المستخدمين العاديين بكلمات سرهم نفسها ويمنع مستخدم guest بوضع عنوانه - بدلاً من *.
# /etc/ppp/pap-secrets
# Every regular user can use PPP and has to use passwords from /etc/passwd
*	hostname	""	*
# other accounts that should not be able to use pppd!
guest	hostname	"*"	-
الطريقة الأخرى هي CHAP أي Challenge Handshake Authentication Protocol وهي تعني أن يتم توثيق الإسناد من خلال إرسال سؤال مشفر hash وإنتظار الرد المشفر عليه إذا كان المخدوم (الطالب) يعمل بنظام ويندوز يجب استعمال PAP لأنها لا تفهم CHAP القياسية (تختلف هذه الطريقة عن CHAP80 غير القياسية وغير المأمونة من مايكروسوفت). ملف إعداد CHAP هو /etc/ppp/chap-secrets وهو لا يختلف عن PAP كثيراً فالعمود الأول هو اسم من يطلب منه التعريف عن نفسه ثم اسم من يطلب التعريف ثم الرسالة ثم العنوان الممنوح. يتم الإعداد بسطرين الأول يحدد سؤال التحدي والآخر يحدد الرد. هذا مثال لما تكون عليه في الخادم
# /etc/ppp/chap-secrets
clientname servername "secret challenge" 28.30.120.1 *
servername clientname "answer" -
وفي المخدوم
# /etc/ppp/chap-secrets
clientname servername "secret challenge"	-
servername clientname "answer"			*
يمكن أن تكون العناوين بالأسماء أو بالأرقام أو *.

5.3.13 الخادمات العملاقة والشبكات العنقودية

باستعمال لينكس يمكن تشكيل عقود الحاسوب الفائق/الخارق supercomputer cluster دون إعادة كتابة التطبيقات أو حتى إعادة تصنيفها، وإذا كنت تريد تجربة ذلك يمكنك دون تركيب لينكس! لنأخذ فكرة عامة عن المعالجة المتوازية parallel processing أولاً.

العديد من الشركات المتجة للحواسيب الخارقة ذات المعالجة المتوازية ماتت، توقفت شركة إنتل عن تصنيع هكذا حواسيب، إنها مرتفعة الثمن وتزيد من خطر تمركز نقطة الفشل الواحدة. إلا أن المعالجة المتوازية لا تزال حية، حيث يمكن الحصول على أداء الحاسوب الخارق بمكونات من على الرّف (أي عتاد تجاري عادي متاح للأفراد)، فمعالج الحاسوب الشخصي الحديث يمكنه أن ينفذ آلاف الملايين من التعليمات في الثانية thousands of MIPS (أي Million instruction per second) فيمكن لنظام به أكثر من معالج شخصي أن يكون الحل.

عند تشغيل الأمر ps -ax ستلاحظ أن أغلب البرامج نائمة S (تنتظر بيانات من القرص مثلاً). هل لاحظت أن الرقم الأخير في مخرجات أداة uptime (وهو معدل الحمل في آخر ربع ساعة) أقل من النسبتين الّتين تسبقانه (الحمل لآخر دقيقة و5 دقائق) ؟ اكتب 'cat /proc/uptime' ولاحظ مدى تقارب الرقم الأول الذي يمثل الوقت الكلي (بالثواني) لعمل الجهاز مع الرقم الثاني وهو مجموع الوقت الذي كان الجهاز فيه لا يعمل شيئاً idle. لنفرض أن معالج عادي بسرعة 1 GHz فإن عليه أن ينتظر ذاكرة رام (سرعة ناقل الرام) وعليه أن ينتظر القرص الصلب لهذا يقضي أكثر وقته ينتظر. فإذا أصبحت سرعته 2 GHz فإننا لن نلاحظ تضاعف في الأداء بل ربما نحصل على أداء لا يزيد عن الأول! في الأنظمة متعددة المهام مثل لينكس زيادة السرعة تزيد الأداء (إلى حد معين) لأن البرنامج الذي ينتظر ينام ويعطى الدور لغيره

إذا كنت بحاجة للمزيد من الأداء كما في الأبحاث وبرامج محاكاة الواقع مثل التطبيقات الهندسية (نففق الهواء مثلاً) ، أو خادمات قواعد البيانات العملاقة فإن شراء جهاز بأسرع معالج ليس الخيار الأفضل. ربما يكون جهاز شخصي PC متعدد المعالجات SMP - Symmetric Multi Processing خياراً أفضل (تحتاج إلى لوحة أم من نوع خاص وعدد من المعالجات إنتل أو شبيهاتها) هنا في الوقت الذي ينتظر المعالج الأول بيانات من القرص يكون المعالج الثاني يعمل. تحتاج نظام تشغيل خاص لتستفيد منه، طبعاً لينكس! يجب أن تكون النواة لديك بها هذا الخيار (أغلب التوزيعات لا تركب هذه النواة تلقائياً ولكنها تضعها في حزمة أخرى ربما تسمى kernel-smp ) كما تحتاج أن تكون البرامج التي تتحدث عنها متعددة خيوط المعالجة multi-threads. إذا كان سبب قلة الأداء ناتج عن انتظار الأقراص فإن SMP لن تجعلها أسرع (لا يمكن إرسال طلبين معاً إلى أقراص ذات ناقل IDE) ولكن إذا كان السبب هو كثرة العمليات وخيوط المعالجة فإن SMP تنجح في إعطاء أداء عالي. استعمال أقراص ذات ناقل SCSI مع SMP يعطي أداء لا ينافس لأن تصميم هذه أقراص يسمح إرسال واستقبال طلبات مختلفة معاً (أيضاً تفيد حتى في الأنظمة أحادية المعالج MP). الملف /proc/cpuinfo يعرض المعالجات التي تراها النواة

bash# cat /proc/cpuinfo
processor       : 0
cpu             : 686
model           : 3
vendor_id       : GenuineIntel
[...]
bogomips        : 267.06

processor       : 1
cpu             : 686
model           : 3
vendor_id       : GenuineIntel
[...]
bogomips        : 267.06
انظر SMP-HOWTO لمؤلفها Enkh Tumenbayar.

تعتبر SMP مثالاً على نموذج المعالجة المتوازية متشاركة الذاكرة shared memory، ويوجد نموذج آخر وهو الذاكرة الموزعة distributed memory مثل عناقيد Beowulf (نسبةً لبطل أسطوري في قصيدة إنجليزية قديمة) التي صممها Donald Becker في وكالة الفضاء الأمريكية NASA. وعلى عكس SMP فإن المعالجات في هذا النموذج لا تشترك في الذاكرة، بل يكون لدينا شبكة محلية صغيرة سريعة من عدة أجهزة شخصية كل منها له معالجه وذاكرته، تسمى هذه الشبكة عنقوداً ويسمى كل جهاز عقدة node بدلاً من host. هدف العنقود أن يجمع قوة عقده معاً في جهاز افتراضي متوازٍ Parallel Virtual Machine (تختصر PVM) مثلاً عنقود من 4 أجهزة كل منها سرعته 1.2 GHz وذاكرته 256 MB يقال عنه أن سرعته 4.8 GHz وذاكرته 1 GB! (مع أنه لن يصل لهذا الحد فهو مجرد اسم). يتم تطبيق هذا النموذج عبر واجهة تمرير الرسائل Message Passing Interface (تختصر MPI) حيث ترسل العقد فيما بينها رسائل تحتوي بيانات وتعليمات لتنفذ على العقد الأخرى. بفس الطريقة التي يختلف الناس فيها بتعريف الحاسوب بحيث يعتبر بعضهم الآلة الحاسبة والخلوي نوع من الحواسيب؛ فإن ذلك يحدث مع تعريف ناقيد Beowulf حيث يعتبر البعض الشبكة البسيطة التي تستعمل NIS و NFS نوعاً منها، في حين أن البعض الآخر يشترط استعمال تصميم NASA الأصلي. لتستفيد البرامج من قوة العنقود يجب إعادة كتابتها باستعمال مكتبة خاصة مثل PVM (تحديداً libpvm3) و MPI، مثلاً هناك نسخة من برنامج PovRay المشهور للإخراج ثلاثي الأبعاد يدعم PVM اسمه pvmpov لكنه يقوم بالعمل المعقد فائق الجودة بشكل أسرع بتوزيعه على عقد عنقود PVM. هذه المكتبات للغة سي، حيث على المبرمج تحليل وإعادة تصميم البرنامج، ولكن أحياناً قد يكون من الأسهل استعمال لغات أخرى مثل إصدارات خاصة متوازية من FORTRAN أو python-mpi (التي تستخدم mpich).

هناك طريقتين لترتيب هكذا شبكات (من حيث الشكل) ، الأولى تسمى الجهاز الافتراضي الواحد Single Virtual Machine حيث توضع العقد في صندوق واحد وتكون بلا لوحة مفاتيح أو شاشة أو حتى قرص صلب disk-less لتسمى قد صماء غبية dumb nodes إلا عقدة واحدة (تسمى الأساسية master node)، يتم الوصول للعقد الأخرى عبر rsh (التفير ليس مهماً لأن الأسلاك والعقد داخل صندوق واحد) أو استخدام لوحة مفاتيح واحدة وفأرة واحدة شاشة واحدة لكل العقد عبر مفتاح KVM switch (اختصاراً ل Keyboard Video Mouse). كل هذا لتوفير جهد العاقيد لخدمة العقدة الأساسية. الصورة المرفقة هي لعنقود صنع في المنزل ، أخذت الصورة من موسوعة Wikipedia الحرة.

Home-built clusterعنقود صناعة بيتية

الثانية تسمى شبكة/عنقود من محطات العمل COW (أي Cluster of Workstations) أو NOW (أي Network of Workstations) حيث تعمل كل عقدة باستقلالية مع إمكانية تنفيذ عمليات على العقد الأخرى. أبسط أنواعه و استعمال NIS لتكون معلومات المستخدمين نفسها و NFS لتشترك جميعها في الملفات (على الأقل '/home' و '/usr/local' وقد تصل لمشاركة نظام الملفات كاملاً)، أما الأكثر تعقيداً فهي تستغل مكتبات MPI أو PVM. أحد الأمثلة على هذا النوع من العناقيد هو مشروع NOW من Berkeley انظر http://now.cs.berkeley.edu.

طريقة أخرى لتصنيف العناقيد إلى المستويات التالية:

  • عناقيد تجاوز الخلل Fail-over Clusters: عندما تفشل عملية على عقدة ما ،تأخذ مكانها واحدة على عقدة أخرى (مثل البطاريات الاحتياطية، والعجلة الاحتياطية).
  • عناقيد موازنة الحمل Load-balancing Clusters: توزع الحمل على عدة عقد حيث ترسل التعليمات أو الطلبات أو العمليات على العقدة الأقل انشغالاً (لهذا تصلح للعمل كعناقيد تجاوز الخلل)، ويمكن لعملية أن تهاجر من عقدة مشغولة إلى عقدة أقل انشغالاً لاحداث التوازن.
  • العناقيد الحوسبة عالية الأداء HPC (أي High Performance Computing) مثل Beowulf، حيث توزع التعليمات المستقلة على العقد بدلاً من انتظار دورها، هنا يجب إعادة كتابة البرامج باستعمال مكتبات MPI أو PVM ، ويجب أن يحلل الكود ويقسم إلى أجزاء مستقلة متوازية parallelized ونقاط تجمع aggregation...إلخ.
أصبح حلم العناقيد المتوازية دون إعادة كتابة البرامج حقيقة واقعة باستعمال مشروع OpenMosix، وهو رقعة لنواة لينكس تستعمل أسلوب تبادل الرسائل وهجرة العمليات ونظام ملفات شبكي مُحسّن اسمه oMFS كل هذا من أجل الحصول على عناقيد Beowulf متوازنة الحمل load-balancing عالية الأداء HPC، يأخذ عدة حواسيب ليعطي المستخدم والتطبيقات بأنها جهاز واحد له عدة معالجات. هذا يعني أن عليك أن تحصل على مصدر النواة وما يقابلها من رقعة ثم تعيد تصنيف النواة وتركب الأدوات التي تعمل في فضاء المستخدم ثم تعيد التشغيل، ثم تحرر ملفات الإعدادات في كل عقدة. هناك حزم لأنوية لينكس جاهزة برقعة OpenMosix (مثلاً RPM) وكل ما عليك هو ركيب هذه الحزم على كل العقد.

توزيعة القرص الحي Cluster Knoppix تججمع بين قوة OpenMosix ومرونة وسهولة Knoppix حيث لست بحاجة لتركيب أو إعداد أي شيء، كل ما عليك هو عمل عدة نسخ من القرص والإقلاع بها على كل عقدة وستحول إلى عنقود خارق، بهذه البساطة! يستعمل Cluster Knoppix مراقب omdiscd أي OpenMosix discovery daemon لتكبير العنقود باكتشاف وإضافة العقد الجديدة تلقائياً.

عند تشغيل OpenMosix ستحصل على نظام غنو/لينكس طبيعي ولكن وبفضل ميّزة الهجرة الشفافة للعمليات، تستطيع تشغيل تطبيق على عقدة فإذا حصل ازدحام تهاجر تلقائياً دون تدخل إلى عقدة أقل انشغالاً ليعمل النظام بسلاسة أكبر. وبفضل نظام ملفات OpenMosix الشبكي عبر الدليل '/mfs/N/' (حيث mfs هو نقطة الضم و N هي الرقم التعريفي للعقدة) مثلاً '/mfs/3/home/ahmad/myfile.txt' سيكون '/home/ahmad/myfile.txt في العقدة رقم 3.

الإعدادات بسيطة اعمل أو حرر ملف '/etc/openmosix.map' (في كل عقدة) لتحدد الرقم التعريفي لكل العقد التي تشكل العنقود صيغة كل سطر فيه هي ID HOST COUNT حيث ID هي رقم تعريفي فريد للعقدة، و HOST هو اسم أو عنوان العقدة و COUNT (الذي يسمى range-size في الوثائق) يجب أن يكون 1 ما لم ترغب بوضع أكثر من عقدة في سطر واحد بتحديد رقم البداية وعنوان البداية والعدد، مثلاً:

#!/etc/openmosix.map
1 192.168.1.1  1
2 192.168.1.12 3
تعني 4 عقد بالعناوين '192.168.1.1' و '192.168.1.12-14'. مثال آخر عنقود بسبع عقد عناوينها هي 10.0.0.1-10.0.0.7 تعد بسطر واحد هو '1 10.0.0.1 7'. طريقة أخرى هي بتشغيل omdiscd الذي يقوم بذلك تلقائياً.

الخطوة الأخير قبل تشغيل OpenMosix هي بتعديل ملف '/etc/fstab' في كل عقدة لإضافة نظام ملفات OpenMosix، وهو سطر كما يلي (يمكنك استعمال 'each' و '>>' لأتمتة العملية):

mfs_mnt  /mfs  mfs  dfsa=1  0 0
نحن الآن جاهزين لتشغيل حاسوبنا العملاق، اكتب 'setpe -w -f /etc/openmosix.map' (أو '/etc/init.d/openmosix start' إذا كان لديك مثل هذه الخدمة) على كل عقدة، إذا فشلت افحص ملف '/etc/hosts' لتتأكد أن أسماء العقد (إذا كانت مستعملة) متوفرة. استعمل 'mon' لمراقبة عمل العنقود، لمزيد من الأداء استعمل الإصدار المتوازي من أدوات العاملة في فضاء المستخدم مثل 'pkill' و 'pmake'. إذا أردت أن يكون للمستخدمين نفس الإعدادت في كل العقد اربط '/home' لتشير مثلاً إلى '/mfs/1/home' في كل العقد (باستثناء الأولى). إضاءة أخرى هي أن تربط '/usr/local' بطريقة مشابهة لتكون البرامج مشتركة (تلك الخارجة عن إدارة الحزم). لا ينجح OpenMosix في العمل إذا كان جدار النار يغلق المنافذ التي يحتاج وهي 4660/tcp لهجرة العمليات و 5428/udp لتبادل المعلومات و 723/tcp.

إضافة كل المعالجات والذواكر هو افتراض مثالي، في الواقع فإن إتصالات تبادل رسائل MPI لها عبء بسبب التأخير ومحدودية عرض الحزمة، عامل آخر يقلل من أداء العنقود هو قصر عمر العمليات التي تنتهي قبل أن يصبح من المجدي هجرتها. العملية التي لا تفرع عمليات فرعية أو خيوط threads ويستهلك الكثير من الذاكرة ووقت المعالج لن يكسب شيء من العنقود. حقيقة مقتبسة من Linux Parallel Processing HOWTO لمؤلفها Hank Dietz: "برنامج أحادي المعالج العادي لن يكون أسرع من برنامج أحادي المعالج على نظام متعدد المعالجات". برامج SIMD أي Single Instruction Multiple Data التي تنفذ سلسلة موحدة من التعليمات على بيانات مختلفة مثل التي تعالج المنظومات والصور والأصوات...إلخ يصبح أسرع لو أعيد كتابته بلغة أو مكتبة تدعم البرمجة المتوازية.

مراجع:

  • Linux Parallel Processing HOWTO by Hank Dietz
  • openMosix HOWTO by Kris Buytaert
  • Beowulf HOWTO by Jacek Radajewski and Douglas Eadline.

المحتويات
حقوق النسخ والملكية الفكرة
ما هو لينكس؟
كيف تركب نظام لينكس؟
حقوق النسخ المرفوعة
وثائق التخويف

عرب-آيز
مجتمع لينكس العربي
موسوعة ثواب
موسوعة ويكيبيديا
تعريف البرمجيات الحرة
تعريف مفتوحة المصدر
LinuxToday
Linux.org
Linux.com
SlashDot
FreshMeat
LWN.net
توزيعات لينكس
النسخة الإسلامية لأوبنتو
عَرَبيان
جواثا (أول مسجد في أوروبا)
المزيد من التوزيعات هنا

إسلاميات
    برامج:
بريمج أوقات الصلاة
بريمج التقويم الهجري
    صوتيات:
محاضرات: قصص الأنبياء (نبيل العوضي)
أناشيد
اطلب نسختك مجاناً
لكي تصلك أقراص لينكس أوبونتو Ubuntu أصلية مجاناً والتوصيل مجاناً لن تدفع فلساً واحداً ولن تجبر على رؤية دعايات. كل ما عليك هو أن تنقر هنا.
مقالات
    تقنية:
تسجيل وتحويل الصوتيات
تعريف الماسح الضوئي في لينكس
    ساخرة:
من أجل ذلك لا تقرأ
الفيلة والصراع العربي الإسرائيلي
بلاغات
التبليغ عن إعلانات غير مرغوبة
عثرات وأخطاء إملائية
وصلات لا تعمل:

 

ننصح باستخدام متصفحات الوب الحرة، جرب ثعلب النار الآن

يمكنك الحصول على الكثير من البرامج الحرة عالية الجودة من هنا مجاناً
proud to be 100% Microsoft FREE GNU FDL
التدخين حرام

كن كحامل المسك ولا تكن كنافخ الكير

Generously Hosted by www.JadMadi.net

Previous Up 5.3 تشغيل الخادمات Next
Copyright © 2007, Muayyad Saleh AlSadi