# تصاريح نظام الملفات

معظم انظمة الملفات الحالية لديها طرق لإدارة التصاريح والصلاحيات أو إدارة حقوق الوصول لمستخدمين محددين ومجموعات من المستخدمين. تتحكم هذه الأذونات في قدرة المستخدمين على عرض، وتغيير، والتنقل، وتنفيذ محتويات نظام الملفات.
يتم استخدام نوعين من الأذونات على نطاق واسع: تعود أذونات يونكس التقليدية إلى عدة عقود إلى الأيام الأولى من يونكس. وهي متاحة عالميا على جميع منصات يونكس ولينكس المشتقة. تعد قوائم التحكم في الوصول (ACLs) أكثر حداثة من حيث الأصل وتستخدم عالميًا على أنظمة الملفات التي تعتمد على مايكروسوفت ويندوز حيث يدعم نظام الملفات أذونات المستخدم (بشكل أساسي إن تي إف إس وآر إي أف إس)، وهو أيضًا شائعة الاستخدام ومتوفرة على نطاق واسع في معظم أنظمة يونكس ولينكس الشائعة، وإن لم يكن بالضرورة كل شيء. وهم قادرون بشكل عام على ضبط أذونات أكثر تفصيلاً من أذونات يونكس التقليدية، والسماح بنظام للتحكم في الوصول لا تستطيع قائمة التحكم بالوصول التقليدية توفيره. في الأنظمة المستندة إلى نظامي يونكس ولينكس، يكون النوع القياسي من قائمة التحكم في الوصول (ACL) هو المعرف بواسطة معيار بوزيكس ( قوائم POSIX ACLs ) ولكن هناك أشكال أخرى مثل NFS v3 و V4 ACLs ، والتي تعمل بشكل مختلف قليلاً ( NFSv3 ACLs أو NFSv4 ACLs).
في حالة توفر أنظمة متعددة داخل نفس نظام التشغيل، عادة ما تكون هناك طريقة لتحديد ما سيتم استخدامها لأي نظام ملفات معين، وكيف ينبغي للنظام التعامل مع محاولات الوصول إلى أو تعديل الأذونات التي تسيطر عليها واحدة من هذه، وذلك باستخدام الأوامر مصممة لآخر.

## لاختلافات بين أنظمة التشغيل

تحتوي الأنظمة المتوافقة مع يونكس أو غير ذلك من أنظمة بوزيكس بما في ذلك الأنظمة المستندة إلى لينكس وجميع إصدارات ماك أو إس، على نظام بسيط لإدارة أذونات الملفات الفردية، والتي تسمى في هذه المقالة «أذونات يونكس التقليدية». تدعم معظم هذه الأنظمة أيضًا نوعًا من قوائم التحكم في الوصول (ACL)، إما ملكية (ACLs HP-UX القديمة، على سبيل المثال)، أو POSIX.1e ACLs ، استنادًا إلى مسودة مبكرة من POSIX تم سحبها في عام 1997، أو قوائم ACLs نظام ملفات الشبكة، والتي هي جزء من معيار NFSv4.
لا تملك أذونات مايكروسوفت وأي بي أم دوس (بما في ذلك إم إس-دوس وآي بي إم دوس وويندوز 95 وويندوز 98 وويندوز 98 أس إي وويندوز ميلينيوم) أذونات. هناك سمة للقراءة فقط (R)، والتي يمكن تعيينها أو إلغاء تعيينها في ملف بواسطة أي مستخدم أو برنامج، وبالتالي لا تمنع أي شخص من تغيير / حذف الملف. لا يوجد إذونات في هذه الأنظمة يمنع المستخدم من قراءة الملف.

## ويندوز

نظم الدوس وويندوز 95، ويندوز 98، ويندوز ميلينيوم، لم يكن لديها الاذونات والتصاريح. فقط مجرد خصائص، هناك خاصية للقراءة فقط تاخذ رمز (R) التي تحدد أو تزيل التحديد عن ملف بواسطة أي مستخدم، وبالتالي لاتستطيع منع أحد من تغيير أو حذف الملف ليس هناك تصاريح تستطيع منع مستخدم من قراءة ملف لايملك حق الوصول إليه. لكن هذا الأمر بدأ بالتغير تدريجيا منذ إصدار ويندوز فيستا وما تلاه من إصدارات.

