5.2 العمل في الشبكات كتاب لينكس الشامل >>

5.2 العمل في الشبكات

الفهرس

5.2.1 أدوات التشخيص

يمكنك التأكد من أن جهاز معين مرتبط بالشبكة بأن تطلب منه رد الصدى وذلك بالأمر ping الذي يمكنك أن تمرر له اسم أو عنوان الجهاز الذي تريد التأكد من أنه متصل

bash$ ping linux4arab.com
bash$ ping -c 4 127.0.0.1
هذا البرنامج دون خيارات يظل يعمل يرسل طلب وينتظر تلقي إجابة لفترة ثم طلب آخر وهكذا إلى أن تضغط على CTRL+C أو ينتهي من العدد الذي حددته بالخيار -c عندها يعرض تقرير كم طلب أرسل وكم عاد ونسبة الفقد والزمن الأعلى والأدنى والمتوسط للرحلة. يستعمل هذا الأمر البروتوكول ICMP. ويمكن الاستفادة منه في دراسة سرعة الشبكة (عرض الحزمة) bandwidth. يمكن للجذر أن يستعمل الخيار -f الذي يقوم بفيض من الطلبات flood دون فاصل كما في هجوم حجب الخدمة DoS، ويتوقع هنا بشكل طبيعي أن تحصل على بعض الفقد (يمكن أن لا يحدث فقد في الشبكات السريعة) ولأن عرض سطر عن كل طلب من آلاف الطلبات ليس منطقياً يقوم الأمر بكتابة نقطة (.) في كل طلب وحذف نقطة عند استلام الرد.
tipتلميح

جاء اسم أمر طلب رد الصدى ping من لعبة تنس الطاولة ping-pong حيث يسمى صوت الإرسال ping وصوت الاستقبال pong. لهذا نقول أن أمر ping يرسل إشارة ping ويستقبل اشارة pong.

لمعرفة العنوان الذي حصلت عليه سواء من مزود خدمة الإنترنت أو بواسطة برنامج مخدوم client من أحد خادمات DHCP أو BOOTP أو RARP (الخادمات الثلاثة مرتبة من الأحدث إلى الأقدم) أو حتى قمت بتحديد قيمة ثابتة له أثناء تركيب لينكس أو إعداد الشبكة أو بأي طريقة أخرى؛ نفذ الأمر ifconfig اختصاراً ل interface config ستجد حقلاً لكل واجهة شبكة (بطاقة) مثلاً lo و eth0... إلخ لكل منها هناك iaddr مثلاً مقابل lo ستجد 127.0.0.1 ويمكن أن تجد حقلاً في بطاقات الإيثرنت لعنوان البطاقة hardware address أي MAC وهو عنوان تضعه الشركة الصانعة ولا يتكرر أبداً. يمكن ايقاف (تثبيط) واجهة بالخيار down كما ifconfig eth0 down ويمكن تفعيل واجهة بتحديد العنوان ثم up

bash# ifconfig
bash# ifconfig lo 127.0.0.1 up
bash# ifconfig eth0 192.168.32.117 up
من يقوم بهذا يكون أحد ملفات /etc/init.d ويعتمد كيفية إعداده على التوزيعة.

يمكن استعمال الأداة host للتحويل من اسم إلى عنوان رقم host jolug.org ويمكن للأداة ipcalc بالخيار h أن تقوم بالعملية العكسية. ويمكنك تعرف وتحويل الأرقام في ملف log أو خرج تنفيذ أمر إلى الأسماء تلقائياً باستعمال adnsresfilter مثلاً

cat /var/log/logfile | adnsresfilter
netstat -n | adnsresfilter
tcpdump -ln | adnsresfilter
ولاختبار خادم الأسماء DNS نستعمل dig مثلاً dig foo.mybob.net التي تعيد أي خادم DNS استجاب وحولها لعنوان وكيف حصل على ذلك. ويمكن تتبع ال pockets بواسطة traceroute مثل traceroute 202.2.42.236

ويمكن استعمال whois متبوعة باسم الجهاز الذي تريد معرفة عنوانه متبوع ب @ متبوع باسم أو رقم أحد هذه الخادمات مسبقوقة ب whois. (بالنسبة للإنترنت لدينا ripe.net و radb.net cw.net وكلها تعطي نفس النتيجة مثلاً whois google.com@whois.radb.net ) الذي يستعمل بروتوكول آخر غير DNS

يمكن عرض جدول التوجيه route من خلال أمر يحمل نفس الاسم route ويمكن الإضافة والتعديل بتمرير معاملات مناسبة. وكما ذكرنا إن مهمة هذا الجدول تحديد الواجهة(البطاقة) التي ستسلكها ال pockets الخارجة وذلك من عنوانها. كأن نقول أن الجهاز ذو العنوان 172.17.0.5 تصله بسلوك طريق الإيثرنت الأول eth0

bash# route add -host 172.17.0.5 eth0
كذلك الشبكة 192.168.10.0/24 ولكن باقي العناوين (الوجهة التلقائية default) فلتذهب عبر المودم ppp0
bash# route add -net 192.168.10.0/24 eth0
bash# route add default ppp0
ولأن ppp تحتوي على طرفين فقط لا نحدد عنوان أما إذا كانت العناوين الأخرى ستذهب عبر الإيثرنت الثاني eth1 إلى جهاز يمثل بوابة الوصول مع الإنترنت فإننا بحاجة لتحديد عنوانه بواسطة gw أي gateway
route add default gw 192.168.0.1 eth1 . أما جداول التوجيه الديناميكية فأنت بحاجة لبرامج خادمات مثل routed و gated الأول يستعمل RIP والثاني يدعم بروتوكول أكثر تطوراً إضافة إلى RIP وهناك برنامج iproute الذي لا أدري ما وظيفته بالضبط ؟

