Controlling File and Directory Permissions 5 - Programmer Tech
Bash_script

Controlling File and Directory Permissions 5

التحكم في صلاحيات الملفات

Controlling File and Directory Permissions

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

تتألف أذونات الملفات والمجلدات في Linux من ثلاثة مكونات رئيسية: owner (المالك)، group (المجموعة)، و others (الآخرين). لكل مكون، هناك ثلاثة أذونات رئيسية: read (قراءة)، write (كتابة)، و execute (تنفيذ).

  1. قراءة (read): السماح بقراءة الملف أو محتوى المجلد.
  2. كتابة (write): السماح بتعديل الملف أو إنشاء ملف جديد داخل المجلد.
  3. تنفيذ (execute): السماح بتنفيذ الملف (في حالة الملفات) أو الوصول إلى المجلد.

Granting Ownership to an Individual User

لنقل ملكية ملف إلى مستخدم آخر حتى تكون لديه القدرة للتحكم في الأذونات، يمكننا استخدام الأمر chown (أو تغيير المالك):

┌──(kali㉿kali)-[~]
└─$ sudo chown new_owner:group_name file_or_directory

مثال

الآن سوف تقوم بتغيير مالك ملف database.sql إلى المالك الجديد وهو المالك للمستخدم Kali. وسوف يتغير إلى المستخدم الجديد، وهو kaissar.

┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-rw-r--r-- 1 kali    kali    0 Dec 20 12:31 database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ sudo chown kaissar database.sql  
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-rw-r--r-- 1 kaissar kali    0 Dec 20 12:31 database.sql

Granting Ownership to a Group

منح الملكية لمجموعة في نظام Linux يمكن القيام بها باستخدام الأمر chgrp (Change Group). يتيح هذا الأمر تغيير مجموعة الملكية لملف أو مجلد بسهول,الصيغة الأساسية لأمر chgrp.

┌──(kali㉿kali)-[~]
└─$ sudo chgrp new_group example.txt

مثال 2

الان سنغير group التابع لملف database.sql الذي هو kali نغيره ألي wireshark group

┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql       
-rw-r--r-- 1 kaissar kali    0 Dec 20 12:31 database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ sudo chgrp wireshark database.sql 
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-rw-r--r-- 1 kaissar wireshark    0 Dec 20 12:31 database.sql

في نظام Linux، يمكنك التحقق من الأذونات (permissions) لملف أو مجلد باستخدام الأمر ls بشكل معين. تقوم الأذونات بتحديد ما إذا كان الملف قابلاً للقراءة(read)، الكتابة(write)، أو التنفيذ(execute)، وللمستخدم(owner)، والمجموعة(groups)، والآخرين(users).

┌──(kali㉿kali)-[~]
└─$ ls -l                    
total 52
1  2       3  4       5         6    7   8   9       10
drwxr-xr-x 2 kali    kali      4096 Dec 17 11:54 bash_script
drwxr-xr-x 4 kali    kali      4096 Nov 28 07:55 compat-wireless-2010-10-10
drwxr-xr-x 4 kaissar kali      4096 Sep  4 14:32 CVE-2023-34039
-rw-r--r-- 1 kaissar wireshark    0 Dec 20 12:31 database.sql
drwxr-xr-x 3 kali    kali      4096 Nov 28 07:52 Desktop
drwxr-xr-x 2 kali    kali      4096 Aug 10 18:35 Documents
drwxr-xr-x 2 kali    kali      4096 Dec 12 10:57 Downloads
drwxr-xr-x 2 kali    kali      4096 Dec 12 12:18 kaissar
drwxr-xr-x 2 kali    kali      4096 Aug 10 18:35 Music
drwxr-xr-x 2 kali    kali      4096 Aug 10 18:35 Pictures
drwxr-xr-x 2 kali    kali      4096 Aug 10 18:35 Public
drwxr-xr-x 6 root    root      4096 Nov 28 10:02 subfinder
drwxr-xr-x 2 kali    kali      4096 Aug 10 18:35 Templates
drwxr-xr-x 2 kali    kali      4096 Aug 10 18:35 Videos
  1.  نوع الملف ما اذا كان file او directory
  2. الأذونات الموجودة على الملف للمالك والمجموعات والمستخدمين
  3. عدد المحتوي الموجود داخل الملف ويشمل هذا الملف نفسه
  4. مالك الملف
  5. group الذي يقع بهي الملف
  6. حجم الملف بالبايت
  7. الشهر الذي تم انشاء بهي الملف
  8. اليوم في الشهر الذي تم انشاء بهي الملف
  9. الساعة التي تم انشاء بهي الملف
  10. اسم الملف اذا كان file او directory

دعونا نركز علي القسم الأول و الثاني من الملف الان سنقوم بتقسيمهم ألى اربع اجزاء.

┌──(kali㉿kali)-[~]
└─$ ls -l 
drwxr-xr-x 2 kali    kali      4096 Dec 17 11:54 bash_script
-rw-r--r-- 1 kaissar wireshark    0 Dec 20 12:31 database.sql

