التصريح على الملفات والمجلدات بانظمةunix-like(متجدد)
اليوم نتطرق لموضوع مهم يخص الأمن على أنظمة unix-like بشكل عام وهو موضوع التصريحات على الملفات أو File permission . وبالطبع الموضوع من الأهمية بمكان لمن يتعامل بشكل يومى على بيئة اللينوكس سواء كان مستخدم عادى أو محترف أو مدير سيرفر . والموضوع كنت قد كتبته منذ فترة فى مجتمع لينوكس العربى ونقلته هنا حتى تعم الإفادة على الجميع إن شاء الله.
وتكمن أهمية التصريحات فى أنها السبيل لتنفيذ ما تحتاجه من تشغل برامج أو أوامر ، تصفح المجلدات لقراءة محتوياتها أو التعديل عليها إلخ من المهام الرئيسية اليومية التى يقوم بها كل فرد على أنظمة لينوكس ،ومن ضمن الأشياء التى تقوم بتوفيرها التصريحات وخصوصا لمدراء السيرفرات هو التحكم الكامل فى صلاحيات كل فرد على السيرفر ككل ، مثلا ما المتاح لهذا الفرد لتنفيذ أوامر معينة وماﻻ يمكنه تنفيذه .
أيضا أحب أن أشير لنقطة قد ﻻ يتنبه لها البعض وخصوصا المستخدم العادى عندم تقوم بعمل مستخدم على لينوكس بشكل افتراضى يقوم النظام بانشاء مجموعة تابعة لهذا المستخدم تلقائيا دون تدخل من المستخدم نفسه وقد يتساءل البعض ولم ؟
طبعا أهمية هذا الأمر تكمن فى إمكانية اعطاء عدد من الأفراد صلاحيات واحدة تندرج تحت مجموعة تخص مستخدم معين على النظام دون الحاجة إلى إنشاء مستخدمين جدد ، وبالتالى يسهل الأمر على مدراء السيرفرات فى احكام السيطرة على ما يمكن كل فرد فعله كما ذكرنا سابقا وبالتالى يتحكم مدير السيرفر فى عدد من المجموعات بدلا ً من مئات المستخدمين . وتعتبر المجموعات أو groups من الركائز الرئيسية والتى تعتمدها أنظمة لينوكس فى التعامل مع الملفات أى تقسيم المهام على مجموعات معينة كلٌ منها تقوم بوظيفة مختلفة عن الأخرى .
وبالتالى نستنتج من ذلك أن كل مستخدم يستطيع التحكم فى تنفيذ الأشياء التى تخصه دون الآخرين اللهم إﻻ إذا كان هذا المستخدم مشترك بالفعل فى مجموعات أخرى تقوم بمهام معينة ، فمثلا عند إنشاء مستخدم جديد يكون له home directory خاص به تحت المجلد الرئيسى homeيستطيع من خلاله حفظ أى بيانات تخصه وله القدرة على التعديل ، الحذف ، النسخ إلخ من تلك المهام على العكس بالنسبة للمجلدات الأخرى لا يستطيع تنفيذ مهام عليها إﻻ إذا كانت له التصاريح الكافية لعمل تلك المهمات ، فمثلا قد يكون له القدرة على قراءة ملف تحت المجلد dev ولا يكون له حق التعديل عليه وهكذا...
وخلاصة القول : أى ملف أو مجلد على النظام يكون مملوك من قِبل مستخدم معين ، هذا المستخدم تندرج أسفله مجموعة تضم عدد معين من الأفراد لهم صلاحيات معينه على هذا الملف قد تكون صلاحيات كاملة كمثال قراءة الملف ، التعديل عليه بحذف أو إضافة وأخيرا تنفيذ هذا الملف ، أو قد تكون صلاحيات غير كاملة كمثال القراءة دون الحذف والتنفيذ ، القراءة مع التنفيذ فقط وهكذا ....
ونتيجة لذلك نستطيع تقسيم الصلاحيات على أى ملف او مجلد بالنظام إلى ثلاثة أقسام :
الأولى : صلاحيات المستخدم نفسه (User permission)
الثانية : صلاحيات المجموعة التابعة لهذا المستخدم (Group Permission)
الثالثة : صلاحيات لأفراد آخرين قد يكون أو ﻻ يكون لهم تعامل مباشر بالنظام (Everyone Else's Permisiion)
ونتيجة لذلك أيضا يمكن تقسيم صلاحيات الملفات كما أشرت فى مجمل حديثى إلى ثلاثة أنواع هى على الترتيب :
1- تصريح القراءة (read permission) ويرمز إلى الحرف r
2- تصريح الكتابة (write permission) ويرمز إلى الحرف w
3- تصريح التنفيذ (execute permission) ويرمز إلى الحرف x
ولكن قد يتبادر سؤال إلى الأذهان أﻻ وهو هل التصاريح الخاصة بالملفات والمجلدات واحدة ؟؟ بمعنى من القراءة الأولية للعناصر السابقة لأنواع التصاريح قد نفهم بشكل أو بآخر أنّ تصريح القراءة والكتابة بالنسبة للملف والمجلد على حد سواء متقارب ، بمعنى أنه إذا كان الملف يحمل تصريح القراءة فبالتالى نستطيع قراءة محتوياته ، بالمثل إذا كان المجلد يحمل تصريح القراءة فبالتالى نستطيع سرد محتويات المجلد باستخدام الأمر ls ، كذلك إذا كان الملف يحمل تصريح الكتابة فبالتالى تستطيع الكتابة من وإلى الملف كذلك الحذف أو التعديل ، أيضا المجلد تستطيع النسخ من وإليه ، الحذف أو الإضافة وهكذا ....ولكن عند الحديث عن تصريح التنفيذ فيبدو للوهلة الأولى منطقيا بالنسبة للملف حيث يمكن اعتبار الملف عبارة عن برنامج معين ولذلك ﻻ ضير فى استخدام التصريح معه بهذا الشكل ولكن كيف يمكن لنا أن نقوم بتنفيذ مجلد باستخدام ذلك التصريح ؟؟
رد: التصريح على الملفات والمجلدات بانظمةunix-like(متجدد)
مفهوم تصريح التنفيذ عند الحديث عن المجلدات هو إمكانية تغيير المسار إلى ذلك المجلد باستخدام الأمر cd وإﻻ فى حالة عدم وجود تصريح التنفيذ بالنسبة للمجلدات عندها سوف تظهر عبارة bash: cd: foldername/: Permission denied
كانت هذه مقدمة بسيطة عن التصاريح وما فائدتها بالنسبة لمستخدمى أنظمة unix-like ككل بداية من المبتدئين انتهاءً بمدراء السيرفرات والآن لنبدأ فى ذكر أمثلة عملية على الموضوع ونبدأ بكيفية سرد التصاريح لأى ملف على النظام باستخدام الأمر ls مع الخيار l- ليكون الأمر بالشكل التالى فى الطرفية :
كود shuffl@P0w3R:~$ ls -l
-rw-r--r-- 1 shuffl shuffl 94996 2007-03-14 07:10 wget-log
drwxr-xr-x 5 oem oem 4096 2007-03-16 09:44 mysql
كما تلاحظون قمت باستعراض الملفات الموجودة على المسار الخاص بى home/shuffl/ ( يختلف من شخص لآخر ) وظهرت نتيجة الأمر فى الطرفية كما بالشكل السابق وما علينا الآن فعله هو تحليل الناتج من اليسار إلى اليمين على الملف الأول wget-log :
أوﻻ : كما ذكرنا سابقا توجد مجموعة من التصاريح المعينة تستخدمها أنظمة unix-like لبيان ما يمكن فعله على الملف ، ذكرنا منها تصريح القراءة والذى يرمز إلى الحرف r أو ناتج اختصار كلمة read ، وتصريح الكتابة والذى يرمز إلى الحرف w أو ناتج اختصار كلمة write ، وأخيرا تصريح التنفيذ والذى يرمز إلى الحرف x أو ناتج اختصار كلمة execute
ثانيا : الرقم بجوار التصريح مثلا فى حالة الملف wget-log أو المجلد mysql له حالتان :
1- إذا كان الرقم فى سطر خاص بملف عادى فهو يوضح عدد ال hard links الموجودة لذلك الملف .
2- إذا كان الرقم فى سطر خاص بمجلد فهو يوضح عدد المجلدات الفرعية الموجودة بداخل المجلد الرئيسى وفى مثالنا المجلد mysql يحتوى على خمسة مجلدات فرعية .
ولكن توجد بعض المصطلحات التى قد ﻻ يفهما البعض ماهى ال links أو الhardlinks كما ذكرت بأعلى ؟؟
لفهم هذه النقطة نضرب مثال : نفترض أنك تريد عمل نسخة من ملف معين على جهازك وتريد وضعه على ال Desktop الخاصة بك مثلا وكان حجم الملف كبير بشكل ما قد يصيبك بالإحباط وتريد حل عملى من خلاله تستطيع عمل نسخة من الملف دون اشغال حيز جديد من المساحة ما الحل ؟؟
هنا يأتى دور ال links فأنظمة unix-like تتيح لك هذه الخاصية أى تستطيع عمل عدة نسخ من الملف دون الحاجة إلى نسخ الملف بحجمه الكامل إلى الجهة المراد نسخه عليها وبالتالى تستطيع توفير مساحة قد تصل فى بعض الأحيان بالجيجا بيت اعتمادا على حجم الملف المراد نسخه أو قد تستخدم ال links لنقل ملفات من نظام ملفات إلى آخر .
وبالتالى كل link تقوم أنت بإنشائها تشير إلى النسخة الأصلية للملف ، ونتيجة لذلك توجد لدينا طريقتان لعمل ال links كل منها تعتمد على الوظيفة المطلوب عملها أو ما تسمى فى هذه الحالة hardlinks أو soft links or symbolic links .
وعذرا إن كنت خرجت عن نطاق الموضوع الرئيسى أﻻ وهو التصاريح ولكن أحببت التطرق إلى هذه الجزئية حتى تكون واضحة المعالم بالنسبة لمن ﻻ يعلم عنها شياً وإن شاء نستعرض الlinks بشكل تفصيلى فى مواضيع ﻻحقة.
وأود لفت الإنتباه إلى نقطة أخرى قد تكلمت عنها سابقا فى موضوع سطر الأوامر نظرة عن قرب أكثر وهى بخصوص عدد المجلدات الفرعية إذا كان الملف من نوع مجلد ، فى مثالنا هذا كان العدد خمسة مجلدات فرعية داخل المجلد mysql مع العلم أنهم ثلاثة فقط راجع للأهمية هذه النقطة تجدها فى الموضوع فى المشاكة قم اثنان الجزئية رقم ستة .
ثالثا : الإسم shuffl من جهة اليسار يوضح المالك الأصلى للملف ( المستخدم الذى قام بإنشاء الملف ) .
رابعا : الإسم shuffl من جهة اليمين يوضح المجموعة المالكة للملف .
خامسا : الرقم 94996 يوضح حجم الملف wget-log ولكن بال bytes
سادسا : الأرقام 2007-0-143 و 07:10 تدل على التاريخ والساعة اللذان تم فيهما التعديل الأخير على الملف .
سابعا : إسم الملف وفى حالتنا هذه wget-log
والآن ما يهمنا هو النقطة الأولى أﻻ وهى التصاريخ الخاصة بالملف وفهمها بشكل عملى كالتالى :
الرموز drwxr-xr-x وتشير إلى التصريح الخاص بالملف mysql ، ولكن من الوهلة الأولى يبدو وكأنه شفرة سرية !! ولكنه فى الحقية من الأمور السهل جداً فهمُها واستيعابها بقليل من المعرفة ، لاحظ معى هناك عشرة أحرف مقسمين إلى أربع مجموعات ( قد ﻻ يبدو الأمر كذلك ) .
المجموعة الأولى : تتكون من الحرف الأول (1).
المجموعة الثانية : تتكون من الحرف الثانى إلى الحرف الرابع (2-4)
المجموعة الثالثة : تتكون من الحرف الخامس إلى الحرف السابع (5-7)
المجموعة الرابعة : تتكون من الحرف الثامن إلى الحرف العاشر (8-10)
وعلى سبيل المثال نأخد التصريح الخاص بالملف mysql ويبدو مقسما إلى المجموعات السابق ذكرها بالشكل التالى :