الأداة fuser التي تحدثنا عنها في فصل 4.2 عودة إلى سطر الأوامر التي يمكنها أن تعرض لك أي البرامج تستعمل ملفات معينة يمكنها أيضاً أن تخبرك عن البرامج التي تستعمل منافذ معينة أو عناوين معينة وذلك بواسطة الخيار n متبوعاً بأحد tcp أو udp بحسب نوع المنفذ ثم رقم المنفذ على جهازك مثلاً fuser -v -n tcp 80 ستعرض لك خادمات الإنترنت ويب إن وجدت (غالباً tux أو apache) يمكن استعمال صيغة أخرى هي المنفذ على البروتوكول فالمثال السابق يمكن كتابته أيضاً fuser -v 80/tcp. أيضاً بالخيار 4 أو 6 بحسب نوع العناوين IPv4 أو IPv6 يمكنك أن تعرض أي البرامج يتصل من منفذ في جهازك إلى منفذ في جهاز بعيد على عنوان محدد وذلك بتمرير المنفذ عندك ‘,‘ ثم العنوان ثم ‘,‘ ثم المنفذ عنده (كلها اختيارية إلا الفواصل) مثلاً لمعرفة من يتصفح الشبكة fuser -v -4 ,,80

يمكن استعمال telnet للدخول (دون تشفير) على خادم telnet عن بعد وتنفيذ أوامر عليه ولكن يمكن له أيضاً الدخول على منفذ (أي منفذ) والسماح لك بالتحدث مباشرة مع الخادم العامل على ذلك المنفذ مثلاً اكتب telnet foo.net 80 للدخول إلى خادم ويب على foo.net ستحصل على اسم الخادم ومحث ثم اكتب QUIT للخروج. ولكن مشلكة telnet لهذا الغرض أنه يعمل على تحويل بعض الرموز التي يرسلها ويستقبلها لنفسه على أنها أوامر له وليس للخادم فهو على سبيل المثال يتوقف عند استقبل رمز EOF أي end of file. لهذا تعتبر أداة netcat أو nc بالنسبة للشبكات كما السكين السوسرية متعددة الأغراض للجيش (هكذا يقول كاتب هذا البرنامج) تكمن قوتها في بساطتها فهي تعمل كما برنامج cat على أخذ الدخل القياسي وإرساله إلى ... حسناً، إلى منفذ معين (وبروتوكول معين) وانتظار الرد وطباعته على الخرج القياسي. كما يمكن أن تعمل هذه "القطة" كخادم بالخيار l لينتظر اتصال معين ويطبع ما يستقبله على الخرج القياسي. تفيد هذه الأداة في دراسة وتعلم كيف يعمل خادم معين وفي بناء برامج شبكات بواسطة نصوص برمجية انظر /usr/share/doc/netcat/examples حيث ستجد متصفح ومحرك بحث وحتى سابر منافذ! صيغة هذه الأداة بسيطة اكتب العنوان ثم المنفذ ويجب أن يكون هناك برنامج على الطرف الآخر يستمع إلى هذا المنفذ مثلاً nc -w 2 172.17.0.1 80 (استعملنا الخيار w لتحديد الزمن الأقصى للإنتظار بثانيتين) تحاول الإتصال مع خادم ويب على الطرف الآخر فإذا كان يعمل ستحصل على رسالة ترحيبية يظهر فيها اسمه و محث لتتحدث مع ذلك الخادم "وجهاً لوجه" في مثالنا عبر بروتوكول HTTP مثلاً اكتب GET index.html ثم CTRL+D لكي تطلب من ذلك الخادم إرسال ملف index.html لتراه أمامك، هذا فعلياً ما يفعله متصفح الإنترنت. يعمل هذا البرنامج عبر بروتوكول tcp فإذا أردت udp يمكنك استعمال الخيار u. يمكنك عمل برنامج chat سخيف وبسيط بتشغيل nc -l -p 1234 لنعمل خادمنا البسيط (الخيار p لتحديد المنفذ) ، وعلى الجهاز الآخر nc -w 2 192.168.20.1 1234 حيث العنوان هو عنوان الجهاز الأول(الخادم) الآن كتب أي كلام ثم CTRL+D لتراه على الخادم. يمكنك استعماله كبرنامج أرشفة عن بعد مثلاً شغله على جهاز كخادم لينتظر ملف tar ويفك ضغطه nc -l -p 4321 | tar -xvpz وعلى الآخر أرسل له الملف tar -cvpzf - /home/ali/foo | nc -w 3 -p 4321 foo.net حيث foo.net هو الخادم الأول.

