SSD Nodes Learn Hosting plans →
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-10-21

شرح drwxr-xr-x وصلاحيات Linux وتحويلها إلى 755

افهم drwxr-xr-x حرفاً حرفاً وحوّله إلى 755، وتعرّف إلى معنى x في الدليل كصلاحية عبور، ولماذا لا يكون chmod 777 حلاً صحيحاً.

ما الذي يعنيه drwxr-xr-x

يصف drwxr-xr-x دليلاً يمكن لمالكه تعديله، ويمكن لكل مستخدم آخر قراءته والعبور إليه دون إجراء أي تغيير. تكون هذه الصلاحيات 755 بالنظام الثماني. يطبع Linux هذه الأحرف العشرة في بداية كل سطر من مخرجات ls -l، وهي تعني دائماً الشيء نفسه بالترتيب نفسه. لذلك، فإن تعلّم هذه السلسلة يعلّمك كيفية قراءة جميع السلاسل المشابهة.

توجد قاعدة تسبق بقية القواعد، لأنها تحدد ما إذا كانت اختباراتك الفعلية ستوضح سلوك الصلاحيات. يتجاهل المستخدم root بتات الصلاحيات. تمنح النواة root إمكانية CAP_DAC_OVERRIDE ‏(تجاوز التحكم الإلزامي بالوصول)، لذلك يستطيع root فتح الملفات حتى عندما تمنعه الصلاحيات المحددة في وضعها. ينجح كل مثال في هذه الصفحة عند تشغيله بواسطة root، مهما كانت قيمة البتات. سجّل الدخول كمستخدم عادي عندما تريد مراقبة تطبيق هذه القواعد.

الأحرف العشرة، حرفاً في كل مرة

أنشئ دليلاً وملفاً لفحصهما. لا يلمس أي شيء هنا ما يقع خارج الدليل الجديد.

mkdir -p ~/permdemo/inner
printf 'hello\n' > ~/permdemo/inner/notes.txt
ls -ld ~/permdemo ~/permdemo/inner ~/permdemo/inner/notes.txt

باستخدام umask الافتراضي الشائع 022، يبدأ سطرا الدليل بالحرف drwxr-xr-x، ويبدأ سطر الملف بالحرف -rw-r--r--.

الحرف 1 هو نوع الملف، وليس صلاحية. يشير d إلى دليل. ويشير - إلى ملف عادي. ويشير l إلى رابط رمزي. ويشير c وb إلى عقدتي جهاز حرفي وجهاز كتلي. ويشير s إلى مقبس، بينما يشير p إلى pipe مسمّى. ويقع هذا الحرف خارج القيمة الثمانية، ولذلك تصبح drwxr-xr-x القيمة 755 بدلاً من أن تبدأ بـd.

الأحرف التسعة التي تليه تتكون من ثلاث مجموعات، كل مجموعة من ثلاثة أحرف، ولا يتغير ترتيبها.

  • الأحرف من 2 إلى 4 هي ثلاثية المالك، أي البتات التي تنطبق على المستخدم الذي يملك الملف.
  • الأحرف من 5 إلى 7 هي ثلاثية المجموعة، أي البتات التي تنطبق على مجموعة الملف.
  • الأحرف من 8 إلى 10 هي ثلاثية الآخرين، أي البتات التي تنطبق على جميع المستخدمين الآخرين.

داخل كل ثلاثية، تكون الخانات دائماً بالترتيب r ثم w ثم x، وتشير الشرطة إلى أن البت معطّل. ولا يتغير موضع الأحرف. تُقرأ r-x من دون كتابة. أما -w- فتعني الكتابة من دون القراءة، وهذا مسموح لكنه نادر.

لذلك تُقسَّم drwxr-xr-x كما يلي: d للدليل، ثم rwx للمالك، ثم r-x للمجموعة، ثم r-x للآخرين.