## أذونات يونكس التقليدية

تتم إدارة الأذونات على الأنظمة المشابهة ليونكس في ثلاثة نطاقات أو فئات مميزة. تُعرف هذه النطاقات باسم المستخدم والمجموعة وغيرها.
عندما يتم إنشاء ملف على نظام يشبه يونيكس، فإن أذوناته مقيدة من خلال قناع العملية التي أنشأتها.

## شبيه يونكس

التصاريح مهمة لمن يتعامل مع الأنظمة الشبيهة بيونكس سواء كان مستخدم عادى أو محترف أو مدير سيرفر، تعطيك الصلاحيات الحق في تشغيل برامج أو أوامر، تصفح المجلدات لقراءة محتوياتها أو التعديل أو تنفيذها، زمن الأمور التي تعطيها الصلاحيات لمدراء السيرفرات هو التحكم الكامل في صلاحيات كل فرد ومجموعة على السيرفر، من إعطاء الحق له إلى الوصول إلى ملف لقراءته أو التعديل عليه أو تنفيذه، ومن صلاحية هذا الفرد أو المجموعة من تنفيذ أمر شيء معين أو عدم تنفيذه.
عندما تقوم بإنشاء مستخدم يقوم النظام افتراضيا بإنشاء مجموعة (groups) تابعة لهذا المستخدم تلقائيا، واهمية هذا الأمر تكمن في إعطاء مجموعة معينة صلاحية معينة بدلا من إعطاء كل فرد الصلاحية وهذا يجعل مدير السيرفر يتحكم في عدة مجموعات بدلا من مئات الأفراد. والخلاصة أي ملف أو مجلد على النظام يكون مملوك من قِبل مستخدم معين، هذا المستخدم تندرج أسفله مجموعة تضم عدد معين من الأفراد لهم صلاحيات معينه على هذا الملف قد تكون صلاحيات كاملة كمثال قراءة الملف، التعديل عليه بحذف أو إضافة وأخيرا تنفيذ هذا الملف، أو قد تكون صلاحيات غير كاملة كمثال القراءة دون الحذف والتنفيذ، القراءة مع التنفيذ فقط وهكذا....
تقسم الصلاحيات على أي ملف أو مجلد بالنظام إلى ثلاثة أقسام :
الأولى: صلاحيات المستخدم نفسه مالك الملف (User permission) ويرمز له بالحرف u
الثانية: صلاحيات المجموعة التابعة لهذا المستخدم مالك الملف (مجموعة Permission) ويرمز له بالحرف g
الثالثة: صلاحيات لأفراد آخرين قد يكون أو لا يكون لهم تعامل مباشر بالنظام (Everyone Else's Permisiion) ويرمز له بالحرف o
وتقسم الصلاحيات الموجودة على الملف أو المجلد إلى ثلاثة صلاحيات :
1- تصريح القراءة (read permission) ويرمز له بالحرف r
2- تصريح الكتابة (write permission) ويرمز له بالحرف w
3- تصريح التنفيذ (execute permission) ويرمز له بالحرف x

### الاستخدام

لمعرفة الصلاحيات الموجودة على الملف أو المجلد نستخدم الأمر ls ومعه الخيار l ليكون الأمر بالشكل التالي :
ls -l
أو نستخدم الأمر vdir
فيكون ناتج الأمر في الشل عند استعراض الملفات الموجودة على المسار الخاص /home/khaled ((المسار يختلف من جهاز إلى لاخر))
khaled@debian:~$ ls -l
-rw-r--r-- 1 khaled khaled 279199 Dec 11 02:52 CLU-Part2.pdf
-rw-r--r-- 1 khaled khaled 7872 Dec 11 01:24 deb.0403.gif -rw-r--r-- 1 khaled khaled 23680 Dec 11 01:25 deb.0404.gif
drwxr-xr-x 2 khaled khaled 4096 Dec 9 17:30 Documents
الآن لكي نفهم ماذا تعني هذه الرموز التي فوق ناخذ الناتج من اليسار إلى اليميين.
مثلا الرموز drwxr-xr-x يعني الحرف d ان نوع الملف هو مجلد اما إذا كان مكانها الرمز - أو dash يعني انه ملف أو اختصار لكلمة directory، الحرف r أو ناتج اختصار كلمة read، وتصريح الكتابة والذي يرمز إلى الحرف w أو ناتج اختصار كلمة write، وأخيرا تصريح التنفيذ والذي يرمز إلى الحرف x أو ناتج اختصار كلمة execute. اما الرمز - يعني ان هذا التصريح لايوجد على هذا الملف. بحيث أن كل ملف ياحذ ثلاثة تصاريح على التوالي وهي rwx (قراءة، كتابة، تنفيذ) اما عند وضع - مكان التصريح فان هذا التصريح غير معطي لها الفرد أو المجموعة، مثلا تعني r-x ان التصريح الكتابة w غير معطى لهذا المستخدم أو المجموعة باختصار لانه مكان تصريح الكتابة w وضع الرمز - وهذا يعني ان التصريح غير موجود.
وكما ترى في الكود السابق ان الرموز مكررة ثلاثة مرات rwxr-xr-x ان أو ثلاثة حروف (rwx) من 2-4 تعني صلاحية مالك الملف أو من قام بإنشاء الملف، اما الحروف الثلاثة من 5-7 هي تصريح المجموعة التي ينتمي إليها المستخدم مالك الملف، اما الحروف الثلاثة من 8-10 هي صلاحية باقي المستخدمين الموجودين على النظام على هذا الملف أو المجلد.وكما ذكرنا الحرف الأول d هو نوع الملف.
الآن بعد أن انتهينا من الصلاحية على الملف نعود ونرجع باقي الرموز وناخذ مثلا المجلد سطح المكتب
drwxr-xr-x 4 khaled khaled 4096 Dec 11 01:01 سطح المكتب
حيث الرقم 4 الذي بجانب drwxr-xr-x يعني شيئين:
1- إذا كان لملف فانه يعني عدد links هي مثل shortcut في ويندوز
2-إذا كان لمجلد فهو يوضح عدد المجلدات الفرعية لهذا الملجد وفي مثالنا هناك 4 مجلدات فرعية في المجلد سطح المكتب.
الاسم khaled من جهة اليسار يوضح المالك الأصلي للملف الاسم khaled الذي على يمين الاسم khaled يشير إلى المجموعة التي ينتمي إليها khaled لينكس يقوم بعمل مجموعة للمستخدم بشكل افتراضي وتكون بنفس اسم المستخدم افتراضيا وتستطيع تغييرها,
الرقم 4096 يوضح حجم الملف بالبت bytes
الأرقام Dec 11 01:01 تدل على التاريخ والساعة لاخر عملية تعديل تمت على الملف أو المجلد.
أولا : التصريح r أو read
* إذا كان الملف يحمل هذا التصريح مثلا لكل من المالك والمجموعة وأى شخص آخر، فيستطيعوا قراءة محتويات الملف، نسخ الملف، حذف الملف ولا يستطيعوا الكتابة إلى الملف إلا في حالة تملكهم لتصريح الكتابة w، كذلك لا يمكنهم تنفيذ الملف إلا في حالة تملكهم للتصريح x.
* إذا كان المجلد يحمل تصريح القراءة r فقط فيستطيع كل من يحمل هذا التصريح سرد محتويات المجلد باسخدام الأمر ls ولا يمكن نسخ من وإلى المجلد ولا يمكن الولوج إلى المجلد باستخدام الأمر cd، كما أنه لا يمكن عرض التصاريح الخاصة بالملفات داخل المجلد باستخدام الخيار l- مع الأمر ls تنبه !!.
ثانيا : التصريح w أو write
* إذا كان الملف يحمل تصريح الكتابة فتستطيع الكتابة إليه ولكن لا يمكن نسخ الملف أو قراءته أو نقله إلا إذا كنت تملك تصريح الكتابة r.
* إذا كان المجلد يحمل تصريح الكتابة فنستطيع الإضافة أو الحذف من المجلد ولا نستطيع الولوج إليه إلا إذا كنا نملك تصريح التنفيذ x ولا يمكن سرد محتوياته إلا إذا كنا نملك تصريح القراءة r.
ثالثا : التصريح x أو execute
* إذا كان الملف يحمل هذا التصريح فتستطيع تنفيذ الملف في حالة الملفات التي تكون بصيغة shell script على سبيل المثال، ولكن لا يمكن قراءة محتويات الملف إلا إذا كنت تملك تصريح القراءة، كذلك لا يمكنك تعديل محتويات الملف إلا إذا كنت تملك تصريح الكتابة w.
* إذا كان المجلد يحمل هذا التصريح فتستطيع الولوج إلى المجلد باستخدام الأمر cd دون عرض محتوياته إلا إذا كنت تملك معه التصريح r ولا يمكن إنشاء ملفات جديدة أو مجلدات فرعية إلا إذا كنت تملك تصريح الكتابة w.
الملفات والدلائل مملوكة للمستخدم. يحدد المالك فئة مستخدم الملف. تنطبق أذونات مميزة على المالك.
يتم تعيين مجموعة من الملفات والمجلدات، والتي تحدد فئة مجموعة الملف. يتم تطبيق أذونات مميزة على أعضاء مجموعة الملف. قد يكون المالك عضوًا في مجموعة الملف.
المستخدمين الذين ليسوا المالكين، ولا عضوًا في المجموعة، يشتملون على فئة ملف أخرى. تنطبق أذونات مميزة على الآخرين.
يتم تحديد الأذونات الفعالة بناءً على الدرجة الأولى التي يندرج ضمنها المستخدم حسب ترتيب المستخدم، ثم المجموعة، ثم الآخرين. على سبيل المثال، سيكون للمستخدم الذي هو صاحب الملف الأذونات الممنوحة لفئة المستخدم بغض النظر عن الأذونات المعينة لفئة المجموعة أو فئة الآخرين.

### أذونات

تطبق الأنظمة المشابهة لنظام يونيكس ثلاثة أذونات محددة تنطبق على كل فئة:
* يمنح إذن القراءة القدرة على قراءة الملف. عند التعيين للدليل، يمنح هذا الإذن القدرة على قراءة أسماء الملفات الموجودة في الدليل، ولكن ليس لمعرفة أي معلومات إضافية عنها مثل المحتويات ونوع الملف والحجم والملكية والأذونات.
* يمنح إذن الكتابة القدرة على تعديل الملف. عند التعيين للدليل، يمنح هذا الإذن القدرة على تعديل الإدخالات في الدليل، والتي تتضمن إنشاء ملفات وحذف الملفات وإعادة تسمية الملفات. لاحظ أن هذا يتطلب أن يتم تنفيذ أيضًا؛ بدونها، إذن الكتابة لا معنى له للأدلة.
* يمنح إذن التنفيذ القدرة على تنفيذ ملف. يجب تعيين هذا الإذن للبرامج القابلة للتنفيذ، للسماح لنظام التشغيل بتشغيلها. عند التعيين للدليل، يتم تفسير إذن التنفيذ على أنه إذن البحث: فهو يمنح القدرة على الوصول إلى محتويات الملف والمعلومات الوصفية إذا كان اسمه معروفًا، ولكن ليس سرد الملفات داخل الدليل، ما لم يتم تعيين القراءة أيضًا.
تأثير تعيين الأذونات على دليل، بدلاً من ملف، هو «إحدى مشكلات أذونات الملفات التي يساء فهمها بشكل متكرر».
عندما لا يتم تعيين إذن، يتم رفض الحقوق المقابلة. بخلاف الأنظمة المستندة إلى ACL، لا يتم توريث الأذونات على الأنظمة المشابهة ليونكس. لا تحتوي الملفات التي تم إنشاؤها داخل الدليل بالضرورة على نفس أذونات هذا الدليل.

## تدوين أذونات يونيكس التقليدية
### تدوين رمزي

يتم تمثيل أذونات يونكس إما بترميز رمزي أو بترميز ثماني.
النموذج الأكثر شيوعًا، كما هو مستخدم بواسطة الأمر ls -l، هو تدوين رمزي .
ثلاثة إذن ثلاثة :
| ثالوث أول | ما يمكن للمالك القيام به |
| ثالوث ثاني | ما يمكن لأعضاء المجموعة القيام به |
| ثالوث ثالث | ما يمكن للمستخدمين الآخرين القيام به |
| كل ثالوث ||
| السمة الأولى | r : قابل للقراءة |
| السمة الثانية | w : قابل للكتابة |
| السمة الثالثة | x : قابل للتنفيذ s أو t : setuid / setgid أو مثبت (قابل للتنفيذ أيضًا) S أو T setuid / setgid أو مثبت (غير قابل للتنفيذ) |
يشير الحرف الأول ls إلى نوع الملف ولا يرتبط بالأذونات. الأحرف التسعة المتبقية موجودة في ثلاث مجموعات، يمثل كل منها فئة من الأذونات من ثلاثة أحرف. المجموعة الأولى تمثل فئة المستخدم. المجموعة الثانية تمثل فئة المجموعة. المجموعة الثالثة تمثل فئة الآخرين.
يمثل كل من الأحرف الثلاثة أذونات القراءة والكتابة وتنفيذها:
* r إذا سمحت القراءة، - إذا لم يكن كذلك.
* w إذا سمحت الكتابة، - إذا لم يكن كذلك.
* x إذا سمح التنفيذ، - إذا لم يكن كذلك.
فيما يلي بعض الأمثلة للرموز الرمزية:
* -rwxr-xr-x : ملف عادي له فئة المستخدم أذونات كاملة للقراءة والتنفيذ فقط.
* crw-rw-r-- : ملف خاص يمتلك فئات المستخدمين والمجموعات أذونات القراءة والكتابة ولديهم فئة للقراءة فقط.
* dr-x------ : دليل له فئة مستخدم لديه أذونات للقراءة والتنفيذ ولا توجد لديه أذونات للمجموعة والفئات الأخرى.
في بعض أنظمة الأذونات، تمثل الرموز الإضافية في شاشة ls -l ميزات إذن إضافية:
* تشير اللاحقة + (plus) إلى قائمة التحكم في الوصول التي يمكنها التحكم في أذونات إضافية.
* . (نقطة) لاحقة تشير إلى وجود سياق سي لينكس. قد يتم سرد التفاصيل مع الأمر ls -Z.
* تشير اللاحقة @ إلى أن سمات الملفات الموسعة موجودة.

### تدوين رقمي

| تدوين رمزي | تدوين رقمي | الإنجليزية |
| ---------- | 0000 | لا أذونات |
| -rwx------ | 0700 | القراءة والكتابة والتنفيذ فقط للمالك |
| -rwxrwx--- | 0770 | القراءة والكتابة والتنفيذ للمالك والمجموعة |
| -rwxrwxrwx | 0777 | القراءة والكتابة والتنفيذ للمالك والمجموعة وغيرهم |
| ---x--x--x | 0111 | نفذ |
| --w--w--w- | 0222 | اكتب |
| --wx-wx-wx | 0333 | الكتابة والتنفيذ |
| -r--r--r-- | 0444 | اقرأ |
| -r-xr-xr-x | 0555 | قراءة وتنفيذ |
| -rw-rw-rw- | 0666 | قراءة وكتابة |
| -rwxr----- | 0740 | يمكن للمالك القراءة والكتابة والتنفيذ؛ المجموعة يمكن أن تقرأ فقط. الآخرين ليس لديهم أذونات |