تغيير صلاحيات الملف في ووردبريس

394

تمتلك الملفات والمسارات المختلفة ضمن أنظمة ملفات الحاسوب صلاحيات تحدد من يستطيع وماذا يمكن قراءته وكتابته وتعديله والوصول له، وهذا مهم جدًا لأن ووردبريس يحتاج صلاحية الكتابة للملفات ضمن مسار wp-content لتفعيل وظائف معينة.

أنماط الصلاحيات

7       5    5
 user   group  world
 r+w+x  r+x    r+x
 4+2+1  4+0+1  4+0+1 = 755

يحتسب نمط الصلاحية من خلال إضافة القيم التالية للمستخدم، ومجموعة الملف، وأي شخص آخر، ويُوضح المثال التالي كيفية احتسابها.

  • القراءة Read: تسمح القيمة 4 بقراءة الملفات.
  • الكتابة Write: القيمة 2 تسمح بالكتابة والتعديل على الملفات.
  • التنفيذ eXecute: القيمة 1 تسمح بقراءة المسار والكتابة ضمنه وحذفه وتعديله.
7       4     4
 user   group  world
 r+w+x    r      r
 4+2+1  4+0+0 4+0+0  = 744

إليك أمثلة على أنماط الصلاحيات:

النمطالصلاحيات مرمزة بالأحرفالتفسير
0477‎-r-rwxrwxيمتلك المالك صلاحية القراءة فقط (4) بينما الآخرون والمجموعة تملك صلاحيات rwx (7)
0677‎-rw-rwxrwxيستطيع المالك القراءة والكتابة (6) أما البقية والمجموعة يستطيعون الكتابة والقراءة والتنفيذ (7)
0444-r-r-r-الجميع يستطيع القراءة فقط (4)
0666-rw-rw-rw-الجميع يستطيع القراءة والكتابة فقط (6)
0400‎-r———‎يستطيع المالك القراءة فقط (4) بينما المجموعة والبقية لا يملكون أي صلاحيات
0600‎-rw——-‎يستطيع المالك القراءة والكتابة فقط بينما المجموعة والبقية لا يملكون أي صلاحيات
0470‎-r–rwx—‎يستطيع المالك القراءة فقط بينما تستطيع المجموعة القراءة والكتابة والتنفيذ أما البقية لا يملكون أي صلاحيات
0407‎-r—–rwx‎يستطيع المالك القراءة فقط ولا تملك المجموعة أي صلاحيات أما البقية يملكون صلاحية القراءة والكتابة والتنفيذ
0670‎-rw-rwx—‎يستطيع المالك القراءة والكتابة بينما تستطيع المجموعة القراءة والكتابة والتنفيذ بينما البقية لا يملكون أي صلاحيات
0607‎-rw—-rwxيستطيع المالك القراءة والكتابة بينما لا تملك المجموعة أي صلاحيات والبقية يملكون صلاحيات القراءة والكتابة والتنفيذ

مخطط الصلاحيات في ووردبريس

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

يجب أن تكون جميع الملفات مملوكة من قبل مستخدم حساب FTP الخاص بك ضمن استضافتك وقابلة للكتابة من قبل نفس الحساب. لا يجب أن تكون الملفات مملوكة من قبل إجرائية على الخادم نفسه في الاستضافات المشتركة (بعض الأحيان تكون www أو apache أو المستخدم nobody).