تطبع بعض الأنظمة حرفاً حادي عشر. تعني النقطة الختامية drwxr-xr-x. أن الملف يحمل سياق SELinux (security enhanced Linux)، وتطبع توزيعات SELinux مثل Fedora وRocky هذا السياق افتراضياً. وتعني علامة الجمع الختامية drwxr-xr-x+ أن الملف يحمل POSIX ACL (access control list)، أي مجموعة إضافية من القواعد تتجاوز هذه البتات التسع. اقرأ هذه القواعد الإضافية باستخدام getfacl <path>.

تؤدي الأذونات r وw وx وظائف مختلفة على الدليل

هذه أول قاعدة يخطئ فيها المبتدئون. الحروف نفسها في الملف والدليل، لكن الصلاحيات التي تمنحها مختلفة.

  • تمنح r على الملف إمكانية قراءة محتواه. أما r على الدليل فتتيح سرد الأسماء الموجودة فيه، وهذا ما يحتاج إليه ls العادي.
  • تمنح w على الملف إمكانية تغيير محتواه. أما w على الدليل فتتيح إضافة المدخلات إليه وإزالتها. حذف ملف هو تغيير في الدليل، لذلك فإن صلاحية الكتابة على الدليل هي التي تحدد إمكانية الحذف، ولا تؤثر صلاحيات الملف نفسه في ذلك.
  • تمنح x على الملف إمكانية تشغيله كبرنامج. أما x على الدليل فتتيح اجتيازه، أي إن النواة تستطيع حل اسم واحد داخله أثناء البحث عن المسار.

اجتياز الدليل هو الجزء الذي يفاجئ المستخدمين. لا تنفّذ x على الدليل أي شيء. يتطلب فتح /srv/site/index.html وجود x على /، ثم x على /srv، ثم x على /srv/site، وأخيراً r على الملف. إذا كان أحد الأدلة في هذه السلسلة يفتقد x بالنسبة إليك، يتوقف البحث عنده، ويُبلَّغ المستدعي بالخطأ Permission denied للمسار بأكمله، حتى عندما يكون الملف في نهايته مقروءاً للجميع. يطبع namei -l /srv/site/index.html كل خطوة في السلسلة مع نمط الصلاحيات والمالك، بحيث يمكنك معرفة الرابط الذي يوقف البحث.

يمثل الدليل الذي يملك r ولا يملك x حالة نصفية غير معتادة، ومن المفيد التعرّف إليها. يستطيع المستخدم العادي سرد الأسماء، لأن السرد هو ما تمنحه r، لكنه لا يستطيع تنفيذ stat على أي مدخل. لذلك يملأ ls -l أعمدة الحجم ونمط الصلاحيات بعلامات استفهام، ويطبع ls: cannot access ...: Permission denied لكل مدخل.

تحويل الأحرف إلى 755

كل ثلاثية هي رقم مكوّن من 3 بتات. r تساوي 4، وw تساوي 2، وx تساوي 1. اجمع قيم البتات المفعّلة.

  • rwx تساوي 4 + 2 + 1 = 7
  • rw- تساوي 4 + 2 = 6
  • r-x تساوي 4 + 1 = 5
  • r-- تساوي 4
  • --- تساوي 0

لذلك تساوي drwxr-xr-x القيمة 7 للمالك، و5 للمجموعة، و5 للآخرين: 755. وتساوي -rw-r--r-- القيم 6 و4 و4: 644. أما drwxrwxr-x فتساوي 7 و7 و5: 775، وهي 755 مع إضافة صلاحية الكتابة إلى المجموعة. لا تحتاج إلى عدّ الأحرف يدوياً، لأن stat تطبع الشكلين معاً.

stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt

%A هو الشكل الحرفي، و%a هو النظام الثماني، بينما يحدّد %U و%G المستخدم المالك والمجموعة المالكة.

سلاسل الصلاحيات التي يبحث عنها المستخدمون

