# Οδηγός Ασφάλειας

Αυτός ο οδηγός καλύπτει τις βέλτιστες πρακτικές ασφάλειας για την εκτέλεση της πλατφόρμας Chamilo 2.0 σε παραγωγικό περιβάλλον. Η ασφάλεια είναι κοινή ευθύνη μεταξύ του λογισμικού της πλατφόρμας, της διαμόρφωσης του διακομιστή σας και των συνεχιζόμενων λειτουργικών πρακτικών.

## Διατήρηση Ενημερωμένης Chamilo

Η σημαντικότερη πρακτική ασφάλειας είναι η διατήρηση της εγκατάστασης Chamilo ενημερωμένη.

* Εγγραφείτε στον λογαριασμό X ασφαλείας Chamilo (@chamilosecurity) ή παρακολουθήστε το αποθετήριο GitHub για ανακοινώσεις κυκλοφοριών.
* Εφαρμόστε τα patches ασφαλείας άμεσα. Οι μικρές ενημερώσεις εντός του κλάδου 2.0 είναι σχεδιασμένες να είναι ασφαλείς στην εφαρμογή.
* Ακολουθήστε τη [διαδικασία αναβάθμισης](/2.x-el/odigos-diaxeirisis/admin-guide/installation/upgrading.md) για κάθε ενημέρωση.

## HTTPS

Πάντα να παρέχετε την Chamilo μέσω HTTPS σε παραγωγικό περιβάλλον.