1  2   3   4
d rwx r-x r-x

1- كما قلنا من قبل فهو يشير إلى نوع الملف سواء كان file أو directory، وحرف (d) يعني أن الملف من نوع directory، أما إذا كان file فيبدأ با الشرطة (-)، وهذا يعني أن الملف من نوع file، بغض النظر عن نوع string الموجودة بداخله.

2- صلاحيات مالك الملف ما اذا كان يمكن القراءة والكتابة و تنفيذ الملف او لا وكما في المثال السابق ان المستخدم kaissar الذي هو مالك ملف database.sql ويمكن القراءة و الكتابة علي الملف لكن ليس لديه صلاحيات تنفيذ الملف بعكس المستخدم kali الذي مالك directory bash_script ويمكنه القراءة والكتابة والتنفيذ وهذا الذي يشيرا ليه الصلاحيات ألأوله.

3- صلاحيات الجروب الذي يقع به الملف يعني ان أي مستخدم موجود ضمن هذا الجروب يملك نفس الصلاحيات لكن نركز هنا أن صلاحيات المستخدمين الموجودين في الجروب علي ملف database.sql لديهم فقط قراءة علي الملف ولا يمكنهم الكتابة و تنفيذ الملف –r بعكس المستخدمين الموجودين في الجروب علي directory bash_script القراءة  وتنفيذ الملف لكن لا يمكنهم الكتابة.

4- الاخرين وهذا يعني اي مستخدم موجود علي النظام ما هي صلاحيتها علي هذا الملف علي ملف database.sql لا يوجد لديهم صلاحيات غير القراءة فقط لكن علي directory bash_script يمكنهم القراءة و تنفيذ الملف.

في linux يوجد tool تمكنك من تغيير صلاحيات الملفات للمالك و الجروب وايضآ المستخدمين وهي chmod tool لكن لا يمكن لاحد تغيير صلاحيات الملف غير المستخدم المالك للملف او مستخدم root. هناك طريقتين لتغيير صلاحيات الملفات عن طريق chmod وهم التمثيل العددي (Numerical representation) و التمثيل الرمزي (Symbolic representation).

Numerical representation

يتمثل Numerical representation بين ألأرقام من 0 الي 7 حيث ان 0 ان المستخدم لا يوجد لديه صلاحيات وان 7 المستخدم يمتلك جميع الصلاحيات من القراءة و الكتابة و التنفيذ دعونا نلقي مثال بسيط الان نريد إعطاء جميع الصلاحيات لكل من مالك الملف و الجروب و المستخدمين الاخرين علي file database.sql.

┌──(kali㉿kali)-[~]
└─$ ls -l | grep  database.sql
-rw-r--r-- 1 kaissar wireshark    0 Dec 20 12:31 database.sql
┌──(kali㉿kali)-[~]
└─$ sudo chmod 777 database.sql
[sudo] password for kali: 
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep  database.sql
-rwxrwxrwx 1 kaissar wireshark    0 Dec 20 12:31 database.sql

لاحظ معي كيف تغيرة الصلاحيات اي ان اول رقم وهو الرقم 7 وكان المقصود اعطاء جميع الصلاحيات لمالك الملف و الرقم الثاني الذي هو 7 ايضآ اعطاء جميع الصلاحيات للمستخدمين الموجدين في الجروب و الرقم الثالث الذي هو 7 ايضآ اعطاء جميع الصلاحيات لاي مستخدم موجود علي النظام وتم استخدام صلاحيات root عن تعديل صلاحيات الملف لانني ليس مالك الملف طيب ماذا بعد ذلك ما هي الارقام بين 0 و 7 وما نوع الصلاحيات التي تفرضها علي الملف تابع معي.

هذا جدول بسيط يعطيك خلفية عن الموضوع اكبر قبل الشرح بتفصيل

 rwx Octal Binary
 — 0 000
 x– 1 001
-w-2010
 wx- 3 011
 –r 4 100
 r-x 5 101
-rw 6 110
 rwx 7 111

مثال 1

┌──(kali㉿kali)-[~]
└─$ sudo chmod 142 database.sql
[sudo] password for kali: 
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep  database.sql
---xr---w- 1 kaissar wireshark    0 Dec 20 12:31 database.sql

في هذا المثال قمنا بعطاء صلاحيات التنفيذ فقط للمالك و القراءة للمستخدمين المجودين في الجروب و الكتابة لا اي مستخدم علي النظام وذلك عن طريق اتباع الجدول السابق.

مثال 2

┌──(kali㉿kali)-[~]
└─$ sudo chmod 724 database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep  database.sql
-rwx-w-r-- 1 kaissar wireshark    0 Dec 20 12:31 database.sql

في هذا المثال قمنا بعطاء جميع الصلاحيات للمالك الملف من حيث القراءة و الكتابة و التنفيذ فقط هذا الصلاحيات لمالك الملف لكن للجروب كمنا فقط بعطاء صلاحيات الكتابة و للاخرين صلاحيات القراءة.