هذه هي الأنماط التي ستصادفها على خادم فعلي، مع القيمة الثمانية الموضع والمواضع التي يظهر فيها كل نمط.

  • -rw-r--r-- قيمته 644. ملفات عادية لا تقرؤها الخدمة إلا، مثل ملف إعداد أو صفحة HTML.
  • -rw------- قيمته 600. الأسرار، مثل مفتاح SSH الخاص أو ملف .env الخاص بتطبيق.
  • -rw-rw-r-- قيمته 664. ملف داخل مجلد مشترك مع مجموعة، حيث يحتاج أعضاء الفريق إلى صلاحية الكتابة.
  • -rwxr-xr-x قيمته 755. البرامج النصية والملفات الثنائية، مثل /usr/local/bin/backup.sh ومعظم ملفات /usr/bin.
  • -rwx------ قيمته 700. برنامج نصي خاص لا يستطيع تشغيله إلا مالكه.
  • drwxr-xr-x قيمته 755. معظم مجلدات النظام، وجذر المستندات لموقع ويب.
  • drwx------ قيمته 700. ~/.ssh، والمجلدات المنزلية على خادم مقيّد الصلاحيات.
  • drwxrwxr-x قيمته 775. مجلد تستطيع مجموعة المالك الكتابة فيه.
  • drwxrwsr-x قيمته 2775. النمط نفسه، مع بت setgid، بحيث ترث الملفات الجديدة داخله مجموعة المجلد.
  • drwxrwxrwt قيمته 1777. /tmp. يشير t الأخير إلى بت sticky، بحيث لا يستطيع المستخدم حذف إلا ملفاته الخاصة.
  • -rwsr-xr-x قيمته 4755. ملف ثنائي يستخدم setuid ويعمل بصلاحيات مالكه، مثل /usr/bin/passwd و/usr/bin/sudo.
  • -rw-rw-rw- قيمته 666، وdrwxrwxrwx قيمته 777. قابل للكتابة من الجميع، وهذا يكاد يكون دائماً خطأ على الخادم.
  • lrwxrwxrwx هو ما يعرضه كل رابط رمزي. يتجاهل Linux بتات النمط في الرابط ويفحص الهدف بدلاً منها، لذلك لا تحمل هذه السلسلة أي معنى على الإطلاق.

أي ثلاثية تنطبق عليك

هذه هي القاعدة الثانية التي يخطئ فيها المبتدئون. يختار النواة (kernel) ثلاثية واحدة فقط ويتوقف عندها.

إذا تطرّق مُعرّف المستخدم الخاص بك (user ID) إلى مالك الملف، فستحصل على ثلاثية المالك، ولا يتم النظر في بتات المجموعة أو الآخرين. بخلاف ذلك، إذا كانت مجموعة الملف هي إحدى مجموعاتك، فستحصل على ثلاثية المجموعة. وإلا فستحصل على ثلاثية الآخرين.

ينتج عن ذلك أمران. تنطبق ثلاثية المالك حتى عندما تكون هي الأكثر تقييداً. الملف الذي يحمل النمط 0466، والذي يُعرض كـ -r--rw-rw-، يمنح مالكه حق القراءة فقط بينما يمكن للآخرين الكتابة، لأن فحص المالك تطابق أولاً ولم تُقرأ أي بتات بعدها. هذا قانوني، وهو يربك الجميع في المرة الأولى التي يواجهونه فيها.

يتم اختيار ثلاثية المجموعة بناءً على مجموعة الملف، وليس بناءً على قائمة المجموعات التي تنتمي إليها. تعرض ls -l اسمين في كل سطر: المالك، ثم المجموعة. تلك المجموعة الثانية فقط هي التي لها أي سلطة على ذلك الملف. الانتماء إلى عشرين مجموعة لا يفيدك إلا إذا كان الملف يحمل إحداها.

id
stat -c '%U %G %A %n' ~/permdemo/inner/notes.txt

تعرض id المستخدم الخاص بك وكل مجموعة تنتمي إليها. تعرض stat مالك الملف ومجموعته. قارن بينهما وستعرف أي ثلاثية سيستخدمها النواة (kernel) من أجلك.