الأمر netstat يعرض معلومات مختلفة عن الشبكة منها تقارير إحصائية statistics عن حالة الشبكة (دخل/خرج/فشل من كل بروتوكول) عند استعمال الخيار s أي الأمر netstat -s كما يمكن معرفة أي البرامج فتحت أي المنافذ في جهازك على شكل رقم المنفذ نما يقابلها من برنامج(خدمة) ومعرفه PID بواسطة الخيار p ويمكن تحديد إظهار العناوين والمنافذ على شكل أرقام بواسطة n وليس أسماء، يعرض البرامج التي تتصل وليس الخادمات لعرض الخادمات استعمل الخيار l أي listening لعرض الإثنين فإن الخيار a ، الخيار t يعرض tcp و u يعرض udp من الصيغ المفيدة للأمر netstat -tnlp | less و netstat -unlp | less فهو يعرض الخادمات التي تستعمل المنافذ الخاصة ببروتوكولات tcp و udp على التوالي. الخيار x يعرض المحلية (أي local unix socket) الخيار c يحدث المعلومات تلقائياً ويظل يعمل حتى تضغط CTRL+C. من الأدوات الأخرى التي تعمل بنفس الطريقة lsof -i | less يمكن استعمال grep للبحث. في المقابل البرنامج nmap وهو سابر منافذ port scanner يعطي المنافذ المفتوحة لأي جهاز على الشبكة كما هو مرئي للجهاز الذي نفذ منه بالطريقة الأصعب وهي محاولة الإتصال عليها مثلاً nmap -v 192.168.20.1 يمكن للعنوان أن يكون عنوان في شبكة محلية أو في الإنترنت أو حتى عنوان شبكة كاملة مثلاً لعرض أي الأجهزة في الشبكة تعمل الآن nmap -v -sL -O 192.25.0.0/16 الخيار sL يعني List Scan فقط لإيجاد الإجهزة والخيار O ليخبرك ما هو اسم نظام التشغيل الذي تعمل عليه (نعم يمكنه أن يعرف ذلك عن بعد) وإذا كان جدار النار يمنع ICMP-ping يمكنك استعمال الخيار P0 أو PT80 (حيث 80 هو منفذ تظنه مفتوحاً) ويمكنه أن يستقبل العناوين بمرونة شديدة مثلاً nmap -v --randomize_hosts -O -p 80 '127-222.*.2.3-5' تبحث وبترتيب عشوائي عن أجهزة متصلة بالإنترنت تتراوح عناوينها بالهئية 127-222.*.2.3-5 وعرض نظام التشغيل والخيار p لسبر منفذ 80 (يمكن تحديد أكثر من منفذ أو مدى منافذ بواسطة - ونفصلها بفواصل) ومعرفة حالته (يمكن أيضاً استعمال sL ولكن للتغيير فقط) هذا ما يفعله المخترقون بحثاً عن ضحية وبمعرفة نظامه والخادمات عنده يحدد طريقة الهجوم المُثلى. يمكن لهذا البرنامج القيام بسبر المنافذ بعدة طرق منها sU لسبر منافذ udp و sS طريقة Syn وهي للجذر فقط و sT بواسطة اتصال tcp عادي و sF و sX و sN (الثلاث الأخيرة لا تنجح مع ويندوز) مثلاً يمكنك سبر غوغل بواسطة nmap -v -sS -O google.com ومايكروسوفت nmap -v -P0 -sS -O microsoft.com وعلى عكس الأداتين السابقتين netstat و lsof يعمل nmap عن بعد كما أنه يعطي نتائج صحيحة حتى لو كان الجهاز مصاب لنقُل بهجوم rootkit. ولكن يمكن لجدار النار أن يخدع nmap ليس فقط بحجب بعض المنافذ بل وبإيهامه بأن منفذاً ما مغلق مع أنه مفتوح للجميع. ولأن nmap ينفذ عن بعد فإنه لا يعطي PID. يمكن للسبر بطريقة sT أن يخبرك بالمستخدم الذي يعمل به الخادم على كل منفذ إذا كان الخادم يشغل خدمة identd المستخدمة في irc فإن إضافة الخيار I إلى sT يسمح لك بذلك.

يمكنك تسريع عملية السبر بتحديد منافذ معينة فقط مثلاً -p 20-250,500-600,5990-7000 ، الخيار F يستعمل قائمة تأتي مع البرنامج بأهم المنافذ لحصر السبر بها. يمكنك إرسال ناتج السبر إلى ملف تقرير بالخيار oN متبوع باسم الملف. إذا مللت الإنتظار اضغط CTRL+C ثم تابع في ما بعد بالخيار --resume logfile حيث logfile هو التقرير المخزن بالخيار oN.

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

خدمة ويب web الأكثر شيوعاً في الإنترنت وهي طريقة لتصدير الملفات عبر الشبكة بل وحتى يمكن توليد هذه الملفات عبر لغة برمجة أو من قاعدة بيانات. الوصول لهذه الخدمة يتم عن طريق متصفح رسومي مثل mozilla و epiphany و konqueror أو متصفح نصي مثل links و lynx. إذا كان الربط يتم عن طريق خادم وكيل proxy (يسمى أحياناً web cache) فعليك إعلام المتصصح إذا كنت تستعمل mozilla يكون ذلك edit -> preferences -> advanced -> proxy وفي konqueror يمكن عمل ذلك بواسطة setting -> configure konqueror -> proxy أو من مركز تحكم KDE. أما epiphany في غنوم 2.6 فيعد من خلال مركز تحكم غنوم Gnome menu -> preferences -> proxy لا تنس في جميع الحالات أن تذكر تخطي الخادم الوكيل للعناوين المحلية مثلاً 127.0.0.1, 172.17.0.0/16 . ويوجد خيار بمعرفة ذلك من خلال متغيرات البيئة مثل http_proxy (بالنسبة لبروتوكول ftp نستعمل ftp_proxy) ويمكن أن تضع ذلك في ملفات /etc/profile

bash# echo "export http_proxy='http://proxy.mysite.com:8080/'" \
	>> /etc/profile
أو لك وحدك في ملف ~/.bashrc
bash$ echo "export http_proxy='http://ali:foobar@192.168.0.1:3128/'" \
	>> ~/.bashrc
حتى لو لم تكن تريد طريقة متغيرات البيئة يفضل أن تحدد قيمة هذا المتغير لأن برامج سطر الأوامر مثل wget و apt-get تستعمله.

أفضل أداة لتنزيل ملفات download من خادمات http أو ftp هي wget دون أدنى شك ببساطة wget http://foo.site.net/getme تعمل على تنزيل الملف getme من الموقع المحدد فإذا توقف التزيل لأي سبب يمكنك المتابعة في وقت لاحق ب wget -c http://foo.site.net/getme لا يتوقف الأمر عند هذا الحد بل يمكنك وضع كل الوصلات URL's التي تريد في ملف نصي wget -i FILE أو حتى تنزيل كل الوصلات من ملف HTML بإضافة الخيار -F يمكنك تحديد عدد المحاولات ب -t N وصفر تعني عدد لا نهائي. يمكنك تحديد أين تذهب الملفات بدلاً من الدليل الحالي ب -P PREFIX يمكنك تحديد نموذج الملفات التي يقبلها أو يرفضها من خلال -A PATLIST -R PATLIST يمكنك تنزيل ملف والملفات التي لها وصلات على نفس الخادم ب -r و تضيف خادمات أخرى ب -H -D HOSTLIST وتحديد العمق (ملف أ به وصله إلى ب، ملف ب به وصلة إلى جـ) ب -l N.

5.2.3 ملفات عن بعد