مثال 3

┌──(kali㉿kali)-[~]
└─$ sudo chmod 764 database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep  database.sql 
-rwxrw-r-- 1 kaissar wireshark    0 Dec 20 12:31 database.sql

في هذا المثال قمنا بعطاء جميع الصلاحيات لمالك الملف و الكتابة و القراءة للجروب و القراءة فقط للمستخدمين الآخرين.

أظن أن المعلومة وصلت اليك الآن كيف يمكن اعطاء صلاحيات معينة لكل من مالك الملف و الجروب و الآخرين علي النظام عن طريق Numerical representation و هي الطريقة الأسهل من وجهة نظري.

Symbolic representation

Controlling File and Directory Permissions

شرح الصورة 

باختصار شديد عند اعطاء اي صلاحيات للملف عن الطريق  التمثيل الرمزي (Symbolic representation) استخدام (u) لعطاء صلاحيات للمالك او الحرف (g) لعطاء صلاحيات للجروب او حرف (o) لعطاء صلاحيات للاخرين علي النظام نوع الصلاحيات يمكن اختصارة عن طريق (r) للقراءة او (w) للكتابة او (x) لتفيذ مع الاضافة (=) اذا كنت اريد إعادة تهيئة الصلاحيات  او (+) للاضافة علي صلاحيات الملف او () لمسح صلاحيات معينة من الملف.

مثال 1

┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-rwxrwxrwx 1 kaissar wireshark    0 Dec 20 12:31 database.sql
┌──(kali㉿kali)-[~]
└─$ sudo chmod u=x,g=r,o=w database.sql 
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
---xr---w- 1 kaissar wireshark    0 Dec 20 12:31 database.sql

في هذا المثال قمنا بعطاء صلاحيات التنفيذ لمالك الملف و القراءة للجروب و الكتابة للاخرين باستخدمة طريقة Symbolic representation وهنا تم استخدام (=) وهذا يعني اعادة تهيئة الصلاحيات لان = تقوم بعمل overwrite علي جميع الصلاحيات.

مثال 2

┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
---xr---w- 1 kaissar wireshark    0 Dec 20 12:31 database.sql
┌──(kali㉿kali)-[~]
└─$ sudo chmod a=rwx database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-rwxrwxrwx 1 kaissar wireshark    0 Dec 20 12:31 database.sql

في هذا المثال قمنا بعطاء جميع الصلاحيات لكل من المالك و الجروب و الاخرين باستخدام option (a) و المقصود ب a تحديد صلاحيات معينة للكل و في هذا المثال تم منح الجميع جميع الصلاحيات عن طريق اضافة r للقراءة w للكتابة و x لتنفيذ ويمكنك ايضآ اعطاء الصلاحيات بهذا الشكل.

┌──(kali㉿kali)-[~]
└─$ sudo chmod ugo=rwx database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-rwxrwxrwx 1 kaissar wireshark    0 Dec 20 12:31 database.sql

هي طريقة مختصرة بدل الكتابة بهذا الشكل 

┌──(kali㉿kali)-[~]└─$ sudo chmod u=rwx,g=rwx,o=rwx database.sql 

مثال 3

┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
---xr---w- 1 kaissar wireshark    0 Dec 20 12:31 database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ sudo chmod u+rw database.sql 
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-rwxr---w- 1 kaissar wireshark    0 Dec 20 12:31 database.sql

في هذا المثال تم الاضافة علي صلاحيات المالك وهذا المقصود ب + تقوم بعمل اضافة علي الصلاحيات الموجودة بلفعل (means add) المالك هنا كان لدية صلاحيات النفيذ فقط وتم اعطاءة صلاحيات اضافة مثل القراءة و الكتابة.

lمثال 4

┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-rwxr---w- 1 kaissar wireshark    0 Dec 20 12:31 database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ sudo chmod u-xw database.sql
                                                                                                                                                                               
┌──(kali㉿kali)-[~]
└─$ ls -l | grep database.sql
-r--r---w- 1 kaissar wireshark    0 Dec 20 12:31 database.sql

في هذا المثال تم حذف بعض الصلاحيات عن المالك ويمكنك تنفيذ هذا عن طريق () التي تعني means remove تم حذف هنا بعض الصلاحيات مثل التنفيذ و الكتابة ولا يوجد لدية اي صلاحيات في الوقت الحالي غير القراءة فقط هذا التكنيك يمكنك تنفيذه علي كل من الجروب و الاخرين.

و في النهاية اتمني اكون قدر اوصل المعلومة بشكل جيد وسيعمل الفريق علي توفير شرح عملي في الايام القادمة لا تنسي تعليقك علي المقال.

Ahmedkaissar

من مصر من محافظة الجيزة مبرمج ويب و خبير أمن معلومات محب للتقنية و الأمن المعلوماتي مدرب للغات "Python,html, css, php, js, laravel"
زر الذهاب إلى الأعلى