لهذا السبب عادة ما يتم تعيين مجموعة وبت setgid للمجلد المشترك. تُعرض sudo chmod 2775 /srv/shared كـ drwxrwsr-x، وتكتسب الملفات التي يتم إنشاؤها بالداخل مجموعة المجلد بدلاً من المجموعة الشخصية للمنشئ، بينما تحصل المجلدات الفرعية الجديدة على بت setgid أيضاً. يقوم setgid بتعيين المجموعة، وليس النمط. مع umask افتراضي بقيمة 022، يظل الملف الجديد الذي يتم إنشاؤه بالداخل بوضع 644، لذا يمكن لزملاء العمل قراءته ولكن لا يمكنهم الكتابة فيه. تتطلب الكتابة من قبل المجموعة umask بقيمة 002 لكل من يعمل هناك، أو قائمة تحكم في الوصول (ACL) افتراضية على المجلد، والتي تحل محل umask للملفات التي يتم إنشاؤها بداخله. منح كل خدمة حسابها الخاص هو النصف الآخر من هذه القصة، وهو مغطى في مستخدم Linux واحد لكل خدمة على خادم VPS.

يحدد umask نمط كل ملف جديد

لا يأخذ الملف الجديد نمطه منك، بل يأخذه من البرنامج الذي أنشأه، مطروحاً منه البتات التي يزيلها umask الخاص بك. الـ umask هو قناع للبتات المراد إزالتها، لذا فإن قيمة umask الأكبر تنتج ملفات أكثر خصوصية.

تأتي معظم التوزيعات بقيمة 022. عادةً ما يطلب البرنامج الذي ينشئ ملفاً عادياً النمط 0666، بينما يطلب البرنامج الذي ينشئ دليلاً النمط 0777. يقوم umask بإزالة 022 من كلا الطلبين، فتحصل على 644 للملفات و755 للأدلة. هذا هو الزوج الذي تراه بالضبط في كل مكان على خادم VPS جديد.

umask
umask -S
touch ~/permdemo/new.txt && mkdir -p ~/permdemo/newdir
ls -ld ~/permdemo/new.txt ~/permdemo/newdir

يطبع umask -S القيمة نفسها كأحرف، وهي أسهل في القراءة من 0022. اضبط umask 027 في ~/.profile للحصول على إعداد افتراضي أكثر صرامة: 640 للملفات و750 للأدلة، بحيث يمكن لمجموعتك قراءة عملك ولا يمكن لأي شخص آخر ذلك. تفترض هذه النتائج طلبات 0666 و0777 المعتادة.

هناك حدان مهمان. يمكن لـ umask إزالة البتات فقط، ولا يمكنه إضافتها أبداً. الملف المطلوب بالنمط 0666، وهو ما يطلبه touch، لا يصبح قابلاً للتنفيذ مهما كانت القيمة التي تضبطها، والبرنامج الذي يطلب وصولاً للمالك فقط يحتفظ به: ينشئ mktemp ملفات بالنمط 600 وأدلة بالنمط 700 تحت umask بقيمة 022 أو 027 على حد سواء. كما أن خدمة systemd لا تقرأ ملف تعريف الصدفة (shell profile) الخاص بك أبداً، لذا اضبط القيمة في ملف الوحدة (unit file) بدلاً من ذلك.

[Service]
UMask=0027

توجد حالة واحدة تتجاوز umask تماماً. عندما يحتوي الدليل الأب على ACL افتراضي، يتم تجاهل umask وتأتي بتات صلاحيات الملف الجديد من الـ ACL الموروث بدلاً من ذلك.

لماذا تكون ملفات الويب 644 والمجلدات 755

يعمل خادم الويب تحت حساب خاص به، وهو www-data في Debian و Ubuntu، وnginx في Rocky و Alma. تحتاج هذه العملية إلى صلاحية القراءة للملفات التي تقدمها، وصلاحية التنقل (traverse) عبر المجلدات التي تحتويها. لا يوجد سبب يبرر منحها صلاحية الكتابة، ولا ينبغي للموقع الساكن السماح بذلك أبداً.

يمنح النمط 644 للملف صلاحية الكتابة للمالك والقراءة للجميع، مما يسمح لمستخدم النشر برفع الملفات ولمستخدم خادم الويب بتقديمها. يمنح النمط 755 للمجلد صلاحية الكتابة للمالك والتنقل للجميع، مما يسمح لمستخدم خادم الويب بعبور المسار دون القدرة على إضافة أو حذف أي شيء. بالتالي، لا يمكن لأي ثغرة في التطبيق إعادة كتابة الصفحات التي يقدمها.