* Αποκτήστε πιστοποιητικό SSL/TLS (το Let's Encrypt παρέχει δωρεάν πιστοποιητικά μέσω Certbot).
* Διαμορφώστε τον web server σας να ανακατευθύνει όλη την κίνηση HTTP σε HTTPS.
* Ενεργοποιήστε την κεφαλίδα HSTS (HTTP Strict Transport Security) για την αποτροπή επιθέσεων υποβάθμισης:

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

Χωρίς HTTPS, τα διαπιστευτήρια σύνδεσης, τα cookies συνεδρίας και όλα τα δεδομένα χρήστη μεταδίδονται σε απλό κείμενο και μπορούν να παρεμβληθούν στο δίκτυο.

## Δικαιώματα Αρχείων

Περιορίστε τα δικαιώματα αρχείων στο ελάχιστο απαραίτητο.

| Διαδρομή                           | Κάτοχος                  | Δικαιώματα                    | Σημειώσεις                                                                                                                                           |
| ---------------------------------- | ------------------------ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Αρχεία εφαρμογής (πηγαίος κώδικας) | root ή χρήστης ανάπτυξης | 755 (κατάλογοι), 644 (αρχεία) | Ο web server χρειάζεται πρόσβαση μόνο-ανάγνωσης.                                                                                                     |
| `var/`                             | χρήστης web server       | 775                           | Πρέπει να είναι εγγράψιμο για cache Symfony, αρχεία καταγραφής και μεταφορτώσεις αρχείων                                                             |
| `.env`                             | root ή χρήστης ανάπτυξης | 640                           | Περιέχει μυστικά. Ο web server χρειάζεται πρόσβαση ανάγνωσης μόνο κατά τη φυσιολογική χρήση, αλλά χρειάζεται πρόσβαση εγγραφής κατά την εγκατάσταση. |
| `config/`                          | root ή χρήστης ανάπτυξης | 750                           | Περιέχει μυστικά. Ο web server χρειάζεται πρόσβαση ανάγνωσης μόνο κατά τη φυσιολογική χρήση, αλλά χρειάζεται πρόσβαση εγγραφής κατά την εγκατάσταση. |

Ποτέ μην ορίζετε δικαιώματα σε 777. Ποτέ μην εκτελείτε τον web server ως root.

## Πολιτικές Κωδικών Πρόσβασης

Διαμορφώστε αυστηρές απαιτήσεις κωδικών πρόσβασης στις [Ρυθμίσεις Ασφαλείας](/2.x-el/odigos-diaxeirisis/admin-guide/platform-settings/security-settings.md):

* Ελάχιστο μήκος 8 χαρακτήρων (12+ συνιστάται).
* Απαίτηση συνδυασμού κεφαλαίων, πεζών, αριθμών και ειδικών χαρακτήρων.
* Σκεφτείτε την ενεργοποίηση λήξης κωδικού πρόσβασης για περιβάλλοντα με απαιτήσεις συμμόρφωσης.
* Εκπαιδεύστε τους χρήστες σχετικά με την επιλογή ισχυρών, μοναδικών κωδικών πρόσβασης.

## Περιορισμός Ρυθμού και Προστασία Brute-Force

### Επίπεδο Εφαρμογής

* Ορίστε **Μέγιστες προσπάθειες σύνδεσης πριν τον αποκλεισμό λογαριασμού** (`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 ώρα) στις ρυθμίσεις ασφαλείας.
* Διαμορφώστε **σημαίες cookie συνεδρίας** στη διαμόρφωση Symfony σας:

  ```yaml
  # config/packages/framework.yaml
  framework:
      session:
          cookie_secure: true      # Only send over HTTPS
          cookie_httponly: true     # Not accessible via JavaScript
          cookie_samesite: lax     # CSRF protection
  ```
* Σκεφτείτε την απενεργοποίηση του "Remember me" σε πλατφόρμες με ευαίσθητο περιεχόμενο.

## Κεφαλίδες Ασφαλείας HTTP

Διαμορφώστε τον web server σας να αποστέλλει κεφαλίδες ασφαλείας:

| Κεφαλίδα                  | Τιμή                              | Σκοπός                                                                              |
| ------------------------- | --------------------------------- | ----------------------------------------------------------------------------------- |
| `X-Content-Type-Options`  | `nosniff`                         | Αποτρέπει την ανίχνευση τύπου MIME.                                                 |
| `X-Frame-Options`         | `SAMEORIGIN`                      | Αποτρέπει το clickjacking μέσω iframes.                                             |
| `X-XSS-Protection`        | `1; mode=block`                   | Αρχαία προστασία XSS για παλαιότερους browsers.                                     |
| `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-el/odigos-diaxeirisis/admin-guide/platform-settings/security-settings.md).
* Ρυθμίστε τον web server σας ώστε να **μην εκτελεί ποτέ ανεβασμένα αρχεία**. Για Apache, προσθέστε για ολόκληρο τον κατάλογο var/:

  ```apache
  <Directory /path/to/chamilo/var>
      php_admin_flag engine off
      RemoveHandler .php .phtml .php3 .php5
  </Directory>
  ```
* Σαρώνετε τα ανεβασμένα αρχεία με antivirus (ClamAV) αν το περιβάλλον σας το απαιτεί.

## Ασφάλεια Βάσης Δεδομένων

* Χρησιμοποιήστε έναν **ειδικό χρήστη βάσης δεδομένων** για το Chamilo με μόνο τα προνόμια που χρειάζεται (SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX στη βάση δεδομένων του Chamilo).
* Μην χρησιμοποιείτε τον λογαριασμό root της βάσης δεδομένων.
* Βεβαιωθείτε ότι η βάση δεδομένων δεν είναι προσβάσιμη από το δημόσιο internet. Δέστε την στο localhost ή σε ιδιωτικό δίκτυο.
* Ενεργοποιήστε καταγραφή ελέγχου βάσης δεδομένων για περιβάλλοντα ευαίσθητα ως προς τη συμμόρφωση.

## Αντίγραφα Ασφαλείας

* Προγραμματίστε **ημερήσια αυτοματοποιημένα αντίγραφα ασφαλείας** τόσο της βάσης δεδομένων όσο και των ανεβασμένων αρχείων.
* Αποθηκεύστε τα αντίγραφα ασφαλείας σε ξεχωριστή τοποθεσία από τον server (εκτός έδρας ή cloud αποθήκευση).
* Δοκιμάστε περιοδικά την αποκατάσταση αντιγράφων ασφαλείας για να επαληθεύσετε ότι είναι χρησιμοποιήσιμα.
* Κρυπτογραφήστε τα αντίγραφα ασφαλείας αν περιέχουν ευαίσθητα δεδομένα.

Δείτε τις [Οδηγίες Αντιγράφων Ασφαλείας](/2.x-el/odigos-diaxeirisis/admin-guide/maintenance/backups.md) για λεπτομερείς οδηγίες.

## Παρακολούθηση

* Παρακολουθείτε τα logs του Chamilo στο `var/log/prod.log` για σφάλματα και ύποπτη δραστηριότητα.
* Ρυθμίστε παρακολούθηση server (CPU, μνήμη, δίσκος) για ανίχνευση εξάντλησης πόρων.
* Ρυθμίστε ειδοποιήσεις για επαναλαμβανόμενες αποτυχίες πιστοποίησης.
* Ελέγχετε περιοδικά λογαριασμούς χρηστών για μη εξουσιοδοτημένους ή ανενεργούς λογαριασμούς.

## Λίστα Ελέγχου

Χρησιμοποιήστε αυτή τη λίστα ελέγχου κατά την ανάπτυξη ή έλεγχο εγκατάστασης Chamilo:

* [ ] Ενεργοποιημένο HTTPS με έγκυρο πιστοποιητικό
* [ ] Ρύθμιση ανακατεύθυνσης HTTP σε HTTPS
* [ ] `APP_ENV=prod` και `APP_DEBUG=0` στο `.env`
* [ ] Δημιουργημένο μοναδικό `APP_SECRET`
* [ ] Περιορισμένα δικαιώματα αρχείων (όχι 777)
* [ ] Ρυθμισμένη πολιτική κωδικών
* [ ] Ενεργοποιημένες μέγιστες προσπάθειες σύνδεσης και CAPTCHA
* [ ] Μπλοκαρισμένες επεκτάσεις εκτελέσιμων αρχείων
* [ ] Ρυθμισμένες κεφαλίδες ασφαλείας στον web server
* [ ] Σημαίες cookie συνεδρίας ρυθμισμένες (secure, httponly, samesite)
* [ ] Χρήστης βάσης δεδομένων με ελάχιστα προνόμια
* [ ] Προγραμματισμένα και δοκιμασμένα αυτοματοποιημένα αντίγραφα ασφαλείας
* [ ] Παρακολούθηση logs ενεργή
* [ ] Τρέχουσα έκδοση 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-el/odigos-diaxeirisis/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.
