original in en Mark Nielsen
en to ar Taha Zerrouki
مارك يعمل مستشارا مستفلا، يهب وقته لقضايا مثل GNUJobs.com، يؤلف مقالات و يصوغ برامج حرة، و يتطوع لدى eastmont.net
استجذار خدمات النظام يعزز الأمن، و يقلل من الأضرار التي قد يسببها أحد ما إن اخترق النظام.
ما الاستجذار؟ إنه تبديل بيئة برنامج ما، أي استبدال مجلد الجذر ROOT أي "\"، بالنسبة إلى برنامج ما أو جلسة عمل ما. أي أنّ أي شيء خارج المجلد الذي تستجذر به، غير موجود أبعد من البرنامج أو منفذ الأوامر المقصود.
ما الفائدة من هذا؟ إذا ما اخترق أحد ما حاسوبك، فلن يقدر أن يرى كل الملفات في نظامك. مما يقلل الأوامر التي يمكنه تنفيذها، و يحرمه المقدرة على استكشاف ملفات غير محصنة. لكن ما يؤرقني، أن هذا لن يمنعه من أن يطّلع على وصلات الشبكة و الأغراض الأخرى. لذا عليك بأمور أخرى، لن نتوسع فيها في هذا المقال :
ما يجعلني أعتبر الاستجذار ( مع خدمة غير الجذر) خطا دفاعيا، أنه إذا ما اخترق أحد ما حسابا غير الجذر، و لم يجد أي ملف يمكنه من اختراق الجذر، فــــسيضر فقط المساحة التي اخترقها. أما إن كانت المساحة المقتحمة غالبا لحساب الجذر، فلديه إذن خيارات أقل للهجوم. لا بد خلل ما، اخترق حسابك، لكن يستحسن أن تلطف المصيبة ما استطعت.
تذكر أنّ منهجي هذا قد لا يكون محكما 100 %، إنها محاولتي الأولى، و إن كانت تعمل جيدا بعض الشيء، فلابد أنها ستتم بيسر. إنها بداية الدرب لوثيقة "كيف يعمل" أود تأليفها عن الستجذار.
حسنا، سنصنع مجلدا نسميه "/chroot"، و نجعل فيه كل الخدمات كما يأتي:
كل خدمة يجب أن تعزل تماما.
نزّل Config_Chroot.pl.txt ثم سمّه Config_Chroot.pl. هذه المخطوطة - مكتوبة بـبرل - تسرد الخدمات المثبتة، و تريك ملفات الإعداد ، و تعدُّ خدمة ما، و تبدأها و توقفها، و هذا ما ينبغي عمله عموما.
و الآن، أشير أنني جربتها فقط على RedHat 7.2 و RedHat 6.2. إذن عدّل المخطوطة بما يناسب توزيعتك.
توصلت أن أكتب مقالا كبيرا طويلا عن الاستجذار ، لولا أنّ مخطوطتي قلصته. إذ لاحظت بعد استجذار كثير من الخدمات أنّ لها ملفات و إعدادات متشابهة . الطريقى المثلى لمعرفة ملفات خدمة ما التي ينبغي نسخها عند الاستجذار، هي مطالعة صفحة العون، و تنفيذ الأمر"ldd /usr/bin/file" للبرامج التي تحتاج ملفات المكتبات. كما يمكنك أن تستجذر خدمة ما و تشغلها يدويا لترى الأخطاء التي قد تحدث، أو تطالع ملفات الدخول.
عموما، لتثبيت خدمة ما عليك بـ:
cd /chroot ./Config_Chroot.pl config SERVICE ./Config_Chroot.pl install SERVICE ./Config_Chroot.pl start SERVICE
Ntpd خدمة زمنيو، فحسب، تحفظ تزامن حاسوبك و الحواسيب الأخرى مع الزمن الفعلي،و هي سهلة الاستجذار.
cd /chroot
# حرر السطر الموالي، إن لم تستعمل
ملفاتي للإعداد.
#./Config_Chroot.pl config ntpd
./Config_Chroot.pl install ntpd
./Config_Chroot.pl start ntpd
مستجذر سلفا،
زر
http://www.linuxdoc.org/HOWTO/Chroot-BIND8-HOWTO.html
أو
http://www.linuxdoc.org/HOWTO/Chroot-BIND-HOWTO.html
و إلا استعمل مخطوطتي .
cd /chroot # حرر السطر الموالي، إن لم تستعمل ملفاتي للإعداد. #./Config_Chroot.pl config named ./Config_Chroot.pl install named ./Config_Chroot.pl start named
أود استجذارsyslogd . لكن المعضلة أنه يستخدم /dev/log تلقائيا، الذي لا يتمكن من البلوغ إليه من الخدمات المستجذرة. لذا لا أستطيع أن أدخل بيسر . أما الحلول الممكنة فهي:
الحل لدي أن تتأكد أن syslogd مستجذر جيدا مع كل خدمة.
وددت لو حصلت على حلول أخرى يمكن الدخول بها دون حساب الجذر، باستعمال بيئتها المستجذرة، ربما مثل منفذ شبكي. هذا ما يمكن أن أعمل، سأتوقف عند هذا الحد و سأبحث عن حل ما لاحقا.
أما إن فضلت ألا تفصل بين syslogd لكل خدمة، أضف الأوامر التالية إلى syslogd الرئيسي عندما يبدأ:
syslogd -a /chroot/SERVICE/dev/log
فإن كان لديك ssh و dns فسيبدوا هكذا :
syslogd -a /chroot/ssh/dev/log -a /chroot/named/dev/log -a /dev/log
آخر ملاحطة على syslogdن أنني رغبت أن أجعله يعمل في حساب غير الجذر، فحاولت أمرين بسيطين، لكنهما لم ينفعا، فاكتفيت. فإذا ما عمل في غير حساب الجذر مع كل خدمة فسيلبي حاجتي الأمنية.
ما أسهل هذا، فما إن ثبته حتى استطعت إنفاذ مخطوط برل. الآن استطال مخطوطي بما أضفته إليه من مكتبات برل و postgreSQL في قسم الاستجذار. يجدر بالإشارة، أنك إن اتصلت بقاعدة بيانات، عليك أن تتأكن أن خدمة قواعد البيانات تعمل على أداة الحلقة المفرغة، و أن تجعل 127.0.0.1 هو المضيف في مخطوط برل لوحدة DBI.
و إليك هذا المثال، حيث أتصل بقاعدة بيانات عبر وصلة دائمة بApache.
$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE',"","", {PrintError=>0}); if ($dbh ) {$dbh->{PrintError} = 1;} else {$dbh ||= DBI->connect('dbi:Pg:dbname=DATABASE;host=127.0.0.1',"","", {PrintError=>1});}
المصدر : http://httpd.apache.org/dist/httpd
صرّف Compile أباش ثم ثبِّته في المجلد/usr/local/apache . ثم اعمل بمخطوط برل :
cd /chroot # Uncomment the next line if you don't use my config file. # ./Config_Chroot.pl config httpd ./Config_Chroot.pl install httpd ./Config_Chroot.pl start httpd
عدلت ملفي httpd.conf لأحصل على .
ExtendedStatus On <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 </Location> <Location /server-info> SetHandler server-info Order deny,allow Deny from all Allow from 127.0.0.1 </Location>
ثم تصفح http://127.0.0.1/server-status أو http://127.0.0.1/server-info و تفحصها.
أولا لابد أن تبدل ssh من المنفذ 22 إلى المنفذ 2222، ثم لما تبدأ ssh فسينصت إلى المنفذ 2222 من غير حساب الجذر. للاتصال بـ ssh اول مرة ينبعي وجود حساببات محصنة بكلمات سر، للسماح للآخرين بالدخول فقط لا غير. بعد الدخول لديهم برنامج ssh آخر يعمل على المنفذ 127.0.0.1:2322 ليتصلوا بالنظام الفعلي-- برنامج ssh الثاني يجب أن ينصت إلى جهاز الحلقة المفرغة loopbackفقط. الآن هذا ما عليك عمله، نحن لن نعمل ذلك، كل ما سنفعله أن تستجذر ssh في هذا المثال. و تركنا للقارئ تمارين يجربها بأن يضع sshd في حساب غير الجذر و يثبت sshd ثانيا ينصت إلى الحلقة المفرغة، ليجعل الآخرين يتصلون بالجهاز الفعلي .
مرة أخرى، سنستجذر ssh فقط، و نذكرك بنتائج ذلك إذ لن يمكنك رؤية نظامك كاملا ( إن فعلت هذا فحسب ). و هذا مثالي لجعل الدخولات بعيدا عن الموقع. كذلك كان علينا أن نستعمل OpenSSH لكنني استعملت ssh التجاري للتيسيير ( و هذا ليس عذرا).
المصدر : http://www.ssh.com/products/ssh/download.cfm
ثبّت ssh في /usr/local/ssh_chroot. ثم استعمل مخطوطة برل.
cd /chroot # Uncomment the next line if you don't use my config file. # ./Config_Chroot.pl config sshd ./Config_Chroot.pl install sshd ./Config_Chroot.pl start sshd
اعتقد أنّ الجيد في استجذار ssh أنك إن رغبت في استبدال خادم نقل الملفات ftp، فستحدّ من مجال دخول الجمهور إلى منطقتك. البرنامجان rsync و SCP يعملان معا لتمكين الناس من تنزيل النلفات (upload) . و أنا لا أحبذ أن أجعل خادما لنقل الملفات يمكن للناس دخوله. خوادم ftp المستجذرة كثيرة أيضا، لكنها ما زالت ترسل كلمات السر واضحة، و هذا ما لا أحبذه.
استجذاره سهل مثل استجذار برل، بيد أنه يحتاج بعض المكتبات، و هذا ليست مستعصيا. لقد وضعت PostgreSQL على الشبكة مفتوحا، لكن في الحلقة المفرغة فقط. و حينما استجذرته لا حطت أن بعض الخدمات المستجذرة لا تعمل معه مثل خادم apache للويب. لذا أضفت كثيرا من إمكانات برل إلى ملف الإعداد.
المصدر: ftp://ftp.us.postgresql.org/source/v7.1.3/postgresql-7.1.3.tar.gz
صرّف apache ثم ثبتّه في /usr/local/postgres. ثم استعمل مخطوطة برل.
cd /chroot # Uncomment the next line if you don't use my config file. # ./Config_Chroot.pl config postgres ./Config_Chroot.pl install postgres ./Config_Chroot.pl start postgres
اذهب رأسا و نفّذ مخطوطتي .
cd /chroot # Uncomment the next line if you don't use my config file. # ./Config_Chroot.pl config sendmail ./Config_Chroot.pl install sendmail ./Config_Chroot.pl start sendmail
أما من مشكل؟ بلى، إنه يعمل في حساب الجذر، و كذلك نشأت بعض الملفات في /etc/rc.d/init.d/sendmailعند انطلاقه . مخطوطتي لم تحتسب ذلك. أرجو منك أن تنسخ التعديلات إلى /chroot/sendmail/etc كلما عدلت /etc/mail كما عليك أن تجعل /var/spool/mail يشير إلى /chroot/sendmail/var/spool/mail حتى يستطيع برنامج sendmail و مستعمليه رؤية الملفات نفسها.
الإرسال لا شية فيه، لكن الاستقبال به مشكلة، اذ استطعت أن أثبّت sendmail مع apache دون مشكلة. بعض مخطوطاتي ترسل البريد، و احتاج أن تنسخ ملفات sendmail إلى منطقة استجذار apache.
فلسفتي هي أنّ:
و الآن حين وصلنا إلى syslogd و sendmail مازلت أعتقد أنهما يجب أن يعملا في غير حساب الجذر. أما sendmail فقد استعصى علي إعماله في غير حساب الجذر، هذا يعوقني، و لا بد أن هناك مشكلا ما، لكنني مصر على أن ذلك ممكن. و إذا كانت أذونات الملفات تحاط بعناية فإنني أعجب أن لا يعمل sendmail في حساب الجذر. لابد من سبب لهذا لا أعلمه بيد أنني أشك أن هذا العائق لا يمكن تجاوزه.
أما syslogd فلم أجربه بعد، و أود أن أرى الدخولات تعمل في غير حساب الجذر. لكنني لا أعلم لماذا يستعصي. على الأقل قدرت أن استجذره مع كل خدمة على حدى.
الخدمات كلها يجب أن تعمل في غير حساب الجذر، حتى NFS، كلها.
الاستجذار رائع، و اعتقد أن إغفاله سيء جدا، و أتمنى لو تفعله التوزيعات كلها، أو بعضها أو أيا منها. ماندريك تتناول توزيعة ريدهات، و تعدلها، فلم لا يأخذ أحد ما توزيعة مندريك و يستجذر خدماتها و يوزعها، إذ لا مانع أن يعدل فلان عمل علان حسب ترخيص GNU/Linux. فلو أرادت بعض الشركات استجذار كل الخدمات و صممت بيئة يمكن للناس أن يستجذروا خدماتهم، فستكون نوزيعة رائعة. تذكر أن الاتجاه السائد في لينكس، أن الناس سئموا من سطر الأوامر، و يتمنون أن يعملوا على الواجهة الرسومية .
أنا مصر أن الخدمات كلها يجب أن تستجذر في غير حساب الجذر، و أن أي توزيعة تتجاهل هذا ليست متقنة في محال الإنتاج. سوف استجذر كل شيء، كلما استطعت و سأستطيع.
سوف أحضر " كيف يعمل " howto عن الاستجذار، و أدعو من قد يساعدني لتحويل مقالي إلى lyx لأقدر أن أجعله howto للينكس .
منفذ الأوامر | shell |
جلسة | session |
اخترق | break in |
منفذ | port |
حساب غير الجذر | non-root account |
ملفات الدخول | logs files |
كيف يعمل | HowTo |
مخطوطة | script |
برل | Perl |
صفحة العون | man page |
مكتبة | librery |
بعيدا عن الموقع- موقع مقفل | offsite |
الدخولات | logs |
منفذ شبكي | network port |