تظهر قاعدة التنقل هنا بوضوح. إذا كان الموقع موجوداً في /home/deploy/site، وكان /home/deploy بوضع 750، ولم يكن مستخدم خادم الويب عضواً في مجموعة المجلد، فلن يتمكن مستخدم خادم الويب من دخول المجلد الرئيسي إطلاقاً، وينتهي الطلب بخطأ HTTP 403 مع سطر مشابه لهذا في /var/log/nginx/error.log:

open() "/home/deploy/site/index.html" failed (13: Permission denied), client: 203.0.113.5

الرقم 13 هو EACCES، وهو رمز رفض الصلاحيات من النواة. لا توجد مشكلة في الشبكة: المنفذ في حالة استماع والطلب وصل بالفعل، وهذا ما يجعل هذا الخطأ مربكاً أثناء تعلمك كيفية عمل منافذ الاستماع في Linux. نفّذ namei -l /home/deploy/site/index.html واقرأ السلسلة للأسفل لتحديد أول مجلد يفتقر إلى صلاحية x للآخرين (other).

المجلد الذي يكتب فيه التطبيق، مثل مسار رفع الملفات، هو الاستثناء. امنح الصلاحية عبر تغيير الملكية بدلاً من توسيع النمط: استخدم sudo chown -R www-data:www-data /srv/site/uploads واترك النمط 755. احتفظ بصلاحية الكتابة فقط للمجلد الذي يحتاجها.

chmod من دون تسوية الشجرة بأكملها

chmod له شكلان. يضبط النمط الثماني كل البتات التسع دفعة واحدة: chmod 644 notes.txt. يغيّر النمط الرمزي ما تحدده فقط ويترك الباقي كما هو: chmod u+x deploy.sh يضيف التنفيذ إلى المالك، وchmod go-w notes.txt يزيل الكتابة من المجموعة والآخرين.

التكرار هو الموضع الذي تتعرض فيه الأشجار للتلف. يجعل chmod -R 755 . كل صورة وكل ملف إعداد قابلاً للتنفيذ، لأن chmod لا يستطيع التمييز بين script وJPEG. استخدم الحرف الكبير X بدلاً من ذلك.

chmod -R u=rwX,go=rX ~/permdemo
stat -c '%a %n' ~/permdemo ~/permdemo/inner/notes.txt

يطبّق X الكبير التنفيذ على المجلدات، وعلى الملفات التي كان لديها بت تنفيذ في أي موضع. تصبح المجلدات 755، وتصبح الملفات العادية 644، وتبقى scripts التي كانت قابلة للتنفيذ كذلك. عندما يكون لأحد الملفات نمط تثق به، ينسخه chmod --reference=good.sh other.sh إلى الملفات الأخرى.

الرسائل التي تظهر عند وجود خطأ في بتات الصلاحيات

bash: ./deploy.sh: Permission denied تعني أن البرنامج النصي لا يملك بت x في ثلاثية الصلاحيات التي تنطبق عليك، أو أن أحد المجلدات في مساره يفتقر إلى بت x. الأمر chmod u+x deploy.sh يعالج الحالة الأولى.

bash: ./deploy.sh: cannot execute: required file not found هو خطأ مختلف ذو اسم مربك. بت x سليم، لكن المفسر (interpreter) المذكور في السطر الأول مفقود. السبب المعتاد هو استخدام نهايات أسطر بنمط Windows، مما يجعل النواة تبحث عن مفسر باسم /bin/bash\r. أصلح ذلك باستخدام sed -i 's/\r$//' deploy.sh.

Permissions 0644 for '/home/deploy/.ssh/id_ed25519' are too open. يظهر من عميل SSH، الذي يرفض استخدام مفتاح خاص يمكن للحسابات الأخرى قراءته. يجب أن تكون صلاحية المفتاح 600 وصلاحية المجلد ~/.ssh هي 700. تجد تفاصيل التعامل مع المفاتيح في إدارة مفاتيح SSH وصلاحيات ملفاتها.

