سأحاول اليوم تكوين دليل المستخدم على خادم Apache. واجهت مشكلة صعبة وتتلخص عملية التكوين والمشاكل وحلولها على النحو التالي:
1. التكوين التقليدي:
إضافة ويب المستخدم:
adduser web
ويب passwd
أنشئ دليل public_html في دليل مستخدم الويب واضبط الأذونات على 755:
مكدير public_html
شمود 755 public_html -R
تعديل /etc/http/httpd.conf:
#
# UserDir: اسم الدليل الملحق بمنزل المستخدم
# الدليل في حالة تلقي طلب مستخدم ~.
#
# يجب أن يكون المسار إلى دليل "public_html" الخاص بحساب المستخدم النهائي
# يمكن الوصول إليه من خلال معرف مستخدم خادم الويب، وهذا يعني عادةً أن ~userid
# يجب أن يكون لديه أذونات 711، ويجب أن يكون لدى ~userid/public_html أذونات
# من 755، ويجب أن تكون المستندات الواردة فيه قابلة للقراءة عالميًا.
# بخلاف ذلك، سيتلقى العميل فقط رسالة "403 محظور".
#
# راجع أيضًا: http://httpd.apache.org/docs/misc/FAQ.html#forbidden
#
#
# يتم تعطيل UserDir افتراضيًا لأنه يمكنه تأكيد التواجد
# لاسم المستخدم على النظام (اعتمادًا على الدليل الرئيسي
# الأذونات).
#
#تعطيل_UserDir
#
# لتمكين الطلبات المقدمة إلى /~user/ لخدمة public_html الخاص بالمستخدم
# الدليل، قم بإزالة السطر "تعطيل UserDir" أعلاه، وقم بإلغاء التعليق
# السطر التالي بدلا من ذلك:
#
UserDir public_html
2. حدوث الاختبارات والمشاكل:
http://127.0.0.1/~web
=========================
مُحرَّم
ليس لديك إذن للوصول إلى /~web على هذا الخادم.
بالإضافة إلى ذلك، تمت مواجهة خطأ 403 محظور أثناء محاولة استخدام ErrorDocument لمعالجة الطلب.
-------------------------------------------------- ----------------------------------
خادم Apache/2.0.54 (Fedora) على المنفذ 127.0.0.1 80
بشكل عام، عند حدوث هذه المشكلة، فإن المشكلة التي تتبادر إلى الذهن هي إذن الوصول إلى الدليل، وبعد وقت طويل من الفحص والتعديل، لم يتم حل المشكلة. خلال هذه الفترة، فكرت فيما إذا كانت هناك مشكلة في Selinux، فذهبت ونظرت حولي، لكنني لم أجد شيئًا يمكن تغييره. (تثبت الحقائق اللاحقة أن الحدس يكون دقيقًا للغاية في بعض الأحيان. والفرق بين ما إذا كان يمكنك العثور على الإجابة هو غالبًا ما إذا كنت تتعمق في الحدس).
3. حل المشكلة. بعد البحث عن Apache 403 على Google لفترة طويلة، رأيت أخيرًا في إحدى المدونات أن المؤلف واجه نفس المشكلة تمامًا التي واجهتني: كان تكوين Apache والدليل جيدًا، ولكن يمكن أن تكون الصفحة لا يتم عرضها. الحل هو تعديل التحكم في الوصول الخاص بـ Selinux إلى public_html.
استخدم الأمر التالي لتعديل سمات أمان المجلد
chcon -R -t httpd_user_content_t public_html/
4. ملخص المعرفة ذات الصلة:
الأسئلة الشائعة حول فيدورا كور 5 SELinux
http://fedora.redhat.com/docs/selinux-faq-fc5/#faq-entry-public_html س: كيف أجعل دليل public_html للمستخدم يعمل ضمن SELinux؟
ج: تفترض هذه العملية أنك قمت بتمكين أدلة HTML العامة للمستخدم في ملف تكوين Apache، /etc/httpd/conf/httpd.conf. تغطي هذه العملية فقط خدمة محتوى الويب الثابت. لمزيد من المعلومات حول Apache HTTP وSELinux، راجع http://fedora.redhat.com/docs/selinux-apache-fc3/.
إذا لم يكن لديك بالفعل دليل ~/public_html، فقم بإنشائه وملؤه بالملفات والمجلدات التي سيتم تقديمها.
cd ~mkdir public_htmlcp /path/to/content ~/public_html
في هذه المرحلة، تم تكوين httpd لخدمة المحتويات، ولكنك لا تزال تتلقى خطأ محظورًا 403، وذلك لأن httpd غير مسموح له بقراءة نوع الأمان للدليل والملفات كما تم إنشاؤها في الدليل الرئيسي للمستخدم سياق الأمان للمجلد ومحتوياته بشكل متكرر باستخدام الخيار -R:
ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:user_home_t public_htmlchcon -R -t httpd_user_content_t public_html/ls -Z -d public_html/drwxrwxr-x auser auser user_u:object_r:httpd_user_content_t public_html/ls -Z public_html/- rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t bar.html-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t baz.html-rw-rw-r-- auser auser user_u:object_r:httpd_user_content_t foo.html
قد تلاحظ في وقت لاحق أن حقل المستخدم، الذي تم تعيينه هنا إلى user_u، تم تغييره إلى system_u. وهذا لا يؤثر على كيفية عمل السياسة المستهدفة. الحقل المهم هو حقل النوع.
من المفترض الآن أن يتم عرض صفحات الويب الثابتة الخاصة بك بشكل صحيح، إذا استمرت الأخطاء، فتأكد من تمكين Boolean الذي يمكّن الدلائل الرئيسية للمستخدم. يمكنك تعيينه باستخدام System-config-securitylevel. حدد علامة التبويب SELinux، ثم حدد Modify SELinux منطقة السياسة. حدد السماح لـ HTTPD بقراءة الدلائل الرئيسية.
تحليل الأوامر المستخدمة:
ليرة سورية -Z -d public_html/
# عرض سياق الأمان للملف/الدليل -Z, --context
عرض سياق الأمان بحيث يتناسب مع معظم شاشات العرض يعرض الوضع والمستخدم والمجموعة وسياق الأمان واسم الملف فقط
قم بإدراج إدخالات الدليل بدلاً من المحتويات، ولا تقم بإلغاء الإشارة إلى الروابط الرمزية
chcon -R -t httpd_user_content_t public_html/
# تعديل سياق الأمان للملفات/الدلائل -R, --recursive
تغيير الملفات والدلائل بشكل متكرر-t، --type
قم بتعيين النوع TYPE في سياق الأمان الهدف