يجب أن يكون كل ملف يحتاج صلاحية الكتابة من ووردبريس مملوكًا من قبل حساب المستخدم أو مجموعة حساب المستخدِم المستخدَم من قبل ووردبريس (يمكن أن يكون مختلفًا عن حساب الخادم)، فعلى سبيل المثال لديك حساب مستخدم يسمح لك بتنزيل ورفع الملفات من وإلى الخادم لكن الخادم نفسه يستعمل مستخدمًا آخر ضمن مجموعة مستخدمين مختلفة مثل dhapache أو nobody. يجب أن يملك هذا الحساب صلاحية الكتابة إذا كان ووردبريس يعمل بنفس حساب FTP مثل أن يكون مالك الملفات أو تابعًا لمجموعة تملك صلاحية الكتابة وفي الحالة الأخيرة تكون الصلاحيات أقل حزمًا من الحالة الافتراضية (مثل استخدام الصلاحيات 775 للمجلدات بدلًا من 755 و 664 للملفات بدلًا من 644).يجب أن تكون صلاحيات الملف والمجلد في ووردبريس نفسها لمعظم المستخدمين، ويعتمد هذا على طريقة تثبيت ووردبريس التي اتبعتها وإعدادات قناع المستخدمين لبيئة النظام لديك وقت التثبيت.

ملاحظات:

  • لا تحتاج لتعديل صلاحيات الملفات في حال ثُبت ووردبريس من قبل مستخدم متمرس إلا إن واجهتك مشاكل وأخطاء مرتبطة بالصلاحيات.
  • إن ثبت ووردبريس بنفسك فغالبًا أنت بحاجة لتعديل صلاحيات الملفات والمجلدات فبعضها يجب أن تستخدم معه صلاحيات أكثر تحديدًا من غيرها مثل ملف wp-config.php، فعادةً يُنشأ هذا الملف ويعطى الصلاحيات 644 حيث من الخطأ الإبقاء عليه هكذا. انظر لقسم الأمن وكيفية رفع السوية الأمنية.

يجب أن تكون جميع ملفات ووردبريس قابلةً للكتابة من قبل حساب المستخدم الخاص بك (أو حساب httpd إن كان مختلفًا). تستخدم أحيانًا عدة حسابات ftp لإدارة تثبيت ووردبريس وإذا كانت جميع هذه الحسابات معروفةً وموثوقةً (أي ليس ضمن استضافة مشتركة) عندها تعيين قابلية الكتابة للمجموعة مناسب، اطلب من مدير الخادم لديك مزيدًا من المعلومات، لكن إن كنت تستخدم الروابط الدائمة mod_rewrite أو ميزةً أخرى من ميزات ‎.htaccess يجب أن تتأكد أن ووردبريس يستطيع الكتابة ضمن ملف ‎.htaccess الخاص بك.

يجب أن تكون جميع الملفات قابلةً للكتابة من قبل المجموعة إن كنت تريد استخدام المحرر الخاص بالقالب لذلك حاول استخدامه قبل تعديل صلاحيات الملفات حيث يجب أن يعمل. هذا صحيح في حال رفع مستخدمون مختلفون ملفات ووردبريس والإضافة أو القالب. لن يُشكل هذا الأمر مشكلةً للإضافات والقوالب المثبتة من قبل مدير الموقع، فعند رفع الملفات باستخدام حسابات ftp مختلفة فإن قابلية الكتابة للمجموعة ضرورية. تأكد ضمن الاستضافات المشتركة أن المجموعة حصرية بالمستخدمين الذين تثق بهم، فلا يجب أن يكون مُستخدم apache ضمن المجموعة ولا أن يمتلك ملفات.

تتطلب بعض الإضافات أن يكون المجلد wp-content قابلًا للكتابة حيث تعلمك بذلك أثناء التثبيت وفي بعض الحالات يتطلب هذا إسناد الصلاحيات 755 له. ينطبق الأمر نفسه على /wp-content/cache/ وربما /wp-content/uploads/ إذا كنت تستخدم تثبيت ووردبريس مع مواقع متعددة سوف تحتاج لتنفيذ ذلك على المسار /wp-content/blog.dir/ أيضًا.

يجب توثيق مسارات إضافية ضمن /wp-content/ من قبل الإضافة أو القالب الذي يحتاجها حيث تختلف الصلاحيات.