Authentication refused: bad ownership or modes for directory /home/deploy/.ssh يظهر في سجل الخادم (journal) عندما يكون المجلد الرئيسي للمستخدم أو مجلد .ssh الخاص به قابلاً للكتابة من قبل المجموعة. يرفض إعداد StrictModes في sshd المفتاح، ويظهر ذلك من جانب العميل كطلب كلمة مرور غير متوقع دون توضيح.

sudo: /etc/sudoers is world writable، متبوعاً بـ sudo: no valid sudoers sources found, quitting، يعني أن sudo تحقق من نمط ملف الإعداد الخاص به ورفض العمل. يجب أن تكون صلاحية ذلك الملف 0440 ولا يجب أبداً أن يكون قابلاً للكتابة من قبل الجميع. هذه نتيجة كلاسيكية لاستخدام أمر chmod بشكل متكرر على نطاق واسع، وقد يظهر هذا الخطأ مع رسالة sshd المذكورة أعلاه، مما يجعل وحدة تحكم مزود الخدمة (console) هي الوسيلة الوحيدة لاستعادة الوصول.

لماذا لا يُعد 777 حلاً

يمنح 777 صلاحية الكتابة لكل حساب على الجهاز، ولكل عملية تعمل تحت أي من تلك الحسابات. يُشغّل الخادم الخدمات تحت مستخدميها الخاصين، لذا فإن "الجميع" (everyone) تشمل على خادم VPS أكثر بكثير مما تشمله على حاسوب محمول. الخدمة التي تتعرض للاختراق يمكنها الكتابة في أي مكان يسمح به 777.

تحت جذر الويب (web root)، يكون الضرر مباشراً. المجلد القابل للكتابة من قبل الجميع والذي يخدمه الخادم يعني أن ثغرة رفع الملفات تصبح وسيلة لزرع سكربت ثم طلبه مجدداً.

يُعد 777 تقريباً دائماً الإجابة الخاطئة لمشكلة الملكية. العرض هو "التطبيق لا يمكنه الكتابة في هذا المجلد". السبب هو أن المجلد ينتمي للمستخدم الخطأ. استخدام sudo chown -R appuser:appuser /srv/app/storage مع النمط 755 يحل المشكلة: يمكن للتطبيق الكتابة هناك، بينما يمكن لأي حساب آخر سرد المجلد والدخول إليه دون القدرة على الكتابة فيه. إنشاء تلك الحسابات قبل نشر أي شيء يندرج تحت الدقائق العشر الأولى على خادم VPS جديد.

تُعد الكتابة العالمية مشروعة في مكان واحد مألوف، وهو /tmp، وتُكتب drwxrwxrwt. الـ t في النهاية هو الـ sticky bit: المجلد قابل للكتابة من قبل الجميع، ومع ذلك لا يمكن للمستخدم حذف سوى الملفات التي يملكها. بدون هذا البت، يمكن لأي حساب حذف الملفات المؤقتة الخاصة بحساب آخر.

اقرأ الوضع قبل تغييره

تقرأ هذه الأوامر الحالة فقط، لذلك يمكن تشغيلها بأمان في أي مكان.

id
umask
stat -c '%A %a %U %G %n' ~/permdemo ~/permdemo/inner/notes.txt
namei -l ~/permdemo/inner/notes.txt
find ~/permdemo -perm -0002

يسرد find <path> -perm -0002 كل ما يوجد ضمن مسار يكون فيه بت الكتابة للعامة مفعّلاً، وهي أسرع طريقة لتدقيق خادم بعد أن أصلح شخص ما أشياء باستخدام chmod 777.

لمعرفة ما إذا كان حساب خدمة معيّناً يستطيع الدخول إلى دليل، نفّذ الفحص باستخدام ذلك الحساب. يطبع sudo -u www-data test -x /srv/site && echo yes || echo no القيمة yes عندما يملك ذلك المستخدم صلاحية العبور إلى الدليل، ويطبع no عندما لا يملكها. لا يثبت الفحص باستخدام root شيئاً، لأن root يتجاوز هذا التحقق وتكون الإجابة دائماً yes.

