5.3 تشغيل الخادمات | كتاب لينكس الشامل | >> |
بشكل عام تشغيل أي خادم هو مجرد تشغيل المراقب 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 وغيرها.
أباتشي 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 من إعداده بطريقة رسومية من خلال أي متصفح وذلك بوضع العنوان ورقم المنفذ
الحديث هنا عن apache 2 إذا كنت تريد 1 فإن الملف هو httpd.conf
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
أشهر خادمات توصيل البريد SMTP هو sendmail وهو في الغالب من يثبت في معظم التوزيعات ثم بالدرجة الثانية يوجد postfix ويوجد في ريدهات أداة للتبديل بينهما إذا وجد كليهما. يوجد الكثير من البدائل مثل smail و courier-mta و qmail وهذا الأخير صمم والهدف منه أن يكون أكثر أمناً لكنه غير شائع ولا يأتي على شكل حزمة في الغالب. بشكل عام هذه الخادمات ذات ملفات إعداد معقدة ولحسن الحظ في الغالب لست بحاجة لتعديلها. وتشكل هذه الخادمات خوفاً كبيراً لذا عند عدم الحاجة لها لا تثبتها. في توزيعة ديبيان الخادم المفضل هو exim4 ( اسم الحزمة exim4-daemon-heavy ) فهو سهل الإعداد ويوفر مزايا عديدة منها دعم postgreSQL و LDAP ويحتوي على مضاد للفيروس و SPAM. لكن تذكر أن أي خادم بريد غير مأمون بالوراثة (لأسباب تاريخية).
أما بالنسبة للوصول للبريد عن بعد IMAP و POP فإن خادم imapd (اسم الحزمة في فيدورا هو cyrus-imapd) يدعم الإثنين معاً.
إذا كنت في شبكة وتريد لبعض الأجهزة أن تتصل بالإنترنت عبر خط واحد من خلال وصلها مع خادم فإن هناك طريقتين أولاههما عمل بوابة gateway تعمل على تحويل كل الpockets المتوجهة خارج الشبكة الداخلية إلى الإنترنت والثانية هي الخادم الوكيل proxy web cache.
بالنسبة للطريقة الأولى كل ما عليك عمله هو أن تضع قاعدة تلقائية في جدول التوجيه أن كل عنوان آخر حوّله على واجهة الإنترنت مثلاً المودم ppp0
bash# route add default ppp0
أما الخادم الوكيل proxy فأشهرها هو squid. يعمل هذا المراقب ليس فقط على تمكين المخدومين من الوصول للإنترنت بل أيضاً ضمان ذلك بسرعة من خلال الاحتفاظ بكمية منها عنده فإذا طلب شخصان نفس الملف لا يطلبها مرتين من الإنترنت. في ملف الإعداد squid.conf تستطيع التحكم في المنفذ الذي يعمل عليه (3128 هو التلقائي) تستطيع تحديد كم الحد الأقصى من الذاكرة أو من القرص يستهلك... إلخ
بالنسبة للنقل عبر FISH و scp انظر ssh في البند التالي وأما للتشارك مع ويندوز انظر samba في البند الذي يليه. ولقد تحدثنا عن http، ولم يبقى سوى NFS و ftp .
إذا كنت تريد تصدير المجلد
/misc/export1
من جهازك
بحيث تستطيع أجهزة أخرى
الوصول إليه فإن الملف /etc/exports
هو الذي يتحكم في ذلك
ويمكن للجهاز الخادم أن يحدد السماح بالقراءة والكتابة
أم القراءة فقط (وهذا ما يجب أن يكون) بالاعتماد
على العنوان (دون كلمات سر) . مثلاً
/misc/export1 somename.mynet.com(rw) othernet.net(rw) (ro)
توفر التوزيعات أدوات مثل system-config-nfs في فيدورا لهذا الغرض.
ولكنه في الغالب يقوم بعمل ملف /etc/exports
فقط
rpcinfo -p
للحصول على هذه الأرقام)
والسماح لهم عبر /etc/hosts.allow
انظر البنود الخاصة بهم في هذا الفصل
يوجد خادم 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 كما يجب عليك تفقد إعدادات pam و قائمة ftpusers وهي قائمة بمن يسمح/يمنع من الدخول بحسب الخادم و pam.
كل ما عليك و تشغيل sshd وهذا في الغالب تقوم به التوزيعة عنك. تعمل هذه الخدمة عبر منفذ 22 تأكد أن يسمح بها جدار النار وهو في الغالب ما تقوم التوزيعة أيضاً.
حتى تعمل اتصال آمن (أكثر أمناً) بين جهازين عبر ssh يوفر لك ssh طريقة إسناد لا تعتمد على إرسال كلمات سر عبر الشبكة (لا مقروءة ولا مشفرة) لتقليل من خطر تسربها بل يستعمل طريقة إسناد تعتمد على زوجين من المفاتيح (زوجين أي مفتاحين وليس أربع هكذا هي الفصحى) إذ عليك توليد مفتاحين لكل مستخدم الأول خاص/سري لا تعطيه لأحد (الأذونات 600)، والآخر عام تنسخه على كل جهاز تريد بالإتصال به. ويتم الإسناد دون السؤال عن كلمة سر بل عن طريق وجود الملف الخاص فهو إثبات شخصية أما العام يوضع على الطرف الآخر فإذا أردت الدخول على الجهاز البعيد ذي الملف الملف العام فقط يقوم بتشفير رقم عشوائي بواسطة المفتاح العام ثم يرسل الرقم المشفر ويطلب ممن يدعي أنه الشخص أن يفك تشفير الرقم العشوائي بواسطة مفتاح الفك الخاص/السري فإذا كنت من تدعي وتملك الملف تعرف ما هو ذلك الرقم العشوائي المشفر، ولاحظ أن ما تم بثه في الأسلاك هو رقم عشوائي مرة مشفراً ومرة دون تشفير ولم يتتم إرسال أي كلمة سر أو ملف سري/خاص.
وهناك نوعان من المفاتيح rsa و dsa سنتحدث عن rsa أما الأخرى فاعمل نفس الخطوات مع إبدال هذه بتلك نفذ وأنت باسم المستخدم الذي تريد
bash$ ssh-keygen -t rsa
~/.ssh/id_rsa
والمفتاح العام ~/.ssh/id_rsa.pub
هذا الأخير عليك إضافته إلى ~/.ssh/authorized_keys
في الأجهزة البعيدة الأخرى (وليس في جهازك)
مثلاً الأمر التالي يجمعها عنك ويعرضها على الشاشة
bash$ ssh-keyscan 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
ppp ssh internet ppp (pocket) --> (stream) --> (encrypted) ->-///->- sshd (stream) --> (poket)
تختلف تسمية المراقب من توزيعة لأخرى فقد تكون 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: ********
/etc/samba/smb.conf
داخل الإعدادات العامة
global تأكد من أن كلمات السر تشفر (كما يتوقع ويندوز)
وربما تحب أن تحدد الملف الذي تخزن فيه الكلمات.
[global] # ... encrypt passwords=yes smb passwd file=/etc/smbpasswd # ...
[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
يمكن إدارة 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 }
/etc/init.d/xinetd restart
ثم الدخول من أي متصفح (أو مدير ملفات) على موقع
http://localhost:901/
وهو ليس موقع إنترنت وإنما خادم swat موجود على جهازك
الذي افترضت أنه localhost و 901 هو الرقم التقليدي الذي خصصناه لبرنامج
إعداد samba المسمى swat
تظهر لك صفحة يمكنك استعمالها للقيام بالإعدادات
لإعداد ويندوز 2000 ليكون عضو في شبكة samba
هذه خدمة سوبر 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 }
disable = no
ويمكن أن نحدد من أين يقبل الخادم الطلبات عبر only_from
.
يمكن إضافة خيارات لعمل التقارير وماذا يكتب فيها.
يمكن نصب مصيدة زمنية والكثير من الخيارات انظر كتيب هيئة هذا الملف.
كما xinetd فإن هناك الكثير من الخادمات تعتمد على مكتبة libwrap أو ما يسمى tcp wrapper
للحكم على السماح أو حجب الخدمة بناءً على الجهاز host الذي يطلبها
(لا داع لإعادة كتابة الخادمات القديمة التي لا تدعمها يكفي أن تشغل عبر xinetd)
الملفان hosts.allow
و hosts.deny
يتحكمان في سلوك هذا الخادم في السماح أو منع خدمة معينة لجهاز معين وصيغتهما
daemons... : clients... : [ spawn shell_command ]
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.
man 5 hosts_access
لرؤية الكتيب.
مثلاً 192.168.0.
تعني 192.168.0.*
تعمل الإعدادات بمجرد تخزن التغييرات في الملفين hosts.allow و hosts.deny دون الحاجة لإعادة تشغيل أي خادم ولا حتى xinetd
في الجامعة غالباً لا نخصص جهاز لكل شخص بل نريد لكل شخص أن يدخل باسمه من أي جهاز، يمكن تحقيق ذلك بعمل نسخة من ملفي passwd و shadow فنجعل الحسابات متطابقة يدوياً على كل الأجهزة ولكن هذا غير مجدي لأن المستخدم إذا غيّر كلمة سره عليه أن يفعل ذلك على كل الأجهزة. ويمكن استعمال برامج التخزين المتزامن rsync التي تجعل دليل/ملف في عدد من الأجهزة متطابق فإذا حدث في مكان يحدث في الآخر؛ هذا أيضاً غير مجدي لأن الحسابات معلومات حساسة يجب أن لا تنقل هكذا عبر الشبكة، كما أن تصميمها العام يحجز جزء كبير من عرض حزمة البث bandwidth. في ويندوز يسمى خادم حساب المشتركين Domain controller أما في عالم يونكس فيسمى Information/Directory server
حل هذه المشكلة يكون بأكثر من طريقة
بعد تثبيت فيدورا وعند أول تشغيل يسألك أي من هذه الطرق إضافة للسجل المحلي تريد أن يكون كمخدوم client.
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
/etc/ldap.conf
أو /etc/openldap/ldap.conf
ثم تعديل ملفات PAM مثلاً ليكون مخدوم samba بإضافة سطر.
auth sufficient pam_smbpass.so nullok use_authtok try_first_pass
auth sufficient pam_ldap.so try_first_pass
/etc/yp.conf
ونضيف إلى /etc/passwd
سطراً يحتوي
+:::::::
من أقدم طرق إعطاء عناوين 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.
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; }
/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
أسماء المواقع ليست حساسة لحالة الحروف إن كبيرة أو صغيرة مثلاً 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"; };
/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
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
سنتعلم في هذا البند كيف تعد جهازك ليتم طلبه بواسطة 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 # ...
/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 "*" -
/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" *
عند تشغيل الأمر 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
نوع آخر من الأجهزة العملاقة يمكن أنجازه من خلال الشبكة
العنقودية 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
<< السابق | كتاب لينكس الشامل | التالي >> |