> For the complete documentation index, see [llms.txt](https://docs.chamilo.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chamilo.org/2.x/ar/dlyl-alidarh/admin-guide/faq/security-guide.md).

# دليل الأمان

يغطي هذا الدليل أفضل الممارسات الأمنية لتشغيل منصة 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 هو الأحدث