FAQ

ماذا يعني drwxr-xr-x في Linux؟

إنه دليل، ويُشار إليه بالحرف الأول d، بنمط 755. ثلاثية المالك هي rwx، لذا يمتلك المالك كافة الصلاحيات عليه. ثلاثية المجموعة هي r-x وثلاثية الآخرين هي r-x، مما يعني أن بإمكان أي شخص آخر سرد الأسماء الموجودة بداخله والمرور عبر الدليل، بينما لا يمكن لأحد غير المالك إضافة أو حذف أي شيء. تحقق من أي مسار باستخدام stat -c '%A %a %U %G %n' <path>، الذي يطبع الصيغة الحرفية والصيغة الثمانية جنباً إلى جنب.

لماذا تكون ملفات الويب 644 وأدلة الويب 755؟

يعمل خادم الويب تحت حساب مختلف، وهو www-data على Ubuntu. يحتاج الخادم إلى صلاحية القراءة للملفات التي يخدمها وصلاحية المرور (traverse) لكل دليل يقع فوقها، ولا يوجد سبب يجعله يمتلك صلاحية الكتابة في أي منهما. يمنح النمط 644 المالك صلاحية الكتابة والآخرين صلاحية القراءة. يمنح النمط 755 المالك صلاحية الكتابة والآخرين صلاحية المرور. يجب تسليم الدليل الذي يحتاج التطبيق للكتابة فيه فعلياً إلى مستخدم ذلك التطبيق باستخدام chown، بدلاً من توسيع النمط للجميع.

هل يعني بت التنفيذ (x) أنني أستطيع تنفيذ دليل؟

لا. في الدليل، يعني x المرور، وهو الحق في الوصول إلى اسم واحد بداخله بينما يقوم النواة (kernel) بتتبع المسار. يحتاج cd إلى هذا الحق، وكذلك كل عملية فتح لملف تحته. يحتاج كل دليل على طول المسار إلى x، لذا يظل الملف ذو النمط 644 غير قابل للوصول عندما يفتقر دليل فوقه إلى x بالنسبة لك. يطبع namei -l /path/to/file نمط كل دليل في السلسلة، مما يوضح أين يتوقف البحث.

هل chmod 777 هو الحل الصحيح في أي وقت؟

تقريباً لا أبداً على الخادم. فهو يمنح صلاحية الكتابة لكل حساب على الجهاز، بما في ذلك الحسابات التي تعمل تحتها الخدمات، لذا يمكن لخدمة واحدة مخترقة إعادة كتابة الملف. عندما لا يستطيع تطبيق الكتابة في دليل، تكون المشكلة الحقيقية عادة هي الملكية: يمنح sudo chown -R appuser:appuser /srv/app/storage مع النمط 755 التطبيق صلاحية الكتابة، بينما تظل الحسابات الأخرى قادرة على قراءة الدليل ولكن لا يمكنها الكتابة فيه. الاستثناء المألوف هو /tmp بالنمط 1777، وهذا يعمل فقط لأن البت اللاصق (sticky bit) يمنع المستخدمين من حذف ملفات بعضهم البعض.

لماذا يطبع ls نقطة أو علامة زائد بعد الصلاحيات؟

يصف ذلك الحرف الحادي عشر قواعد تتجاوز بتات الصلاحيات التسعة. النقطة، كما في drwxr-xr-x.، تعني أن سياق أمان SELinux مرفق، وهو أمر طبيعي على Fedora وRocky. علامة الزائد، كما في drwxr-xr-x+، تعني أن قائمة التحكم في الوصول (POSIX ACL) مضبوطة، لذا يمتلك بعض المستخدمين أو المجموعات حقوقاً لا تظهرها الثلاثيات الثلاث. شغّل getfacl <path> لسرد تلك الإدخالات الإضافية.

هل كان هذا المقال مفيدًا؟

#permissions#ls#chmod#linux-basics#octal