هناك أكثر ين طريقة للوصول إلى الملفات عن بعد منها: NFS و FTP و FISH و SMB المسمى samba. NFS خاص بعالم يونكس و FTP خاص بعالم ويب و SMB عالم ويندوز (على الرغم من هذا فهو جيد، يجدر بي أن أشير إلى أن مايكروسوفت لا علاقة لها samba لا كخادم ولا كمخدوم) أما FISH وعلى الرغم من اسمه المضحك القادم من File transmission over Shell إلا أنه أكثر أمناً لأنه يستغل ssh الذي سنتحدث عنه.

البرتوكول الأول الذي سنتحدث عنه هو nsf أي network file system أي نظام الملفات الشبكي ببساطة شغل nfsd على الجهاز الخادم هذا يسمح لك بضم mount الملفات البعيدة في الجهاز المخدوم إلى مجلد فارغ لديك بكتابة mount -t nfs 192.168.17.1:/my/dir /mnt/far أو mount -t nfs foobar.com:/my/dir /mnt/far يمكن إضافة الخيارات -o ro,hard حيث أن hard تجعل الأمر يتوقف(يعلق) حتى يحدث الاتصال أو soft التي يمكن أن تخرج دون نجاح لأن الخادم مغلق مثلاً.

طريقة أخرى للحصول على نفس النتيجة ولكن عبر بروتوكول آخر هو ftp أي File transefere protocol والتي تعني بروتوكول نقل الملفات وهناك أكثر من مراقب يوفر هذه الخدمة مثل gftpd و wu-ftpd (اسمه in.ftpd وهو عبر xinetd) و vsftpd (اختصار ل very secure ftp daemon) و حتى خادمات ويب مثل apache httpd و tux. هذا البروتوكول يسمح بالوصول للملفات عن بعد كما في nfs حيث يمكنك ضمه بعدة أوامر مثل ftpmount USER:PASSWORD@ftp.kernel.org /mnt/ftp أو mount -n -t ftpfs none /mnt/ftp -o ip=100.12.14.1,user=myself,pass=doNOTlook أو باستعمال برنامج خاص اسمه ftp أو باستعمال خيار ftp link من قائمة right في برنامج mc والأفضل من كل ذلك مجرد كتابة العنوان في مدير الملفات ftp://ftp.kernel.org ولكن هذا البروتوكول يسبب الكثير من الصداع والمشاكل على الخادم للكثير من الأسباب منها أنه يرسل كل شيء حتى كلمات السر دون أي تشفير.

بروتوكول SMB يوفر الدخول إلى شبكات مايكروسوفت للحصول على الملفات والطابعات المحددة للمشاركة. بكل بساطة بعد تثبيت الحزم المناسبة في أي مدير ملفات مثل nautilus أو konqueror وكتابة العنوان smb:// ثم تتنقل بينها كأنها مجلدات، ويمكن أن تتبعه بالعنوان أو أن تسبق العنوان باسم المستخدم ثم ‘:‘ ثم كلمة سره ثم ‘@‘ ثم يأتي العنوان. وإلا قد يسألك عن اسم المستخدم وكلمة السر ويسمح لك بالدخول على أي حال إذا يجوز للجميع أن يراه. ولقد تحدثنا في فصل العتاد عن كيفية تعريف الطابعة المشاركة بواسطة samba بالأمر lpadmin. يوجد أمر آخر هو smbmount لضم الملفات من بعد أو حتى مجرد استعمال -t smbfs مع أمر mount. لعمل مستخدم samba استعمل smbpasswd -a USER حيث USER هو معرف/اسم الدخول. إذا كانت عملية الدخول تفشل تابع إلى الفصل التالي.

أما شبكات appletalk فيتم التعامل معها عبر حزمة تسمى netatalk التي توفر الأدوات اللازمة لذلك.

أما بالنسبة لطريقة FISH التي تمكنك من عرض ثم نسخ الملفات عن بعد عبر rcp كما تفعل مع cp تماماً ولكنها غير مشفرة أيضاً لهذا كان البديل الآمن scp (جزء من طاقم OpenSSH) يستعمل ببساطة بكتابة الملف المصدر(لذي تريد نقله) ثم المكان الهدف الذي تريد النقل إليه مثلاً scp ~/from.txt ali@mynet.org:/home/ali حيث ali الأولى هي اسم المستخدم الذي سيحاول الدخول باسمه و mynet.org هو الجهاز البعيد و /home/ali/ هو الدليل الذي سيوضع فيه و ~/from.txt هو الملف المحلي الذي نريد نسخه. قبل القيام سيطلب منك كلمة سر ali على ذلك الجهاز البعيد. كما يمكن تنفيذ العملية بالعكس scp ali@mynet.org:~/from.txt ~/ بل وحتى النقل من جهازين مختلفين scp ali@mynet.org:~/from.txt ahmad@HisNet.edu:~/to.txt التي تنقل from.txt من جهاز mynet.org إلى HisNet.org وتغير اسم الملف إلى to.txt هنا عليك إدخال كلمة سر علي وأحمد. الخيارات تشبه كثيراً تلك لأداة cp مثلاً لنقل مجلد مشروع

bash$ scp -Ra project/ 192.168.20.1:~/
كل ما يتطلبه الأمر هو خادم sshd يعمل على الجهاز البعيد. ويمكن تنفيذ الكثير من الحيل بواسطة tar و ssh من أجل التخزين المساند backup عبر الشبكة. تابع البند التالي.

كبديل عن rcp أيضاً لدينا rsync التي تعمل فقط على إرسال الفروقات مما يعني توفير في وقت الإتصال خصوصاً في الشبكات البطيئة. ومعنى اسمها هو التزامن أي الحفاظ على نسختك uptodate ذلك أنه لو كان عندك نسخة قديمة واستعملت rsync لنسخ الحديثة مكانها فإن ذلك لن يستغرق وقتاً طويلاً. هذا الكلام لا يعني أن هذا استخدامها الوحيد إذ يمكنها أن تنسخ نسخاً عادياً من جهاز إلى آخر ليس عنده نسخة قديمة. وكونها تبدأ ب r يعني أنها غير مشفرة! ولكن الخبر الجيد أنها يمكن أن تستعمل ssh كما scp للعمل المشفر. يعمل هذا الخادم بطريقتين أولها أن يعمل خادم rsync على الطرف الآخر وهنا نقدم العنوان على شكل [USER@]HOST::DIR أو URL كما rsync://[USER@]HOST[:PORT]/DIR حيث USER المستخدم (اختياري) و HOST الجهاز و PORT المنفذ(اختياري) و أخيراً الدليل DIR. مثلاً ali@foo.net::~/ تشير للدليل الجذر لعلي على جهاز foo.net الطريقة الأخرى هي أن يكون الخادم ssh أو rsh يعمل على الطرف الآخر ويوجد عليه برنامج rsync قابل للتفيذ (ليس بالضرورة أن يكون عاملاً كخادم) ، وهنا يكون العنوان على شكل [USER@]HOST:DIR