/   
|- index.php
|- wp-admin
|   `- wp-admin.css
|- wp-blog-header.php
|- wp-comments-post.php
|- wp-commentsrss2.php
|- wp-config.php
|- wp-content
|   |- cache
|   |- plugins
|   |- themes
|   `- uploads
|- wp-cron.php
|- wp-includes
`- xmlrpc.php

الاستضافات المشتركة مع suexec

يمكن ألا ينطبق ما سبق على الاستضافات المشتركة التي تستخدم suexec لتشغيل النظام البولياني في PHP، حيث يستخدم suexec من قبل العديد من الاستضافات. تشتغل عمليات php في هذه الأنظمة بصفة مالك لملفات php بنفسها مما يسمح باستخدام إعدادات أبسط وبيئة أكثر أمانًا للاستضافة المشتركة.

ملاحظة: لا يجب استخدام تقنيات suexec على إعدادات خادم لموقع واحد، فهي تُعد أكثر أمانًا فقط في حالة الاستضافة المشتركة.

إن الإعداد الصحيح لمخطط الصلاحيات في suexec سهل الفهم.

  • يجب أن تكون جميع الملفات مملوكةً من قبل حساب المستخدم نفسه وليس من قبل حساب المُتسخدم المُستعمل مع عملية httpd.
  • لا توجد أهمية لملكية المجموعة ما لم يكن هناك متطلبات مجموعة محددة لعملية التحقق من الصلاحيات في الخادم، وهذه ليست الحالة العامة.
  • يجب أن تكون صلاحيات جميع المسارات إما 755 أو 750.
  • يجب أن تكون صلاحيات جميع الملفات 644 أو 640 ما عدا الملف wp-config.php التي يجب أن تكون 440 أو 400 لمنع المستخدمين الآخرين ضمن الخادم من قراءته.
  • لا يجب أن تعطى الصلاحيات 777 لأي مسار حتى مسارات الرفع، لأن عملية php هي مالكة للملفات وبالتالي تستطيع الكتابة حتى على المسار ذو الصلاحيات 755.

يعرف ووردبريس أنه يستطيع إنشاء الملفات مباشرةً بالصلاحيات المناسبة ضمن هذا النوع من إعدادات الاستضافة ولن يطلب معلومات حساب ftp عند تحديث أو تثبيت إضافات.

الآليات المشهورة المستخدمة من قبل مديري النظام لهذا النوع من الضبط هي:

  • suPHP تعمل من خلال php-cgi وهي حاليًا غير محدثة منذ عام 2013.
  • mod_ruid2 أحد وحدات apache وهي حاليًا غير مُحدثة منذ عام 2013.
  • mpm-itk وحدة apache.
  • mod_fcgid وحدة Apache وخادم FastCGI مع إعدادات أشمل.
  • PHP-FPM بديل لخادم FastCGI مع OPCode مشترك يُستخدم مع Apache و Nginx.

استخدام FTP Client

تسمح لك برامج FTP بضبط صلاحيات الملفات والمجلدات ضمن الاستضافة، وتُدعى هذه الدالة عادةً chmod أو set permissions ضمن قائمة البرنامج.

يوجد ملفان ضمن تثبيت ووردبريس يجب أن تُغير صلاحياتهما هما index.php وملف css الذي يتحكم بتصميم الصفحة. فيما يلي طريقة تغيير صلاحيات ملف index.php (الطريقة نفسها لأي ملف).

انظر للعمود الأخير في الصورة التالية حيث تظهر الصلاحيات التي تبدو غير مفهومة للوهلة الأولى وانتبه لتسلسل الأحرف.

001_file_permission.gif

انقر بزر الفأرة الأيمن على ملف index.php واختر File Permissions لتظهر لك نافذة منبثقة.

002_ftp_wordpress_file_premission.png

لا داعي لاستخدام المربعات وبدلًا منها احذف القيمة الرقمية في الأعلى وأدخل الرقم الذي تريده حيث استخدمنا في حالتنا 666، ثم اضغط على Ok.

003_file_permission.gif

يجب أن تظهر الآن الصلاحيات الجديدة للملف.

إظهار الملفات المخفية

تبقى جميع برامج FTP بما فيها FileZilla على الملفات المخفية التي تبدأ بنقطة مخقيةً عن أنظر المستخدمين، لكن في مراحل معينة يمكن أن تحتاج لعرض هذه الملفات لتتمكن من تعديل محتواها أو صلاحياتها، فعلى سبيل المثال يمكن أن تحتاج لجعل ملف htaccess (الملف الذي يتحكم بالروابط الدائمة) قابلًا للكتابة.

لعرض الملفات المخفية ضمن برنامج FileZilla اضغط على Server من القائمة ثم اختر Force Show hidden files. سوف تحدّث قائمة عرض الملفات وتظهر الملفات المخفية التي لم تُعرض سابقًا.

استخدام الأوامر السطرية

تستطيع استخدام الأمر chmod إذا كنت تملك وصولًا لاستضافتك من خلال shell/SSH لتغيير صلاحيات الملف وهي الطريقة المفضلة للمستخدمين المتمرسين، لذا قبل استخدام chmod من الأفضل قراءة بعض المقالات التعليمية لتفهم جيدًا ما تستطيع إنجازه باستخدام هذا الأمر. إن استخدام صلاحيات غير صحيحة للملفات أو المجلدات يمكن أن يوقف موقعك عن العمل، لذلك خذ وقتك بالتعلم والقراءة قبل استخدام مثل هذه الأوامر. انظر مقال صلاحيات الملفات واستخدامها في حماية مواقع الويب.

تستطيع جعل جميع الملفات ضمن مجلد wp-content قابلةً للكتابة بخطوتين، لكن قبل جعل كل ملف ومجلد قابل للكتابة عليك تجريب بدائل أكثر أمانًا مثل تعديل المجلد فقط. جرب أولًا كلًا من هذه الأوامر وإن لم تعمل أجر تعديلك على جميع الملفات الأمر الذي يجعل حتى ملفات صور القالب قابلةً للكتابة. استبدل الكلمة DIR بالمجلد الذي تريد الكتابة فيه.

chmod -v 746 DIR
chmod -v 747 DIR
chmod -v 756 DIR
chmod -v 757 DIR
chmod -v 764 DIR
chmod -v 765 DIR
chmod -v 766 DIR
chmod -v 767 DIR

أعد استخدام العملية السابقة إذا فشلت التعليمات السابقة بالسماح لك بالكتابة بنفس الترتيب لكن هذه المرة استبدل الراية ‎-v بالراية ‎-R لتغير صلاحيات كل ملف ضمن المجلد. إن كنت ما تزال غير قادرًا على الكتابة أيضًا عليك تجريب استخدام الصلاحيات 777.

معلومات عن chmod

إن chmod هي أمر ضمن نظام unix يعني تغيير نمط الملف، والراية ‎-R عبارة عن راية تعني تطبيق التغيير على كل ملف ومجلد ضمن wp-content. إن 766 هو النمط الذي نغير المسار إليه وهو يعني أن المسار قابل للقراءة والكتابة من قبل ووردبريس وأي مستخدم آخر ضمن النظام. يوجد أخيرًا اسم المسار الذي تريد تعديله وهو wp-content. كما تستطيع تجريب 777 التي تجعل كل الملفات والمجلدات قابلةً للقراءة والكتابة والتنفيذ من قبل كل المستخدمين والمجموعات والعمليات إن لم تعمل الصلاحيات 766.

يجب عليك تغيير صلاحيات htaccess إن كنت تستخدم الروابط الدائمة للتأكد أن ووردبريس يستطيع تحديث هذا الملف عند تغييرك للإعدادات أو إضافة صفحة جديدة أو إعادة التوجيه حيث يتطلب هذا تحديث ملف htaccess عند استخدام mod_rewrite في الروابط الدائمة.

  1. توجه إلى المسار الرئيسي لووردبريس.
  2. اكتب chmod -v 666 .htaccess.

ملاحظة: يفضل الإبقاء من الناحية الأمنية على بعض الحماية خصوصًا للمسار الرئيسي لذا ابدأ من إعدادات سماحيات أقل مثل 744 وارفعها حتى تصل للنقطة التي يعمل بها الموقع دون مشاكل. واستخدم الصلاحيات 777 فقط عند الضرورة ولفترة مؤقتة.

مخاطر استخدام الصلاحيات 777

تُعد مشكلة هذه الصلاحيات هي كيفية ضبطها لخادمك حيث أن اسم المستخدم الذي تستخدمه للاتصال بخادمك من خلال FTP أو SSH غالبًا مختلف عن اسم المستخدم الذي تستعمله تطبيقات الخادم لإيصال صفحات الموقع للزائر.

7      7      7
 user   group  world
 r+w+x  r+w+x  r+w+x
 4+2+1  4+2+1  4+2+1  = 777

يكون خادم Apache غالبًا ملكًا لحساب www-data أو dhapache أو nobody حيث تمتلك هذه الحسابات وصولًا محدودًا لملفات الخادم لسبب وجيه، فعند ضبط ملفاتك ومجلداتك الشخصية (التابعة لحساب المستخدم الخاص بك) لتكون قابلةً للكتابة من قبل الكل، فأنت حرفيًا تسمح لأي شخص بالكتابة على هذه الملفات أو المجلدات، وهذا يعني أن المستخدمين www-data و dhapache و nobody سوف يتمكنون من الوصول للملفات التابعة لحسابك.

يوفر هذا ثغرةً لشخص ما تمكنه من الوصول للملفات من خلال الاستيلاء على أي عملية ضمن خادمك التي تتضمن أي حساب مستخدم ضمنه، لذا عليك التعامل بحذر عند تعديل الصلاحيات لأكثر من 767 وعند رؤيتك للصلاحيات 777 اسأل نفسك هل هي ضرورية؟

إن أسوأ ما يُمكن أن يحصل عند استخدام الصلاحيات 777 على مجلد أو ملف هو احتمال رفع ملفات معدلة او خبيثة من قبل مخترق لتنفيذ شيفرة برمجية على خادمك وبالتالي يمكن السيطرة على موقعك ومدونتك والحصول على معلومات قاعدة البيانات وكلمة المرور.

إن الحصول على الميزات المحسنة باستخدام إضافات ووردبريس المتوفرة سهل جدًا دون الحاجة لتعريض نفسك للخطر. اتصل بمطور الإضافة أو فريق دعم الاستضافة واطلب منهم حلًا.

استخدام صلاحيات آمنة للملف

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

لنأخذ مثالًا على ضبط الصلاحيات، يتضمن المثال التالي ملف php-cgi ثنائي مخصص وملف php.ini مخصص ضمن المسار cgi-bin لتنفيذ شيفرات php. ولمنع الوصول المباشر من خلال المتصفح للمفسر وملف php.ini سوف يؤمنان من خلال ملف htaccess.

الصلاحيات الافتراضية (القناع 022):

644 -rw-r--r--  /home/user/wp-config.php
644 -rw-r--r--  /home/user/cgi-bin/.htaccess
644 -rw-r--r--  /home/user/cgi-bin/php.ini
755 -rwxr-xr-x  /home/user/cgi-bin/php.cgi
755 -rwxr-xr-x  /home/user/cgi-bin/php5.cgi

الصلاحيات الآمنة:

600 -rw-------  /home/user/wp-config.php
604 -rw----r--  /home/user/cgi-bin/.htaccess
600 -rw-------  /home/user/cgi-bin/php.ini
711 -rwx--x--x  /home/user/cgi-bin/php.cgi
100 ---x------  /home/user/cgi-bin/php5.cgi

صلاحيات ملف htaccess

644 > 604 – أُزيل البت الذي يسمح لمالك المجموعة قراءة الملف htaccess. إذ يُنصح باستخدام 644 عادةً لملفات htaccess.

صلاحيات ملف php.ini

644 > 600 – تمتلك جميع المجموعات والمستخدمين ضمن الخادم وصولًا لملف php.ini حتى عند طلبه من الموقع، وطالما أن ملف php.ini مستخدم فقط من قبل php-cgi عليك التأكد من أن الإجرائية php.cgi تمتلك فقط وصولًا له. تعمل php.cgi مثل المستخدم الذي يملك كلا الملفين والآن مستخدم واحد فقط يستطيع الوصول للملف.

صلاحيات php.cgi

755 > 711 عبارة عن ملف php-cgi ثنائي مفسر يستخدم بدلًا عن mod_php أو vanilla php الافتراضية المقدمة من شركة الاستضافة. تُعد الصلاحيات الافتراضية لهذا الملف هي 755.

صلاحيات php5.cgi

755 > 100 – لا يحتاج أي مستخدم أو مجموعة الوصول لهذا الملف ما عدا حساب المستخدم الذي يملك الإجرائية php.cgi، لذا سوف أعطل الوصول لهذا الملف ما عدا إمكانية التنفيذ. تستطيع محاولة قراءة الملف أو الكتابة عليه لكنك لن تتمكن لأن الصلاحية الوحيدة التي تمتلكها هي تشغيله لتبدأ تنفيذ الشيفرة البرمجية ضمنه. تستطيع تغيير صلاحيات الملف هذا بما أنك تملكه في أي وقت.

$ cat: php5.cgi: Permission denied
./php5.cgi:  Welcome

SELinux

تُعد SELinux اختصارًَا للعبارة Security Enhanced Linux وهي وحدة نواة أمنية توفر آليةً يمكن من خلالها للإجرائيات أن تُختبر في بيئة آمنة ضمن سياقات محددة. يساعد هذا على تقليل الأفعال التي تجريها صفحات الويب على أجزاء أخرى من نظام التشغيل. كما يصعب التمييز بين الإجرائيات المحجوبة بسبب التدابير الأمنية وأخطاء صلاحيات الملف العادية.

يمكن تثبيت SELinux على توزيعات Redhat مثل CentOS وFedora وScintific وAmazon وغيرها.

كيفية تحديد ما إذا كانت SELinux هي المشكلة؟

إذا كانت التوزيعة التي تستخدمها من عائلة Debian فأنت بخير.

نفذ الأوامر التالية (على أنظمة تعتمد على rpm):

# rpm -qa | grep selinux
selinux-policy-targeted-3.13.1-166.el7_4.7.noarch
selinux-policy-3.13.1-166.el7_4.7.noarch
libselinux-2.5-11.el7.x86_64
libselinux-python-2.5-11.el7.x86_64
libselinux-utils-2.5-11.el7.x86_64

وللتحقق ما إذا كان سبب المشكلة هو رفض الصلاحيات:

# getenforce
Enforcing

تُعد أحد المشاكل التي تسببها SELinux هي منع أدوات wp-admin الكتابة على ملف htaccess لإعادة كتابة الرابط. حيث توجد عدة أوامر للتحقق من هذه المشكلة.

# audit2allow -w -a
type=AVC msg=audit(1517275570.388:55362): avc:  denied  { write } for  pid=11831 comm="httpd" path="/var/www/example.org/.htaccess" dev="vda1" ino=67137959 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file
        Was caused by:
        The boolean httpd_unified was set incorrectly.
        Description:
        Allow httpd to unified

        Allow access by executing:
        # setsebool -P httpd_unified 1

بالإضافة للأوامر:

# ausearch -m avc -c httpd
----
time->Tue Jan 30 01:30:31 2018
type=PROCTITLE msg=audit(1517275831.762:55364): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44
type=SYSCALL msg=audit(1517275831.762:55364): arch=c000003e syscall=21 success=no exit=-13 a0=55b9c795d268 a1=2 a2=0 a3=1 items=0 ppid=11826 pid=11829 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1517275831.762:55364): avc:  denied  { write } for  pid=11829 comm="httpd" name="bioactivator.org" dev="vda1" ino=67137958 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir
----

تستطيع تعطيل SELinux مؤقتًا لمعرفة إن كانت سبب المشاكل.

# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]