5.3 تشغيل الخادمات كتاب لينكس الشامل >>

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

بعد تركيب حزمة 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 من إعداده بطريقة رسومية من خلال أي متصفح وذلك بوضع العنوان ورقم المنفذ

tipتلميح

الحديث هنا عن 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 من مدير الملفات

يمكن تسريع خادم 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
السبب أنه يعمل ضمن النواة (لا يوجد ملفات مؤقتة أو إي إضاعة للذكرة)

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

أشهر خادمات توصيل البريد SMTP هو sendmail وهو في الغالب من يثبت في معظم التوزيعات ثم بالدرجة الثانية يوجد postfix ويوجد في ريدهات أداة للتبديل بينهما إذا وجد كليهما. يوجد الكثير من البدائل مثل smail و courier-mta و qmail وهذا الأخير صمم والهدف منه أن يكون أكثر أمناً لكنه غير شائع ولا يأتي على شكل حزمة في الغالب. بشكل عام هذه الخادمات ذات ملفات إعداد معقدة ولحسن الحظ في الغالب لست بحاجة لتعديلها. وتشكل هذه الخادمات خوفاً كبيراً لذا عند عدم الحاجة لها لا تثبتها. في توزيعة ديبيان الخادم المفضل هو exim4 ( اسم الحزمة exim4-daemon-heavy ) فهو سهل الإعداد ويوفر مزايا عديدة منها دعم postgreSQL و LDAP ويحتوي على مضاد للفيروس و SPAM. لكن تذكر أن أي خادم بريد غير مأمون بالوراثة (لأسباب تاريخية).

أما بالنسبة للوصول للبريد عن بعد IMAP و POP فإن خادم imapd (اسم الحزمة في فيدورا هو cyrus-imapd) يدعم الإثنين معاً.

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

إذا كنت في شبكة وتريد لبعض الأجهزة أن تتصل بالإنترنت عبر خط واحد من خلال وصلها مع خادم فإن هناك طريقتين أولاههما عمل بوابة gateway تعمل على تحويل كل الpockets المتوجهة خارج الشبكة الداخلية إلى الإنترنت والثانية هي الخادم الوكيل proxy web cache.

بالنسبة للطريقة الأولى كل ما عليك عمله هو أن تضع قاعدة تلقائية في جدول التوجيه أن كل عنوان آخر حوّله على واجهة الإنترنت مثلاً المودم ppp0

bash# route add default ppp0
وتتأكد من السماح بعملية التمرير FORWARD .عبر جدار النار انظر فصل أمن الشبكة التالي.

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

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 على أنه النوع.
tipتلميح

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

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

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

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

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

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

5.3.6 خادم ssh

كل ما عليك و تشغيل 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 هو عنوان رقم/اسم الجهاز الذي تريد أخذ المفاتيح العامة منه لتسمح له بالدخول عندك من خلال مفتاحه الخاص و جملة السر إن وجدت.

قلنا بأن 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
ويمكن استعمال ssh مع ppp لعمل VPN مشفرة ومضغوطة. VPN تعني ربط شبكتين (أو شبكة وجهاز) عبر الإنترنت بحيث تصبح الشبكتين بعناوينهما المحجوزة (الخاصة/الداخلية) مرئية لكل منها وغير مرئية لباقي الإنترنت ، الفكرة بسيطة pppd في أحد الشبكات يتصل بالإنترنت ويحول كل pocket إلى stream وينفذ ssh ليتصل على العنوان المرئي للإنترنت للشبكة الثانية ويرسل له ذلك ال stream مشفراً إلى sshd فيه ويطلب من sshd أن ينفذ ppp ليعيد ال stream إلى pockets كما في المخطط. انظر VPN ppp-ssh HOWTO
        ppp           ssh             internet                ppp