استدعاء rsync بمعامل وحيد يعمل على عرض الملفات البعيدة هناك مثلاً rsync 172.20.0.15:/usr/share/doc أما النسخ فيتم بإعطاء عدة معاملات آخرها هو الهدف (إليه ستنسخ) ، يمكن النسخ من جهازك إلى جهاز بعيد rsync -avz /usr/local 10.20.10.17:/usr/local الخيار a يعني نقل أرشيفي (كما هو) مع المحافظة على الأذونات الوصلات والأجهزة و نسخ الأدلة الفرعية، الخيار z لضغط الإتصال للسرعة. العملية العكسية أيضاً ممكنة أي يحضرها من جهاز بعيد إليك rsync -avz 10.20.10.17:/usr/local /usr/local. في هذه الحالات الثلاثة استعملنا عناوين من النوع الثاني أي باستعمال ssh أو rsh نحدد أي منها بواسطة ‘-e ssh‘ إذا لم نحدد سيحاول ssh. يمكنك استعمال خادم rsync أي العناوين الأولى ولكن الإتصال لن يشفر استعمل الخيار ‘-e ssh‘ لعمل قناة تشفير آمنة.

tipتلميح

يمكن تحديث دليلين محليين(على نفس الجهاز) في قت أقصر بواسطة rsync. مثلاً rsync -avz /usr/local/src /usr/src.

5.2.4 تنفيذ برامج عن بعد

هناك عدة برامج للدخول عن بعد مثل telnet و rsh و rlogin و ssh. البرنامج الشهير telnet على الرغم من سمعته إلى أنه ثغرة! قد تحتوي توزيعتك عليه ولكن فقط client. أما سلسلة برامج rsh أي remote shell فهي موجودة في توزيعتك من أجل تلك الدول التي تمنع التشفير وهي غير مركبة تلقائياً إضافة لكàنهإ ثغرة. من بقي؟ ssh وهو اختصار ل Secure SHell ويوجد عدة تطبيقات له منها برنامج java يمكن تنفيذه!من أي نظام أو حتى جهاز خلوي! ما نستعمله في لينكس هو OpenSSH هو مجموعة من الثدوات مثل ssh و sftp و scp إضافة للخادم sshd. على عكس telnet فإن rsh و ssh مقتصرة على خادمات يونكس. يعمل ssh على التشفير بطريقة تشبه OpenSSL أي Secure Socket Layer من خلال مفتاحين عام وخاص.

للدخول عن بعد إلى جهاز somewhere.com باسم ahmad (أو أي اسم وإذا لم تحدد سيدخل بالاسم الذي نفذته به) ssh ahmad@somewhere.com سيخبرك بأن x تتصل مع somewhere.com لأول مرة عبر ssh هل تريد حفظ بصمة هذا الجهاز (حتى إذء قام شخص بالعبث في خادم الأسماء وإدعى بأنه somewhere.com سيكشف لك ذلك) سيتم الحفظ في ملف ~/.ssh/known_hosts أو /etc/ssh/known_hosts ثم أدخل كلمة السر الخاصة به على ذلك الجهاز عندها ستحصل على محث بمفسر أوامر "أحمد" المفضل مثل bash ويمكنك تنفيذ أي برنامج موجود هناك يسمح له بتنفيذه. يمكنك تحديد أي برنامج ينفذ وذلك بكتابة اسمه ومعاملاته في نهاية السطر مثلاً يمكنك أن تمزح مع أحمد على جهازه في somewhere.com بأن تخرج له القرص المدمج ssh ahmad@somewhere.com eject ثم تدخله بأمر mount بنفس الطريقة أو تعيد تشغيل الجهاز (طبعاً عليك ذكر كلمة السر). هذا مثال آخر:

[ali@localhost:~]$ ssh ahmad@somewhere.com
ahmad@somewhere.com password: *******
[ahmad@somewere.com:~]$ ls
farfile.txt	myfolder
[ahmad@somewere.com:~]$ exit
[ali@localhost:~]$
يمكن تسريع الإتصال بواسطة الخيار C أي أن يقوم بالضغط إضافة للتشفير. ويمكن أن يقوم ssh بتمرير متغيّر شاشتك لبرنامج رسومي يعمل على الجهاز البعيد عندها تستطيع تشغيل البرامج الرسومية على الجهاز البعيد ولكنها ستظهر عندك وللتأكيد استعمل الخيار X. ولكن قبل ذلك عليك إخبار إكس عندك أن يقبل طلبات عن بعد بواسطة xhost +[HOST] حيث HOST عنوان الجهاز البعيد الذي تريد السماح له إذا لم تحدد سيسمح للجميع
[ali@localhost:~]$ xhost +
[ali@localhost:~]$ ssh -X ahmad@somewhere.com xmms &
ahmad@somewhere.com password: *******
[aliHlocalhost:~]$

من الحيل الجميلة التي لن تصدق أن ssh يمكنه أن يقوم بها

[ali@localhost:~]$ tar -cplf - ./ | ssh ahmad@somewhere.com \
	tar -xpf -
ahmad@somewhere.com password: *******
[ali@localhost:~]$
هنا قام برنامج tar بأرشفة الدليل الحالي وإرساله عبر الأنبوب إلى ssh الذي يشفر ثم يرسل عبر الشبكة وعلى الطرف الآخر يفك التشفير ثم يشغل tar لفك الأرشيف إلى ملفات يمكن أن تستخدم هذه الطريقة في نسخ نظام كامل عبر الشبكة!

