5.2 العمل في الشبكات | كتاب لينكس الشامل | >> |
يمكنك التأكد من أن جهاز معين مرتبط بالشبكة بأن تطلب منه رد الصدى وذلك بالأمر ping الذي يمكنك أن تمرر له اسم أو عنوان الجهاز الذي تريد التأكد من أنه متصل
bash$ ping linux4arab.com bash$ ping -c 4 127.0.0.1
CTRL+C
أو ينتهي من العدد الذي حددته بالخيار -c
عندها يعرض تقرير كم طلب أرسل وكم عاد ونسبة الفقد والزمن الأعلى والأدنى والمتوسط للرحلة.
يستعمل هذا الأمر البروتوكول ICMP.
ويمكن الاستفادة منه في دراسة سرعة الشبكة (عرض الحزمة) bandwidth.
يمكن للجذر أن يستعمل الخيار -f
الذي يقوم بفيض من الطلبات flood دون فاصل كما في هجوم حجب الخدمة DoS،
ويتوقع هنا بشكل طبيعي أن تحصل على بعض الفقد
(يمكن أن لا يحدث فقد في الشبكات السريعة)
ولأن عرض سطر عن كل طلب من آلاف الطلبات ليس منطقياً يقوم
الأمر بكتابة نقطة (.) في كل طلب وحذف نقطة عند استلام الرد.
جاء اسم أمر طلب رد الصدى 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
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
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.
خدمة ويب 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
أفضل أداة لتنزيل ملفات 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
.
هناك أكثر ين طريقة للوصول إلى الملفات عن بعد منها: 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:~/
كبديل عن 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
‘ لعمل قناة تشفير آمنة.
يمكن تحديث دليلين محليين(على نفس الجهاز) في قت أقصر بواسطة
rsync. مثلاً rsync -avz /usr/local/src /usr/src
.
هناك عدة برامج للدخول عن بعد مثل 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:~]$
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:~]$
يمكنك أن تتحكم في حهاز بعيد من خلال واجهتة الرسومية
ولكن هذا في الغالب أمر غير مرغوب فيه لأسباب أمنية
وهو أمر تفاخري أكثر منه مفيد تخيل أن تكون تعمل
على جهاز فيمزح معك أحد أصدقائك بتشغيل 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
فقط للمراقبة دون التفاعل
دونه يمكنك التفاعل مع هذه الصورة البعيدة
تحدثنا في فصل الإنترنت عن برامج البريد
مثل 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!!
إذا جاءك بريد من شركة مشهورة في صناعة مضاد الفيروس أو حتى من شركة اشتريت منتجاتها أو من أي تعاملات مادية ... إلخ يطلب منك الدخول إلى موقع وتعبئة نموذج(به معلومات حساسة) أو تنزيل برنامج ... إلخ فلا تظن أن ما هو مكتوب أنه المرسل From هو فعلاً المرسل!! يمكن لأي شخص أن يرسل بريد بأي اسم يشاء. انظر التوقيع الإلكتروني
هذا ليس الخطر الوحيد فهناك خطر من إعطائك انطباع بأن ما تشاهده جزء من الموقع مثل "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
إتصال 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
/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 -> ?????????)
بعد ذلك لطلب الاتصال يكفي أن تكتب pppd call MyISP
ويمكن لمستخدمي ديبيان استعمال pon MyISP
في مثالنا MyISP هي provider.
لإغلاق الخط يمكن استعمال kill لإنهاء مراقب pppd أو poff
في ديبيان، حيث لا داع لكتابة اسم المزود إن كان وحيداً.
pon و poff أدوات متفوقة تقوم بفحوصات إضافية مثل التأكد من أن الوصلة لا تعمل
قبل تشغيلها ...إلخ.
إذا كان الإتصال يتطلب عمليات توثيق متقدمة على الطريقة السابقة
مثل PAP (أرجو أن لا يفهم من كلامي أنها أكثر أمناً فهي تنقل كلمة السر دون تشفير) و CHAP
عليك إزالة إشارة التعلقات "#" من بداية بعض الأسطر
وعمل ملف /etc/ppp/pap-secrets
أو
/etc/ppp/chap-secrets
مناسب كما سنشرح في الفصل التالي.
<< السابق | كتاب لينكس الشامل | التالي >> |