(pocket) --> (stream) --> (encrypted) ->-///->- sshd (stream) --> (poket)

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 تأكد من أن كلمات السر تشفر (كما يتوقع ويندوز) وربما تحب أن تحدد الملف الذي تخزن فيه الكلمات.
[global]
# ...
encrypt passwords=yes
smb passwd file=/etc/smbpasswd
# ...
المقطع الكامل من هذا الملف قد يبدو (الكثير من الخيارات موجودة لعمل خادم حساب المستخدمين 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:. أما كيفية إضافة 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

5.3.8 خدمة xinetd

هذه خدمة سوبر super service! ، أي أنها تستعمل من قبل خادمات أخرى وهي بديل عن inetd (أي InterNet Daemon) الذي هو بديل عن تشغيل خادمات خطرة بطريقة مباشرة وحصر استعمالها على عناوين محددة فقط. كما رأينا في برامج الإدارة مثل الخاص بالطباعة CUPS و الخاص بApache المسمى webadmin و الخاص ب 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... : clients... : [ spawn shell_command ]
حيث daemons هي الخدمة و clients هي الجهاز الذي تنطبق عليه. مثلاً كمدير حقيقي يفترض أن تمنع كل شيء إلا بعض الاستثناءات لذا ضع في ملف المنع 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 و clients أكثر من واحد تفصلهم مسافة، كما يمكن أن يكون أحدهم ALL أو LOCAL أو KNOWN أو UNKNOWN أو PARANIOD ويمكن أن نستعمل ‘*‘ و ‘?‘ كما في أسماء الملفات، ويمكن الاستثناء بواسطة EXCEPT. أما بالنسبة ل clients فإن وضع نقطة في النهاية تعني مع أي لاحقة وفي البداية مع أي سابقة. لمزيد من التفاصيل اكتب man 5 hosts_access لرؤية الكتيب. مثلاً 192.168.0. تعني 192.168.0.*
tipتلميح

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

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

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

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

tipتلميح

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

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

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

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

#/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 أي يمكنه التواصل مع مخدومات من هذا النوع.

tipتلميح

هناك مخدوم 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 هو اسم الملف الناتج و e.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 الخاصة بالإنترنت، سنستعمل هذا الملف لاحقاً.
tipتلميح

أسماء المواقع ليست حساسة لحالة الحروف إن كبيرة أو صغيرة مثلاً 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 الخادمات العملاقة والشبكات العنقودية

عند تشغيل الأمر ps -ax ستلاحظ أن أغلب البرامج نائمة S (تنتظر بيانات من القرص مثلاً) عند عرض حمل الجهاز loadavrg فإننا نلاحظ أن الرقم على المدى الطويل (الأخير) صغير أو عند عرض 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.

نوع آخر من الأجهزة العملاقة يمكن أنجازه من خلال الشبكة العنقودية Cluster. حيث يتم استغلال معالجات ومصادر (قرص وذاكرة) عدة أجهزة في شبكة لإنجاز مهمة واحدة ومع تزايد سرعة شبكات الإيثرنت التي تتراوح من 10 إلى 100 ميغا-بت في الثانية وبعضها يصل إلى 1 غيغا-بت في الثانية يصبح هذا الخيار مثالياً للأغراض الخاصة التي تتطلب أعلى أداء. وهي نوعان الأول يكون كل جهاز يعمل بشكل مستقل مع إمكانية تشغيل بعض العمليات على الأجهزة الأخرى ويسمى COW - Cluster of Workstations أبسط أنواع هذه الشبكات يتم تحقيقه بواسطة NIS و NFS حيث يتم تشارك المستخدمين عبر NIS و يتم تشارك الملفات عبر NFS (على الأقل /home و /usr/local ) أو حتى مشاركة كامل الدليل الجذر. هذا لا يعد cluster ولكن للتشبيه حيث يمكنك يدوياً عبر ssh تشغيل برامج على كل جهاز تقوم بمهمة فرعية وتجعل جهاز يجمعها. يوجد أنظمة مطوّرة من لينكس تعمل على توزيع الحمل على الشبكة مثل OpenMosix و Cluster Knoppix. النوع الآخر هو جهاز المعالجة المتوازية الإفتراضي PVM - Parallel Virtual Machine حيث تظهر هذه الشبكة وكأنها جهاز واحد تكون عبارة عن خادم يقود العملية وبعض العقد يقوم الخادم بتوزيع عمله على العقد. مثل أجهزة Beowulf لدى NASA. انظر www.extremelinux.org و Beowulf HOWTO لمؤلفيها Jacek Radajewski و Douglas Eadline


<< السابق كتاب لينكس الشامل التالي >>