5.2.5 وصول كامل عن بعد - خدمة VNC

يمكنك أن تتحكم في حهاز بعيد من خلال واجهتة الرسومية ولكن هذا في الغالب أمر غير مرغوب فيه لأسباب أمنية وهو أمر تفاخري أكثر منه مفيد تخيل أن تكون تعمل على جهاز فيمزح معك أحد أصدقائك بتشغيل 100 عين تراقب الفأرة على شاشتك (برنامج xeyes) وذلك بتغير قيمية متغيّر البيئة DISPLAY مثلاً قد يكتب أحدهم

bash$ DISPLAY=192.168.0.20:0 xeyes
صيغة DISPLAY تكون على شكل HOST:N حيث HOST هو اسم أو عنوان الجهاز و N رقم عادة صفر.

للسماح لبرامج على جهاز آخر بالظهور على خادم إكس استعمل xhost +[HOST] حيث HOST هو العنوان الذي تريد السماح له إذا لم يحدد سمح للجميع. مثلاً لتنفيذ mozilla موجود على الجهاز 192.168.32.117 ليظهر على جهازك كما ذكرنا اكتب

bash$ xhost +192.168.32.117
bash$ ssh -X 192.168.32.117 mozilla
انظر الكتيب الخاص ب xhost و xauth. هنا يقوم ssh إذا نفذ من طرفية رسومية مثل xterm بتحديد قيمة متغير البيئة DISPLAY ليشير إلى الجهاز الذي نفذ منه مما يعني أن mozilla في المثال الموجود على الجهاز البعيد سيستعمل خادم إكس على الجهاز الذي نفذ منه الأمر ssh.

للدخول في جلسة session كاملة عن بعد يمكن إعداد برنامج الدخول gdm (بوساطة gdm-setup) ليعرض خيار XDMCP ضمن قائمة action يسمح لك هذا الخيار عند الدخول بتحديد عنوان IP الجهاز الذي تريد الدخول إليه (قد يعرض لك قائمة بالأجهزة التي يمكنك الدخول أو تدخلها يدوي) بعد إدخاله يعرض لك برنامج الدخول عليها لتدخل الاسم وكلمة السر على ذلك الجهاز البعيد ثم تدخل (عند إعداد gdm هناك تبويب كامل XDMCP إذا اخترت Enable XDMCP فإنك تسمح لغيرك بالدخول على جهازك بنفس الطريقة ). ولكن ما تحصل عليه يختلف تماماً عمّا يجري لو أنك أمام ذلك الجهاز لأنك حصلت على جلسة أخرى مثلاً ستكون قيمة DISPLAY تحتوي بعد ‘:‘ رقم 1 وليس صفر

الطريقة الأخيرة هي باستعمال VNC - Virtual Network Computing الذي يجعلك وكأنك تجلس أمام الجهاز وهو برتوكول قياسي صممته AT&T يعمل على جميع أنواع يونكس ويندوز وماك وحتى أنظمة geOS مثل خلوي nokai 9000 وحتى هناك لينكس على قرص واحد به هذا البرنامج(www.khk.net) بل وحتى دووس! باستعمال allegro. على كل جهاز تريد الوصول له شغل مراقب vncserver الذي سيسأل عن كلمة سر عند أول تشغيل له (لغرض الحماية لن تكن كلمة سر الجذر لأن البرتوكول غير مشفر) ، ويمكن تغييرها فيما بعد بواسطة vncpasswd. هناك الكثير من البرامج التي تعرض(تدخل) إلى تلك الأجهزة منها بواسطة متصفح به جافا أو باستعمال برنامج متخصص مثل حزمة TightVNC (هذا اسم الحزمة ولكن في بعض التوزيعات يسمى vnc فقط) للدخول على الجهاز البعد الأمر على الصيغة
vncviewer [-share] [-viewonly] HOST[:N] حيث HOST هو اسم/عنوان الجهاز و N رقم اختياري الخيار viewonly فقط يعرض(ترى ماذا يفعل) دون أن تتحكم فيه دونه تستطيع التفاعل مع الصورة التي تراها، أما الخيار share فهو يسمح لأكثر من شخص الدخول على جهاز واحد معاً. تستطيع بالضغط على F8 إظهار نافذة تعطيك خيارات مثل عرض بكامل الشاشة. هناك برامج أخرى مثل kvncviewer و keystone من طاقم KDE لعرض بطريقة أكثر أناقة.

يتوفر لنا برنامج آخر هو rfb - Remote FrameBuffer أي شاشة عن بعد، وهو يعتمد نفس برتوكول VNC السابق مع مزايا مثل تشفير ssh. نفذ برنامج x0rfbserver على الأجهزة التي تريد أن تراقبها وتدخل عليها عن بعد وعلى الطرف الآخر شغّل xrfbviewer [-viewonly] HOST حيث HOST هو عنوان/اسم الجهاز التي تريد الوصول إليه، الخيار viewonly فقط للمراقبة دون التفاعل دونه يمكنك التفاعل مع هذه الصورة البعيدة

5.2.6 ويندوز عن بعد

يقدم برنامج rdesktop في لينكس إمكانية الدخول إلى ويندوز يشغلWindows Terminal Services الذي يتبع بروتوكول RDP عن بعد ورؤية ماذا يظهر على الشاشة وتشغيل برامج عليه والتفاعل معها بلوحة المفاتيح والفأرة الخاصة بجهازك يتم تشغيله بالأمر

bash$ rdesktop -k ar HOST
حيث HOST هي اسم أو عنوان IP للجهاز الذي تريد الدخول عليه وبإمكانك تحديد المنفذ port بكتابة : ورقمه بعد الجهاز. لاحظ الخيار k لتحديد لغة لوحة الفاتيح. من الخيارات الأخرى لديك f للعمل بكامل الشاشة و يمكنك تحديد المستخدم ومعلومات أخرى بالخيارات -u USER -p PASSWD -d DOMIAN فإذا لم تحدد سوف يسألك عنها.

