# دليل الأمان

يغطي هذا الدليل أفضل الممارسات الأمنية لتشغيل منصة Chamilo 2.0 في بيئة الإنتاج. الأمان هو مسؤولية مشتركة بين برمجيات المنصة، وتكوين خادمك، والممارسات التشغيلية المستمرة.

## دائمًا قم بتحديث Chamilo

الممارسة الأمنية الأكثر أهمية هي الحفاظ على تثبيت Chamilo محدثًا.

* اشترك في حساب X الأمان Chamilo (@chamilosecurity) أو راقب مستودع GitHub لإعلانات الإصدارات.
* طبق تصحيحات الأمان فورًا. التحديثات الفرعية في فرع 2.0 مصممة لتكون آمنة للتطبيق.
* اتبع [عملية الترقية](/2.x-ar/dlyl-alidarh/admin-guide/installation/upgrading.md) لكل تحديث.

## HTTPS

قدم Chamilo دائمًا عبر HTTPS في بيئة الإنتاج.

* احصل على شهادة SSL/TLS (يوفر Let's Encrypt شهادات مجانية عبر Certbot).
* قم بتكوين خادم الويب الخاص بك لإعادة توجيه جميع حركة المرور HTTP إلى HTTPS.
* فعّل رأس HSTS (HTTP Strict Transport Security) لمنع هجمات التراجع:

  ```
  Strict-Transport-Security: max-age=31536000; includeSubDomains
  ```

بدون HTTPS، بيانات اعتماد تسجيل الدخول، وملفات تعريف الارتباط للجلسة، وبيانات المستخدمين جميعها تُرسل كنص عادي ويمكن اعتراضها في الشبكة.

## أذونات الملفات

حدّ من أذونات الملفات إلى الحد الأدنى الممكن.

| المسار                     | المالك               | الإذن                        | الملاحظات                                                                                                                     |
| -------------------------- | -------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| ملفات التطبيق (كود المصدر) | root أو مستخدم النشر | 755 (الدلائل)، 644 (الملفات) | خادم الويب يحتاج فقط إلى الوصول للقراءة.                                                                                      |
| `var/`                     | مستخدم خادم الويب    | 775                          | يجب أن يكون قابلاً للكتابة لتخزين Symfony المؤقت، والسجلات، ورفع الملفات                                                      |
| `.env`                     | root أو مستخدم النشر | 640                          | يحتوي على أسرار. خادم الويب يحتاج فقط إلى الوصول للقراءة أثناء الاستخدام العادي، لكنه يحتاج إلى الوصول للكتابة أثناء التثبيت. |
| `config/`                  | root أو مستخدم النشر | 750                          | يحتوي على أسرار. خادم الويب يحتاج فقط إلى الوصول للقراءة أثناء الاستخدام العادي، لكنه يحتاج إلى الوصول للكتابة أثناء التثبيت. |

لا تقم أبدًا بتعيين أذونات إلى 777. لا تقم أبدًا بتشغيل خادم الويب كـ root.

## سياسة كلمة المرور

قم بتكوين متطلبات كلمة مرور قوية في [إعدادات الأمان](/2.x-ar/dlyl-alidarh/admin-guide/platform-settings/security-settings.md):

* الحد الأدنى لطول 8 أحرف (يُوصى بـ 12+).
* اجعل مزيجًا إلزاميًا من الحروف الكبيرة، والحروف الصغيرة، والأرقام، والأحرف الخاصة.
* فكّر في تفعيل انتهاء صلاحية كلمة المرور لبيئات الامتثال.
* علّم المستخدمين اختيار كلمات مرور قوية وفريدة.

## حدود المعدل وحماية القوة الغاشمة

### مستوى التطبيق

* اضبط **العدد الأقصى لمحاولات تسجيل الدخول قبل حظر الحساب** (`login_max_attempt_before_blocking_account`) إلى قيمة صغيرة (مثل 5).
* فعّل **CAPTCHA** في صفحة تسجيل الدخول. CAPTCHA نشط/غير نشط — لا يُفعّل تلقائيًا بعد N محاولات فاشلة. اقرنه بـ **أخطاء CAPTCHA قبل الحظر** (`captcha_number_mistakes_to_block_account`) لحظر الحسابات التي تفشل في CAPTCHA باستمرار.

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

استخدم **fail2ban** لمراقبة فشل تسجيل الدخول وحظر عناوين IP المخالفة:

```ini
# /etc/fail2ban/jail.d/chamilo.conf
[chamilo]
enabled = true
port = http,https
filter = chamilo-auth
logpath = /path/to/chamilo/var/log/prod.log
maxretry = 5
bantime = 900
```

أنشئ فلترًا مناسبًا في `/etc/fail2ban/filter.d/chamilo-auth.conf` لمطابقة إدخالات سجل فشل المصادقة.

## إدارة الجلسات

* اضبط **عمر الجلسة** معقولًا (مثل، 3600 ثانية / 1 ساعة) في إعدادات الأمان.
* قم بتكوين **علامات ملف تعريف الارتباط للجلسة** في تكوين Symfony الخاص بك:

  ```yaml
  # config/packages/framework.yaml
  framework:
      session:
          cookie_secure: true      # يُرسل فقط عبر HTTPS
          cookie_httponly: true     # غير قابل للوصول عبر JavaScript
          cookie_samesite: lax     # حماية CSRF
  ```
* فكّر في تعطيل "تذكرني" على المنصات ذات المحتوى الحساس.

## رؤوس الأمان HTTP

قم بتكوين خادم الويب الخاص بك لإرسال رؤوس الأمان:

| الرأس                     | القيمة                            | الغرض                                                               |
| ------------------------- | --------------------------------- | ------------------------------------------------------------------- |
| `X-Content-Type-Options`  | `nosniff`                         | منع استكشاف نوع MIME.                                               |
| `X-Frame-Options`         | `SAMEORIGIN`                      | منع clickjacking عبر iframe.                                        |
| `X-XSS-Protection`        | `1; mode=block`                   | حماية XSS القديمة للمتصفحات القديمة.                                |
| `Referrer-Policy`         | `strict-origin-when-cross-origin` | التحكم في تسرب معلومات referrer.                                    |
| `Content-Security-Policy` | متنوع                             | التحكم في الموارد القابلة للتحميل. يتطلب تعديلًا دقيقًا لـ Chamilo. |

مثال لـ Apache:

```apache
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
```

مثال لـ Nginx:

```nginx
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
```

***

***

## أمان رفع الملفات

* قم بحظر امتدادات الملفات القابلة للتنفيذ (exe, bat, sh, php, phtml, cgi) في [إعدادات الأمان](/2.x-ar/dlyl-alidarh/admin-guide/platform-settings/security-settings.md).
* قم بتكوين خادم الويب الخاص بك لـ **عدم تنفيذ الملفات المرفوعة أبدًا**. بالنسبة لـ Apache، أضف إلى جميع مجلد var/:

  ```apache
  <Directory /path/to/chamilo/var>
      php_admin_flag engine off
      RemoveHandler .php .phtml .php3 .php5
  </Directory>
  ```
* قم بفحص الملفات المرفوعة باستخدام مضاد فيروسات (ClamAV) إذا كان بيئتك تتطلب ذلك.

## أمان قاعدة البيانات

* استخدم **مستخدم قاعدة بيانات مخصص** لـ Chamilo مع الحقوق الوصولية الضرورية فقط (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX على قاعدة بيانات Chamilo).
* لا تستخدم حساب root قاعدة البيانات.
* تأكد من أن قاعدة البيانات غير قابلة للوصول من الإنترنت العام. اربطها بـ localhost أو شبكة خاصة.
* فعّل تسجيل تدقيق قاعدة البيانات لبيئات حساسة تجاه الامتثال.

## النسخ الاحتياطي (Backup)

* جدول **نسخ احتياطي تلقائي يومي** لقاعدة البيانات والملفات المرفوعة.
* احفظ النسخ الاحتياطية في موقع منفصل عن الخادم (خارج الموقع أو تخزين سحابي).
* اختبر استعادة النسخ الاحتياطية بشكل دوري للتأكد من أنها قابلة للاستخدام.
* شفر النسخ الاحتياطية إذا كانت تحتوي على بيانات حساسة.

انظر [النسخ الاحتياطي](/2.x-ar/dlyl-alidarh/admin-guide/maintenance/backups.md) للحصول على تعليمات مفصلة.

## المراقبة

* راقب سجلات Chamilo في `var/log/prod.log` لاكتشاف الأخطاء والأنشطة المشبوهة.
* أعد مراقبة الخادم (CPU، الذاكرة، القرص) لاكتشاف نفاد الموارد.
* قم بتكوين التنبيهات لفشل المصادقة المتكرر.
* راجع حسابات المستخدمين بشكل دوري لاكتشاف الحسابات غير المصرح بها أو غير النشطة.

## قائمة التحقق

استخدم قائمة التحقق هذه عند تنفيذ أو تدقيق تثبيت Chamilo:

* [ ] تم تفعيل HTTPS مع شهادة صالحة
* [ ] تم تكوين إعادة التوجيه من HTTP إلى HTTPS
* [ ] `APP_ENV=prod` و `APP_DEBUG=0` في `.env`
* [ ] تم إنشاء `APP_SECRET` فريد
* [ ] تم تقييد أذونات الملفات (لا 777)
* [ ] تم تكوين سياسة كلمة المرور
* [ ] تم تفعيل الحد الأقصى لمحاولات الدخول و CAPTCHA
* [ ] تم حظر امتدادات الملفات القابلة للتنفيذ
* [ ] تم تكوين رؤوس الأمان في خادم الويب
* [ ] تم تعيين علامات ملفات تعريف الارتباط للجلسة (secure، httponly، samesite)
* [ ] يمتلك مستخدم قاعدة البيانات الحقوق الوصولية الدنيا
* [ ] تم جدولة النسخ الاحتياطي التلقائي واختباره
* [ ] تم تنفيذ مراقبة السجلات
* [ ] إصدار Chamilo هو الأحدث


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chamilo.org/2.x-ar/dlyl-alidarh/admin-guide/faq/security-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