remote windows access

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

تحدثنا في فصل الإنترنت عن برامج البريد مثل kmail التي تدخل ضمن ما يسمى mail agent فهي تعمل على استقبال البريد بواسطة بروتوكولي POP3 منفذ 110 أو IMAP منفذ 143 وتعمل على ارساله بواسطة بروتوكول SMTP منفذ 25 بطريقة رسومية وفي حالات نادرة قد يدعم مزود خدمة البريد على خادمه SSL للتشفير والحماية بينك وبينه (ولكن هذا لا يغيّر ما يجري بينه وبين الطرف الآخر) بواسطة POP3 الآمن على منفذ 995 و IMAP الآمن 993 و SMTP الآمن 465 ولكن مرة أخرى هذه بينك وبين الخادم فقط! من المهم إعداد مثل هذه البرامج حتى لو لم تكن مرتبطاً مع الإنترنت أو أي شبكة لأن برامج جدولة المهام وإدارة النظام قد ترسل لك تقارير على شكل بريد email محلي إضافة لإمكانية استعماله كرسائل بين مستخدمي نفس الجهاز. تخزن الرسائل المحلية والمستجلبة في دليل فرعي من /var/spool/mail أو في دليل مخفي في البيت.

يمكن استعمال أداة mail التي يمكنها قراءة البريد الإلكتروني أو أن ترسل رسالة إلكترونية إلى البريد إلكتروني التقليدي
cat FILE | mail -s "My Subject" "someone@somewhere.com" أو إلى شخص على الجهاز المحلي
cat FILE | mail -s "My Subject" "ahmad" أو شخص في الشبكة المحلية
cat FILE | mail -s "My Subject" "ali@192.168.10.5"

الفرق السطحي (من وجهة نظر المستخدم) بين IMAP و POP أن الأخير يشطب الرسالة بعد أن تصلك download بنجاح أو على الأقل هذا السلوك التلقائي له. وهذه الثلاثة برتوكولات تعود لبداية ARPANet ما قبل الإنترنت وهي ضعيفة من ناحية إرسال كلمات السر دون تشفير (يفضل إن أمكن استعمال النسخ الحديثة التي تدعم تشفير SSL ) ومن ناحية أخرى يمكن لأي شخص أن يرسل بريد باسم أي شخص آخر حيث أن خانة From يمكن أن تعطى لبروتوكول SMTP!!

warningتحذير

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

تمكنك برامج البريد الإلكتروني Mail Agents من فحص التوقيع الإلكتروني ومدى صلاحيته فالشركات الكبرى توقع بريدها بتوقيع إلكتروني بشهادة ceterficate موقعة بالتوقيع الإلكتوني لهيئة(شركة) متخصصة في منح التواقيع الإلكتونية وتحتوي أغلب البرامج على بصمة أشهر تلك الشركات (المانحة) لكي تفحص بريدك الوارد وتخبرك إذا كانت صالحة. أما في المراسلات بين الإفراد(لا يقدرون على شراء شهادة) فيمكن أن يعملوا شهادات بأنفسهم يضمنون هم صلاحيتها self signed ثم يضعوا البصمة (المفتاح العام) في أحد المواقع على الإنترنت التي تنشرها أو يتبادلونه عبر أي وسيلة ليضيفها كل منهم في قائمة البصمات الموثوقة. البرنامج المستعمل في جنو/لينكس هو حارس الخصوصية جنو - GPG أي GNU Privacy Guard وهو برنامج يعمل بطرق التشفير عالية الموثوقية وتوقيع وبصمة مزدوجة المفاتيح عام/خاص.
warningتحذير

هذا ليس الخطر الوحيد فهناك خطر من إعطائك انطباع بأن ما تشاهده جزء من الموقع مثل "timeout, re-enter your password" أو "This file has been scanned and no virus found" ولكنه يكون جزء من الرسالة!

تركيب خادم بريد إلكتروني لا يحتاج أكثر من تركيب الحزمة دون التدخل في ملفات الإعداد الطلسمية في الغالب. حزمة IMAP توفر كلاً من IMAP و POP. خادم إرسال البريد الإلكتروني SMTP الأشهر هو sendmail وهو يتمتع بالكثير من المزايا مثلاً التنكر بأن يكون ahmad@mail.mynet.edu ولكن يكون ahmad هو مستخدم في جهاز آخر support.mynet.edu يتم تمرير الرسائل إليه هناك. أن حتى دعم قاعدة بيانات المستخدمين على خادم ldap الخفيف والآمن.

الخادم procmail يقوم بمعالجة البريد والتصنيف والفلترة مثلاً لعمل mailing list وهناك الكثير من التطبيقات المتوفرة بشكل مفتوح على شكل CGI مثل phpgroupware

قد تحتاج لعمل شهادات certification لدعم SSL مثلاً

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

5.2.8 إنشاء اتصال ppp

إتصال Point-to-Point Protocol دون وجود علاقة خادم ومخدم server/client بل يعمل مراقب daemon عند الطرفين. ولكن مجازاً يمسى من يبدأ بطلب الخدمة مخدوماً ومن يقدمها خادماً. تحدثنا قبلاً في فصل 4.1 تعريف العتاد عن كيفية استخدام برنامجي kppp و gnome-ppp الرسومي من أجل إنشاء الاتصال وسنتحدث الآن عن كيفية إعداد مراقب pppd شخصياً من سطر الأوامر.

يعمل المودم على ربط طرفين فقط حيث يتلقى إشارات من الحاسوب نفسه إما نصية (غير حساسة لحالة الحروف الإنجليزية) بنظام AT&T أو سيال من البيانات المطلوب إرسالها ويرسلها إلى الطرف الآخر من الوصلة (أو يمتص هو تلك الإشارة لنفسه) ويرد عليها (إن هو أو الطرف الآخر) ولأن هناك طرفين فقط لا يوجد أي عناوين عبر بروتوكول ppp. مثلاً قبل استعمال جهاز المودم يجب إستهلاله بإرسال إشارة "ATZW2" متبوعة بسطر جديد (LF) وعودة (CR) أو أي إشارة إستهلال أخرى، ثم ينتظر أن يعيد له المودم رداً "OK" متبوعة بسطر جديد (LF) وعودة (CR) في حال نجاح ذلك (من الآن هناك LF-CR ضمنية بعد كل إشارة). تلك الإشارات لم يتم بثها في السلك بل بين المودم والجهاز. فإذا أرسلت الإشارة "ATDT" أو "ATD" ثم رقم هاتف ثم انتظرت استلام الرد فقد تحصل على "OK" أو "NO DIALTONE" الأخيرة تعني "لا يوجد حرارة في خط الهاتف". تسمى هذه العملية بالطلب dial-up. بعد هذه المرحلة ما يرسل يصل إلى الطرف الآخر كما هو على شكل سيال stream.

يعمل مراقب pppd على تحويل إتصالات TCP وغيرها المعنونة وفق IP إلى سيال stream وإرسالها عبر المودم حيث يعمل مراقب pppd هناك. كما يعمل بطريقة معاكسة مع ما يستلم من سيال عبر المودم فيفككه إلى طرود tcp وغيرها. يعمل المراقب في كل من الطرفين على إعطاء عنوان IP لكل طرف ليتم وضعه على أنه مصدر/هدف طرود tcp وغيرها، كما قد يعمل على تعديل جداول التوجيه (إذا حددنا الخيار defaultroute) لتجعل وصلة ppp0 مثلاً هي الوجهة التلقائية للعناوين الخارجية الأخرى. في المقابل يقوم برنامج chat بالتحدث مع المودم بطريقة تلقائية حيث يقرأ نص الحديث chatscript المعد مسبقاً فيرسل ويستقبل إشارات AT&T بناءً على النماذج المحددة في ذلك الملف بهدف أتمتتة عملية الطلب. يتكون ذلك الملف من عمودين الأول نموذج ما يستقبل والآخر ماذا يرد عليها.

في توزيعة ديبيان يكفي تنفيذ pppconfig مرة على الأقل من أجل لإعداد رقم الهاتف وكلمة السر والمستخدم...إلخ وبعدها بكل بساطة يمكنك أن تنفذ pon و poff لطلب الاتصال وقطعه على الترتيب و plog لقراءة آخر ملف التقرير.

لعمل ذلك يدوياً تأكد من أن ملف /etc/ppp/options يحتوي يحتوي سطري auth و lock (غالباً ذلك موجود مسبقاً). اعمل ملف /etc/ppp/peers/MyISP حيث MyISP هو اسم مزود الخدمة (لكي تستفيد بحفظ إعدادات كل واحد بشكل منفصل) تلقائياً سيبحث برنامج pppd عن واحد باسم provider. واكتب فيه

#/etc/ppp/peers/provider
# from Debian docs
ttyS0		# modem is connected to /dev/ttyS0
38400		# run the serial port at 38400 baud
crtscts		# use hardware flow control
noauth		# don't require the ISP to authenticate itself (comment it if PAP CHAP)
defaultroute	# use the ISP as our default route
connect '/usr/sbin/chat -v -f /etc/ppp/chatscripts/provider'
# if PAP uncomment the following or else it will be assumed to be your 'whoami'
#user mypapname
حيث نحدد الجهاز ليكون ttyS0 أي أول خط متسلسل serial (في ويندوز يسمى COM1). ونحدد ماذا ينفذ لكي يطلب الإتصال بواسطة سطر connect حيث نحدد الأمر chat ويقرأ chatscript من الملف /etc/ppp/chatscripts/provider الذي بدوره سيحتوي رقم الهاتف ...إلخ. هذا مثال عليه (غيّر رقم الهاتف والاسم وكلمة السر تجدها بالخط المائل)
#/etc/ppp/chatscripts/provider
# from Debian docs
ABORT		BUSY
ABORT		"NO CARRIER"
ABORT		"NO DIALTONE"
ABORT		"ERROR"
ABORT		VOICE
ABORT		"NO ANSWER"
ABORT		"Access denied"
ABORT		"Username/Password Incorrect"
SAY	"init device ..."
TIMEOUT		30
# there are many init like just 'AT' or 'ATE1'
""		ATZW2
# OK		"ATS0=1S11=60X4&K4S42.1=1"
# OK		"AT&D2&C1"
# ATDT or ATD
SAY	"dialing ISP ..."
OK	"ATDT81010101"
SAY	"sending name/password..."
#comment all below in case of PAP or CHAP
ogin	"MYNAME"
word    "\qMYPASSWORD"
#\q mean quiet does not appear in log files (password -> ?????????)
في بداية هذا الملف نخبر chat أن يفصل الإتصال abort إذا استقبل كذا. ثم عندما يسكت المودم يرسل إليه سلسلة نصية لإستهلاله مثل atzw2 فإذا كان جاهزاً "OK" أرسل له طلب رقم الهاتف ثم الاسم وكلمة السر (لاحظ "\q" التي تعني لا تظهرها في التقرير)

بعد ذلك لطلب الاتصال يكفي أن تكتب pppd call MyISP ويمكن لمستخدمي ديبيان استعمال pon MyISP في مثالنا MyISP هي provider. لإغلاق الخط يمكن استعمال kill لإنهاء مراقب pppd أو poff في ديبيان، حيث لا داع لكتابة اسم المزود إن كان وحيداً. pon و poff أدوات متفوقة تقوم بفحوصات إضافية مثل التأكد من أن الوصلة لا تعمل قبل تشغيلها ...إلخ.

إذا كان الإتصال يتطلب عمليات توثيق متقدمة على الطريقة السابقة مثل PAP (أرجو أن لا يفهم من كلامي أنها أكثر أمناً فهي تنقل كلمة السر دون تشفير) و CHAP عليك إزالة إشارة التعلقات "#" من بداية بعض الأسطر وعمل ملف /etc/ppp/pap-secrets أو /etc/ppp/chap-secrets مناسب كما سنشرح في الفصل التالي.


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